calendario.php 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
  1. <?php
  2. require_once("../include/nocache.php");
  3. require_once("../include/constantes.php");
  4. require_once("../include/util.php");
  5. require_once("../include/bd_pdo.php");
  6. require_once("../classes/ValidaSesion.php");
  7. require_once("../classes/MainMenu.php");
  8. require_once("./classes/Evento.php");
  9. $menu =11;
  10. $submenu = 112;
  11. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  12. $objSesion = new ValidaSesion($pdo, $submenu, GEMA);
  13. if(!$objSesion->tieneAcceso()){
  14. $objSesion->terminaSesion();
  15. }
  16. $objSesion->validaPeriodoUsuario();//si no tiene periodo manda a main
  17. ?>
  18. <!DOCTYPE html>
  19. <html lang="es" prefix="og: http://ogp.me/ns#">
  20. <head>
  21. <title>GEMA - Facultad de Ingeniería</title>
  22. <meta charset="utf-8">
  23. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  24. <link rel="icon" type="image/png" href="../img/favicon.png" />
  25. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  26. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  27. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  28. <?php if($objSesion->puedeEditar() ){ ?>
  29. <link rel="stylesheet" href="../css/jquery-ui.css" type="text/css">
  30. <link rel="stylesheet" href="../css/calendar.css" type="text/css">
  31. <link rel="stylesheet" href="../css/clockpicker.css" type="text/css">
  32. <link rel="stylesheet" href="../css/toggle.css" type="text/css">
  33. <link rel="stylesheet" href="../css/colpick.css" type="text/css">
  34. <?php }?>
  35. <link rel="stylesheet" href="./css/calendario_eventos.css?rand=<?php echo rand();?>" type="text/css">
  36. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  37. <script src="../js/util.js"></script>
  38. </head>
  39. <body>
  40. <div>
  41. <?php
  42. //--- Objeto que pinta menu
  43. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, GEMA, "Calendario Eventos &raquo; ".$_SESSION["periodo_desc"]);//usr, menu, pdo, sist
  44. $menuObj->printMenu();
  45. //Obtiene fechas de periodo
  46. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
  47. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  48. if(!$stmt->execute()){
  49. //print_r($stmt->errorInfo());
  50. $errorDesc = "Ocurrió un error al cargar los datos del periodo";
  51. }else{
  52. $periodo_rs = $stmt->fetch();
  53. }
  54. $stmt->closeCursor();
  55. if($periodo_rs["Periodo_id"] !=""){
  56. //calcula limite de calendario de periodo
  57. $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 3)');//periodo
  58. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  59. if(!$stmt->execute()){
  60. $errorDesc = "Ocurrió un error al cargar las fechas del periodo";
  61. }else{
  62. $fecha_rs = $stmt->fetch();
  63. $fecha_min = date('d/m/Y', strtotime($fecha_rs["FechaImportante_inicial"].' - 1 month '));
  64. $fecha_max = date('d/m/Y', strtotime($fecha_rs["FechaImportante_final"].' + 1 month '));
  65. }
  66. $stmt->closeCursor();
  67. $stmt = null;
  68. //Perfiles de usuario actual
  69. $perfilUsr_arr = array();
  70. if(!$objSesion->puedeEditar() ){
  71. $stmt = $pdo->prepare('Select * from fs_esDirectivo(:usr)');//periodo
  72. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  73. if($stmt->execute()){
  74. $rs = $stmt->fetch();
  75. if($rs["fs_esdirectivo"]){
  76. $perfilUsr_arr[]= "1";
  77. }
  78. }
  79. $stmt->closeCursor();
  80. if($_SESSION["administrativo"]){
  81. $perfilUsr_arr[]= "2";
  82. }
  83. if($_SESSION["profesor"]){
  84. $perfilUsr_arr[]= "3";
  85. }
  86. }
  87. //Obtiene perfiles
  88. $stmt = $pdo->prepare('Select * from fs_calendarioperfil()');
  89. if(!$stmt->execute()){
  90. //print_r($stmt->errorInfo());
  91. $errorDesc = "Ocurrió un error al cargar los perfiles del calendario";
  92. }else{
  93. $perfil_rs = $stmt->fetchAll();
  94. }
  95. $stmt->closeCursor();
  96. $stmt = null;
  97. //Obtiene repeticiones
  98. $stmt = $pdo->prepare('Select * from fs_calendariorepeticion()');
  99. if(!$stmt->execute()){
  100. //print_r($stmt->errorInfo());
  101. $errorDesc = "Ocurrió un error al cargar los tipos de repetición de eventos del calendario";
  102. }else{
  103. $rep_rs = $stmt->fetchAll();
  104. }
  105. $stmt->closeCursor();
  106. $stmt = null;
  107. //Obtiene categorías
  108. $stmt = $pdo->prepare('Select * from fs_insigniatipo(NULL, true)');
  109. if(!$stmt->execute()){
  110. //print_r($stmt->errorInfo());
  111. $errorDesc = "Ocurrió un error al cargar los tipos de insignias de eventos del calendario";
  112. }else{
  113. $cat_rs = $stmt->fetchAll();
  114. }
  115. $stmt->closeCursor();
  116. $stmt = null;
  117. //Obtiene atributos de egreso
  118. $stmt = $pdo->prepare('Select * from fs_atributoegresogeneral(NULL, true)');
  119. if(!$stmt->execute()){
  120. //print_r($stmt->errorInfo());
  121. $errorDesc = "Ocurrió un error al cargar los atribuos de egreso";
  122. }else{
  123. $atributos_rs = $stmt->fetchAll();
  124. }
  125. $stmt->closeCursor();
  126. $stmt = null;
  127. //Obtiene niveles de atributos de egreso
  128. $stmt = $pdo->prepare('Select * from fs_atributoegreso_nivel(NULL)');
  129. if(!$stmt->execute()){
  130. //print_r($stmt->errorInfo());
  131. $errorDesc = "Ocurrió un error al cargar los atribuos de egreso";
  132. }else{
  133. $nivel_rs = $stmt->fetchAll();
  134. }
  135. $stmt->closeCursor();
  136. $stmt = null;
  137. //Obtiene puestos directivos
  138. $stmt = $pdo->prepare('Select * from fs_puestosdirectivos()');
  139. if(!$stmt->execute()){
  140. //print_r($stmt->errorInfo());
  141. $errorDesc = "Ocurrió un error al cargar los puestos directivos";
  142. }else{
  143. $puestos_rs = $stmt->fetchAll();
  144. }
  145. $stmt->closeCursor();
  146. $stmt = null;
  147. if(!isset($_POST["mes"])){
  148. /*$mes_actual = intval(date("n", strtotime($periodo_rs["Periodo_fecha_inicial"])));//mes sin 0s
  149. $anho_actual = intval(date("Y", strtotime($periodo_rs["Periodo_fecha_inicial"])));*/
  150. $mes_actual = date("n");
  151. $anho_actual = date("Y");
  152. if(strtotime($anho_actual."-".$mes_actual."-1") < strtotime(fechaGuion($fecha_min))){
  153. $mes_actual = intval(date("n", strtotime(fechaGuion($fecha_min))));//mes sin 0s
  154. $anho_actual = intval(date("Y", strtotime(fechaGuion($fecha_min))));
  155. }else if(strtotime($anho_actual."-".$mes_actual."-1") > strtotime(fechaGuion($fecha_max))){
  156. $mes_actual = intval(date("n", strtotime(fechaGuion($fecha_max))));//mes sin 0s
  157. $anho_actual = intval(date("Y", strtotime(fechaGuion($fecha_max))));
  158. }
  159. }else{
  160. $mes_actual = filter_input(INPUT_POST, "mes", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  161. $anho_actual = filter_input(INPUT_POST, "anho", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  162. }
  163. $dias_max = date("t", strtotime($anho_actual."-".$mes_actual."-1"));
  164. }else{
  165. $errorDesc = "Debes seleccionar un periodo.";
  166. }
  167. //--Manejo de errores y mensajes de exito
  168. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  169. switch ($_GET["error"]){
  170. case 0: $errorDesc = "No se reciberon los datos del evento."; break;
  171. case 1: $errorDesc = "Ocurrió un error al insertar los datos del evento."; break;
  172. case 2: $errorDesc = "Ocurrió un error al actualizar los datos del evento."; break;
  173. case 3: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  174. }
  175. }
  176. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  177. switch ($_GET["ok"]){
  178. case 0: $successDesc = "El evento se guardó correctamente."; break;
  179. case 1: $successDesc = "El evento se actualizó correctamente."; break;
  180. }
  181. }
  182. ?>
  183. <div class="container-fluid marco pt-3">
  184. <?php include_once("../include/errorMessage.php"); ?>
  185. <?php include("../include/periodoCambio.php");?>
  186. <p class="mt-2 mb-5">Crea eventos programados para el periodo a los cuales se les podrán asignar insignias.</p>
  187. <?php if($periodo_rs["Periodo_id"] !=""){?>
  188. <div class="row">
  189. <div class="col-6">
  190. <h4 class="mb-3 mayusculas">
  191. <?php if( $anho_actual."-".($mes_actual<10?"0".$mes_actual:$mes_actual)."-01" > fechaGuion($fecha_min)){?>
  192. <span class="pointer cambia-mes" data-mes="-1"><?php echo $ICO["izquierda"];?></span>
  193. <?php } ?>
  194. <?php echo mesNombre($mes_actual)." ".$anho_actual;?>
  195. <?php if( $anho_actual."-".($mes_actual+1<10?"0".($mes_actual+1):($mes_actual+1))."-01" < fechaGuion($fecha_max)){?>
  196. <span class="pointer cambia-mes" data-mes="1"><?php echo $ICO["derecha"];?></span>
  197. <?php } ?>
  198. </h4>
  199. </div>
  200. <div class="col-6 text-right">
  201. <?php if($objSesion->puedeEditar() ){ ?>
  202. <button type="button" class="btn btn-outline-primary calendario_nuevo"><?php echo $ICO["mas"];?> Crear evento</button>
  203. <?php } ?>
  204. <!-- <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal_exportar" data-tipo="1"><?php echo $ICO["descargar"];?> Exportar</button> -->
  205. </div>
  206. </div>
  207. <?php
  208. $stmt = $pdo->prepare('Select * from fs_dia(NULL)');
  209. if(!$stmt->execute()){
  210. echo "Error al obtener los días";
  211. print_r($stmt->errorInfo());
  212. }
  213. $dias_rs = $stmt->fetchAll();
  214. $stmt->closeCursor();
  215. $stmt = null;
  216. /* Definidas en constantes.php
  217. HORA_INICIO = 7;
  218. HORA_FINAL = 22;
  219. FRACCION_HORA = 4;*/
  220. ?>
  221. <?php }?>
  222. </div>
  223. <main class="container-fluid content marco-wide">
  224. <?php if($periodo_rs["Periodo_id"] !=""){ ?>
  225. <form action="calendario.php" method="post" id="formaCalendario">
  226. <input type="hidden" name="mes" id="mes" value="<?php echo $mes_actual;?>">
  227. <input type="hidden" name="anho" id="anho" value="<?php echo $anho_actual;?>">
  228. <div class="mt-2 mb-2">
  229. <div class="row justify-content-md-center">
  230. <div class="col-md-auto">
  231. <table class="table table-sm table-responsive table-borderless calendario" id="tabla-horario">
  232. <thead class="thead-dark">
  233. <tr>
  234. <?php for($dia = 0; $dia < 7; $dia++){
  235. echo "<th style='text-transform: capitalize; width: 180px'>".diaNombre($dia)."</th>";
  236. } ?>
  237. </tr>
  238. </thead>
  239. <tbody id="calendario-body">
  240. <tr>
  241. <td colspan="7">
  242. <div class="area-horario">
  243. <table class="table table-borderless">
  244. <tbody>
  245. <?php
  246. $dia = 1;
  247. $cells = 0;
  248. $editable = "";
  249. if($objSesion->puedeEditar()) $editable = "editable";
  250. ?>
  251. <tr class="border-bottom">
  252. <?php
  253. //días antes de que empiece el mes
  254. $dia_inicio = date("w", strtotime($anho_actual."-".$mes_actual."-1"));//0 a 7
  255. $j=0;
  256. while($j < $dia_inicio){
  257. echo "<td class='bg-info cell' id='cell".$cells."' data-cell='".$cells."'>&nbsp;</td>";
  258. $cells++;
  259. $j++;
  260. }
  261. do{
  262. $dia_class = "border-primary bg-white";
  263. if(date('Y-n-j') == $anho_actual.'-'.$mes_actual.'-'.$dia){
  264. $dia_class = "border-white bg-danger text-white";
  265. }
  266. ?>
  267. <td style="width: 180px" id="dia<?php echo $dia;?>" class='cell <?php echo $editable;?>' data-cell="<?php echo $cells;?>" data-fecha="<?php echo date("d/m/Y", strtotime($anho_actual."-".$mes_actual."-".$dia)); ?>">
  268. <div class='date-num border rounded-pill mb-2 <?php echo $dia_class;?>'><?php echo $dia;?></div>
  269. <div class="calendario_eventos">
  270. </div>
  271. </td>
  272. <?php
  273. $cells++;
  274. $dia++;
  275. if($cells%7 == 0 && $cells > 0){//domingo
  276. echo '</tr><tr class="border-bottom">';
  277. }
  278. }while($dia <= $dias_max);
  279. $j=7 - $cells%7;
  280. while($j > 0 && $j<7){
  281. echo "<td class='bg-info'>&nbsp;</td>";
  282. $j--;
  283. }
  284. ?>
  285. </tr>
  286. </tbody>
  287. </table>
  288. <div id="bloque-horarios">
  289. </div>
  290. </div>
  291. </td>
  292. </tr>
  293. </tbody>
  294. </table>
  295. </div>
  296. </div>
  297. </div>
  298. </form>
  299. <!-- Referencia de colores -->
  300. <div class="row justify-content-md-center">
  301. <div class="col-12">
  302. <h5 class="mt-2">Categorías</h5>
  303. </div>
  304. <div class="col-12">
  305. <?php foreach($cat_rs as $cat){ ?>
  306. <span class="tipo-area">
  307. <span class="ico-border" style="color:<?php echo $cat["InsigniaTipo_color"]?>"><?php echo $ICO["circulo"];?></span>
  308. <?php echo $cat["InsigniaTipo_desc"]?>
  309. <?php if($objSesion->puedeEditar() && $_SESSION["sgi_administrador"]){?>
  310. <span class="ing-editar ing-fw categoria_edita pointer" data-id="<?php echo $cat["InsigniaTipo_id"]; ?>" data-color="<?php echo $cat["InsigniaTipo_color"]?>" data-desc="<?php echo $cat["InsigniaTipo_desc"]?>" aria-hidden="true" title="Editar"></span>
  311. <?php } ?>
  312. </span>
  313. <?php } ?>
  314. <?php if($objSesion->puedeEditar() && $_SESSION["sgi_administrador"]){?>
  315. <span class="tipo-area">
  316. <button class="btn btn-outline-secondary btn-sm mb-1" data-toggle="modal" data-target="#modal_categoria" data-nuevo="1"><?php echo $ICO["mas"];?> Agregar</button>
  317. </span>
  318. <?php } ?>
  319. </div>
  320. </div>
  321. <?php } ?>
  322. </main>
  323. <!--- FOOTER--->
  324. <?php require_once("../include/footer.php"); ?>
  325. <?php
  326. if($objSesion->puedeEditar() && $periodo_rs["Periodo_id"] !=""){
  327. ?>
  328. <!-- Modal -->
  329. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  330. <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
  331. <div class="modal-content">
  332. <div class="modal-header">
  333. <h4 class="col-12 modal-title text-center"><span id="modalLabel">Evento de calendario</span>
  334. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  335. <span aria-hidden="true">&times;</span>
  336. </button>
  337. </h4>
  338. </div>
  339. <div class="modal-body">
  340. <form action="#" method="post" id="formaModal"><!-- validaEvento() -->
  341. <input type="hidden" name="id_db" id="id_db">
  342. <input type="hidden" name="insignia_id" id="insignia_id">
  343. <div class="form-box form-box-info">
  344. <div class="form-group row">
  345. <label for="titulo" class="col-4 col-form-label">Título *</label>
  346. <div class="col-8">
  347. <input type="text" class="form-control" name="titulo" id="titulo" required="required" maxlength="200">
  348. </div>
  349. </div>
  350. <div class="form-group row">
  351. <label for="desc" class="col-4 col-form-label">Descripción *</label>
  352. <div class="col-8">
  353. <textarea class="richtext" id="desc" name="desc" rows="5"></textarea>
  354. <small id="descHelp" class="form-text text-danger d-none">
  355. Debes escribir una descripción.
  356. </small>
  357. </div>
  358. </div>
  359. <div class="form-group row">
  360. <label for="categoria" class="col-4 col-form-label">Categoría *</label>
  361. <div class="col-6">
  362. <div class="datalist datalist-select mb-1 w-100" id="dlCategoria">
  363. <div class="datalist-input">1</div>
  364. <span class="ing-buscar icono"></span>
  365. <ul style="display:none">
  366. <?php foreach($cat_rs as $cat) {?>
  367. <li data-id="<?php echo $cat["InsigniaTipo_id"];?>" data-color="<?php echo $cat["InsigniaTipo_color"];?>"><?php echo $cat["InsigniaTipo_desc"];?></li>
  368. <?php }?>
  369. </ul>
  370. <input type="hidden" id="categoria" name="categoria" value="0">
  371. </div>
  372. </div>
  373. <div class="col-2" id="categoria_color">
  374. <span class="ing-2x ico-border"><?php echo $ICO["circulo"];?></span>
  375. </div>
  376. </div>
  377. <div class="form-group row">
  378. <label for="puesto" class="col-4 col-form-label">Emitida por *</label>
  379. <div class="col-8">
  380. <div class="datalist datalist-select mb-1 w-100" id="dlPuesto">
  381. <div class="datalist-input">1</div>
  382. <span class="ing-buscar icono"></span>
  383. <ul style="display:none">
  384. <?php foreach($puestos_rs as $puesto){?>
  385. <li data-id="<?php echo $puesto["Puesto_id"];?>"><?php echo $puesto["Puesto_desc"];?></li>
  386. <?php } ?>
  387. </ul>
  388. <input type="hidden" id="puesto" name="puesto" value="0">
  389. </div>
  390. </div>
  391. </div>
  392. </div>
  393. <div class="row bg-info my-3 px-3">
  394. <div class="col-12">
  395. <h5 class="alert-heading py-2">
  396. <a class="d-block collapsed" data-toggle="collapse" href="#avanzadoBox" role="button" aria-expanded="false" aria-controls="collapseExample">
  397. <i class="ing-caret ing-fw float-right"></i> <strong class="ml-4">Atributos de egreso</strong></a>
  398. </h5>
  399. </div>
  400. <div class="col-12 collapse" id="avanzadoBox">
  401. <div class="form-box">
  402. <div class="row form-group atributo-row">
  403. <div class="col-12">
  404. <div class="row mb-2">
  405. <div class="col">
  406. <table class="table table-sm table-borderless">
  407. <thead class="table-dark">
  408. <tr>
  409. <th style="width:60%">Atributo</th>
  410. <th style="width:30%">Nivel</th>
  411. <th>&nbsp;</th>
  412. </tr>
  413. </thead>
  414. <tbody id="atributo-list">
  415. <tr>
  416. <td>
  417. <select name="atributo[]" class="form-control form-control-sm atributo_select">
  418. <option value="0">- Sin atributo -</option>
  419. <?php foreach($atributos_rs as $atributo){?>
  420. <option value="<?php echo $atributo["AtributoEgresoGeneral_id"];?>"><?php echo $atributo["AtributoEgresoGeneral_num"]."- ".$atributo["AtributoEgresoGeneral_desc"];?></option>
  421. <?php } ?>
  422. </select>
  423. </td>
  424. <td>
  425. <select name="nivel[]" class="form-control form-control-sm nivel_select">
  426. <?php foreach($nivel_rs as $nivel){?>
  427. <option value="<?php echo $nivel["AtributoNivel_id"];?>"><?php echo $nivel["AtributoNivel_desc"];?></option>
  428. <?php } ?>
  429. </select>
  430. </td>
  431. <td class="text-center"><button type="button" class="btn btn-sm btn-outline-danger borra-atributo" title="Quitar atributo"><?php echo $ICO["borrar2"];?></button></td>
  432. </tr>
  433. </tbody>
  434. </table>
  435. </div>
  436. </div>
  437. <div class="row mb-2 justify-content-center">
  438. <div class="col-6">
  439. <button type="button" class="btn btn-outline-primary btn-block" id="agrega-atributo"><?php echo $ICO["mas"];?> Agregar atributo</button>
  440. </div>
  441. </div>
  442. </div>
  443. </div>
  444. </div>
  445. </div>
  446. </div>
  447. <!-- Programación -->
  448. <div class="form-box" id="programacion">
  449. <h5 class="mt-3 ml-5 font-weight-bold">Programación</h5>
  450. <div class="row form-group">
  451. <label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial *</label>
  452. <div class="col-8">
  453. <input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly">
  454. </div>
  455. </div>
  456. <div class="row form-group">
  457. <label class="col-4 col-form-label" for="customSwitch1">Todo el día</label>
  458. <div class="col-8">
  459. <input type="checkbox" class="todo_dia" data-toggle="toggle" data-onstyle="primary" data-offstyle="info" data-on="Sí" data-off="No" id="todo_dia" name="todo_dia" value="1" data-width="50">
  460. </div>
  461. </div>
  462. <div class="form-group row" id="divHoras">
  463. <label for="horaIni" class="col-4 col-form-label">Hora *</label>
  464. <div class="col-1 my-auto text-center">de</div>
  465. <div class="col-3">
  466. <input class="form-control clock" id="hora_inicial" type="text" maxlength="5" data-autoclose="true" placeholder="hh:mm" maxlength="5" required="required" readonly="readonly" value="">
  467. </div>
  468. <div class="col-1 my-auto text-center">a</div>
  469. <div class="col-3 ">
  470. <input class="form-control clock" id="hora_final" type="text" maxlength="5" data-autoclose="true" placeholder="hh:mm" maxlength="5" required="required" readonly="readonly" value="">
  471. </div>
  472. </div>
  473. <div class="form-group row">
  474. <label for="repetir" class="col-4 col-form-label">Se repite *</label>
  475. <div class="col-4">
  476. <div class="datalist datalist-select mb-1 w-100" id="dlRepetir">
  477. <div class="datalist-input">1</div>
  478. <span class="ing-buscar icono"></span>
  479. <ul style="display:none">
  480. <li data-id="0">Fecha única</li>
  481. <?php foreach($rep_rs as $rep) {?>
  482. <li data-id="<?php echo $rep["CalendarioRepeticion_id"];?>"><?php echo $rep["CalendarioRepeticion_desc"];?></li>
  483. <?php }?>
  484. </ul>
  485. <input type="hidden" id="repetir" name="repetir" value="0">
  486. </div>
  487. </div>
  488. </div>
  489. <div class="row form-group rep-semana rep-mes" id="dias_block">
  490. <label for="dias" class="col-4 col-form-label">Los días *</label>
  491. <div class="col-8 px-5">
  492. <div class="d-flex justify-content-between ">
  493. <?php for($i=0; $i<7; $i++){
  494. $d = substr(diaNombre($i),0,1);
  495. ?>
  496. <input type="checkbox" name="dias[]" class="dias d-none" id="dia_<?php echo $i;?>" value="<?php echo $i;?>"/>
  497. <label class="btn-circle font-weight-bolder bg-info text-dark align-middle mb-0 mayusculas" for="dia_<?php echo $i;?>"><?php echo $d;?></label>
  498. <?php } ?>
  499. </div>
  500. <div class="text-danger text-80 d-none" id="dias_error">
  501. * Debes elegir al menos un día de la semana
  502. </div>
  503. </div>
  504. </div>
  505. <div class="form-group row rep-mes">
  506. <label for="de_semana" class="col-4 col-form-label">De la semana *</label>
  507. <div class="col-8">
  508. <div class="datalist datalist-select mb-1 w-100">
  509. <div class="datalist-input">1ra del mes</div>
  510. <span class="ing-buscar icono"></span>
  511. <ul style="display:none">
  512. <li data-id="1">1ra del mes</li>
  513. <li data-id="2">2da del mes</li>
  514. <li data-id="3">3ra del mes</li>
  515. <li data-id="4">4ta del mes</li>
  516. <li data-id="-1">última del mes</li>
  517. </ul>
  518. <input type="hidden" id="de_semana" name="de_semana" value="1">
  519. </div>
  520. </div>
  521. </div>
  522. <div class="row form-group rep-diario rep-semana rep-mes">
  523. <label for="fecha_final" class="col-4 col-form-label">Hasta la fecha *</label>
  524. <div class="col-8">
  525. <input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" readonly="readonly">
  526. <div class="invalid-feedback">
  527. El rango de fechas es inválido.
  528. </div>
  529. </div>
  530. </div>
  531. </div>
  532. <!-- solo para editar evento -->
  533. <div class="form-box" id="fecha_cambio">
  534. <h5 class="my-3 ml-5 font-weight-bold">Fecha de esta repetición</h5>
  535. <input type="hidden" id="todo_dia_nueva" value="">
  536. <input type="hidden" id="fecha_original" value="">
  537. <div class="form-group row align-items-center">
  538. <label class="col-4 col-form-label">Cambiar fecha</label>
  539. <div class="col-4 col-md-3">
  540. <div class="form-check form-check-inline">
  541. <input class="form-check-input radio-lg" type="radio" id="cambio_fecha_no" name="cambio_fecha" value="0" checked="true">
  542. <label for="cambio_fecha_no" class="col-form-label">No</label>
  543. </div>
  544. </div>
  545. <div class="col-4 col-md-3">
  546. <div class="form-check form-check-inline">
  547. <input class="form-check-input radio-lg" type="radio" id="cambio_fecha_si" name="cambio_fecha" value="1">
  548. <label for="cambio_fecha_si" class="col-form-label">Sí</label>
  549. </div>
  550. </div>
  551. </div>
  552. <div class="row form-group">
  553. <label for="fecha_nueva" class="col-4 col-form-label">Fecha nueva *</label>
  554. <div class="col-8">
  555. <input id="fecha_nueva" name="fecha_nueva" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" readonly="readonly">
  556. </div>
  557. </div>
  558. <div class="form-group row" id="divHoras_nueva">
  559. <label for="hora_inicial_nueva" class="col-4 col-form-label">Hora *</label>
  560. <div class="col-1 my-auto text-center">de</div>
  561. <div class="col-3">
  562. <input class="form-control clock" id="hora_inicial_nueva" type="text" maxlength="5" data-autoclose="true" placeholder="hh:mm" maxlength="5" readonly="readonly" value="">
  563. </div>
  564. <div class="col-1 my-auto text-center">a</div>
  565. <div class="col-3 ">
  566. <input class="form-control clock" id="hora_final_nueva" type="text" maxlength="5" data-autoclose="true" placeholder="hh:mm" maxlength="5" readonly="readonly" value="">
  567. </div>
  568. </div>
  569. </div>
  570. <div class="form-box" id="inscripcion">
  571. <h5 class="my-3 ml-5 font-weight-bold">Inscripciones y evidencias</h5>
  572. <div class="row form-group">
  573. <label for="tiene_inscripciones" class="col-4 col-form-label">¿Tiene inscripciones?</label>
  574. <div class="col-8">
  575. <input type="checkbox" class="todo_dia" data-toggle="toggle" data-onstyle="primary" data-offstyle="info" data-on="Sí" data-off="No" id="tiene_inscripciones" name="tiene_inscripciones" value="1" data-width="50">
  576. </div>
  577. </div>
  578. <div class="row form-group divInscripcion" style="display:none">
  579. <label for="fecha_insc_ini" class="col-4 col-form-label">Inicio de inscripciones *</label>
  580. <div class="col-4">
  581. <input id="fecha_insc_ini" name="fecha_insc_ini" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" readonly="readonly">
  582. </div>
  583. </div>
  584. <div class="row form-group divInscripcion" style="display:none">
  585. <label for="fecha_insc_ini" class="col-4 col-form-label">Fin de inscripciones *</label>
  586. <div class="col-4">
  587. <input id="fecha_insc_fin" name="fecha_insc_fin" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" readonly="readonly">
  588. </div>
  589. <div class="col-4">
  590. <input class="form-control clock" name="hora_final_insc" id="hora_final_insc" type="text" maxlength="5" data-autoclose="true" placeholder="hh:mm" maxlength="5" readonly="readonly" value="" >
  591. </div>
  592. </div>
  593. <div class="row form-group divInscripcion" style="display:none">
  594. <label for="tiene_evidencias" class="col-4 col-form-label">¿Requiere evidencias?</label>
  595. <div class="col-8">
  596. <input type="checkbox" class="todo_dia" data-toggle="toggle" data-onstyle="primary" data-offstyle="info" data-on="Sí" data-off="No" id="tiene_evidencias" name="tiene_evidencias" value="1" data-width="50">
  597. </div>
  598. </div>
  599. <div class="row form-group divEvidencias" id="divEvidencias" style="display:none">
  600. <label for="evidencias" class="col-4 col-form-label">Descripción de las
  601. evidencias *</label>
  602. <div class="col-8">
  603. <textarea name="evidencias" id="evidencias" class="form-control" rows="4"></textarea>
  604. </div>
  605. </div>
  606. </div>
  607. <div class="form-group row">
  608. <div class="col-12 text-center">
  609. <button type="button" class="btn btn-outline-primary" id="submitBtn" data-nuevo="1"><?php echo $ICO["aceptar"];?> Guardar</button>
  610. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cancelar</button>
  611. </div>
  612. </div>
  613. </form>
  614. </div>
  615. </div>
  616. </div>
  617. </div>
  618. <div class="modal fade" id="modal_confirm" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  619. <div class="modal-dialog modal-dialog-centered" role="document">
  620. <div class="modal-content">
  621. <div class="modal-body">
  622. <div class="row">
  623. <div class="col">
  624. <p><b>¿Qué deseas borrar?</b></p>
  625. <p>Una vez borrado el evento no se puede deshacer.</p>
  626. </div>
  627. </div>
  628. </div>
  629. <div class="modal-footer">
  630. <input type="hidden" id="id_borrar" value="">
  631. <div class="btn-group" role="group" aria-label="Borrar">
  632. <button type="button" class="btn btn-outline-primary bloque-borra" data-todos="false"><?php echo $ICO["borrar"];?> Este evento</button>
  633. <button type="button" class="btn btn-outline-primary bloque-borra" data-todos="true" id="btn-borra-todos"><?php echo $ICO["borrar2"];?> Toda la serie</button>
  634. </div>
  635. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  636. </div>
  637. </div>
  638. </div>
  639. </div>
  640. <div class="modal fade" id="modal_categoria" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  641. <div class="modal-dialog modal-dialog-centered" role="document">
  642. <div class="modal-content">
  643. <div class="modal-header">
  644. <h4 class="col-12 modal-title text-center"><span id="modalLabel">Categoría de evento</span>
  645. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  646. <span aria-hidden="true">&times;</span>
  647. </button>
  648. </h4>
  649. </div>
  650. <div class="modal-body">
  651. <form action="#" method="post">
  652. <input type="hidden" name="cat_id" id="cat_id">
  653. <div class="form-box form-box-info">
  654. <div class="form-group row">
  655. <label for="cat_desc" class="col-4 col-form-label">Nombre *</label>
  656. <div class="col-8">
  657. <input type="text" class="form-control" name="cat_desc" id="cat_desc" required="required" maxlength="50">
  658. </div>
  659. </div>
  660. <div class="form-group row">
  661. <label for="cat_col" class="col-4 col-form-label">Color *</label>
  662. <div class="col-8">
  663. <input id="cat_col" name="cat_col" type="text" class="form-control" required="required" maxlength="7" value="#ffffff">
  664. </div>
  665. </div>
  666. </div>
  667. <div class="form-group row">
  668. <div class="col-12 text-center">
  669. <button type="button" class="btn btn-outline-primary" id="submitBtn_cat" data-nuevo="1"><?php echo $ICO["aceptar"];?> Guardar</button>
  670. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cancelar</button>
  671. </div>
  672. </div>
  673. </form>
  674. </div>
  675. </div>
  676. </div>
  677. </div>
  678. <?php } //fin puede editar ?>
  679. <!-- Modal Ver-->
  680. <div class="modal fade" id="modal_ver" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  681. <div class="modal-dialog modal-dialog-centered" role="document">
  682. <div class="modal-content">
  683. <div class="modal-header">
  684. <h4 class="col-12 modal-title text-center"><span class="titulo">Datos del Evento</span>
  685. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  686. <span aria-hidden="true">&times;</span>
  687. </button>
  688. </h4>
  689. </div>
  690. <div class="modal-body ">
  691. <div class="row mb-2">
  692. <div class="col-12 text-center">
  693. <p><span class="fecha">13</span> de <?php echo mesNombre($mes_actual)." de ".$anho_actual;?><br>
  694. <span class="hora">14:00 a 18:00</span></p>
  695. </div>
  696. </div>
  697. <p class="desc">Aquí va la descripción del evento</p>
  698. <div id="ver_evidencia" class="my-3">
  699. <p class="mb-0"><b>Evidencias requeridas</b></p>
  700. <div class="evidencia">Aquí van las evidencias</div>
  701. </div>
  702. <p><span class="categoria_color ico-border"><?php echo $ICO["circulo"];?></span> <span class="categoria">Categoria X</span></p>
  703. <ul class="list-inline" id="ver_inscripciones">
  704. <li class="list-inline-item"><b>Inscripciones: </b></li>
  705. <li class="list-inline-item insc_ini">Fecha Ini</li>
  706. <li class="list-inline-item">a</li>
  707. <li class="list-inline-item insc_fin">Fecha Fin</li>
  708. </ul>
  709. </div>
  710. <div class="modal-footer bg-primary text-white py-0">
  711. <div class="container-fluid">
  712. <div class="row">
  713. <div class="col-12 text-right"><p class="my-0">Repeticiones: <span class="fechas_total"></span></p></div>
  714. </div>
  715. </div>
  716. </div>
  717. </div>
  718. </div>
  719. </div>
  720. <div class="modal fade" id="modal_exportar" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  721. <div class="modal-dialog modal-dialog-centered" role="document">
  722. <div class="modal-content">
  723. <div class="modal-header">
  724. <h4 class="col-12 modal-title text-center"><span class="titulo"><?php echo $_SESSION["periodo_desc"];?></span>
  725. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  726. <span aria-hidden="true">&times;</span>
  727. </button>
  728. </h4>
  729. </div>
  730. <div class="modal-body">
  731. <div class="row">
  732. <div class="col-12" id="suscripcion_block">
  733. <p class="mt-3 mb-1"><b>URL de suscripción</b></p>
  734. <p>Copia el siguiente URL para suscribirte al calendario y obtener actualizaciones automáticas.</p>
  735. <div class="input-group">
  736. <div id="copy-box"></div>
  737. <input type="text" id="suscripcion_url" class="form-control texto-copiar" value="" readonly="true" data-periodo="<?php echo $_SESSION["periodo_id"]; ?>">
  738. <div class="input-group-append">
  739. <button class="btn btn-outline-primary btn-copiar" type="button" title="Copiar"><span class="ing-copiar"></span></button>
  740. </div>
  741. </div>
  742. </div>
  743. </div>
  744. </div>
  745. <div class="modal-footer">
  746. <form id="forma_exportar" method="post" action="./export/ical_calendario.php" target="_blank">
  747. <input type="hidden" id="perfiles_exportar" name="perfiles" value="">
  748. </form>
  749. <button type="button" class="btn btn-outline-primary btn-pdf"><span class="ing-imprimir ing-fw"></span> Descargar .pdf</button>
  750. <button type="button" class="btn btn-outline-primary btn-exportar"><?php echo $ICO["descargar"];?> Descargar .ical</button>
  751. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  752. </div>
  753. </div>
  754. </div>
  755. </div>
  756. </div>
  757. <script src="../js/jquery.min.js"></script>
  758. <?php if($objSesion->puedeEditar() ){ ?>
  759. <script src="../js/jquery-ui.js"></script>
  760. <script src="../js/datepicker-es.js"></script>
  761. <script src="../js/clockpicker.js"></script>
  762. <script src="../js/toggle.js"></script>
  763. <script src="../js/colpick.js"></script>
  764. <script src="../js/tinymce/tinymce.min.js"></script>
  765. <?php } ?>
  766. <script src="../js/bootstrap/popper.min.js"></script>
  767. <script src="../js/bootstrap/bootstrap.min.js"></script>
  768. <script src="../js/fechas.js"></script>
  769. <script src="./js/calendario.js?rand=<?php echo rand();?>"></script>
  770. <script src="../js/sidebarmenu.js"></script>
  771. <script src="../js/datalist.js"></script>
  772. <script>
  773. setDatalist("#periodo", <?php echo $_SESSION["periodo_id"]; ?>);
  774. $(document).on('click', '#dlPeriodo ul li' ,function(){
  775. $("#formaPeriodo").submit();
  776. });
  777. tinymce.init({
  778. selector: '.richtext',
  779. statusbar: false,
  780. plugins:["lists link "],
  781. toolbar: 'undo redo | bold italic underline | bullist numlist | link',
  782. branding: false,
  783. menubar: false,
  784. valid_elements : 'strong/b,em/i,ul,li,ol,a',
  785. formats: {
  786. // Changes the default format for the underline button to produce a span with a class and not merge that underline into parent spans
  787. underline: { inline: 'span', styles: { 'text-decoration': 'underline' }, exact: true },
  788. strikethrough: { inline: 'span', styles: { 'text-decoration': 'line-through' }, exact: true }
  789. }
  790. });
  791. $(document).on('focusin', function(e) {
  792. if ($(event.target).closest(".mce-window").length) {
  793. e.stopImmediatePropagation();
  794. }
  795. });
  796. </script>
  797. <?php if($periodo_rs["Periodo_id"] !=""){?>
  798. <script>
  799. var _periodo_fecha_inicial = "<?php echo fechaSlash($fecha_min); ?>";
  800. var _periodo_fecha_final = "<?php echo fechaSlash($fecha_max); ?>";
  801. var datepickerOptions = { dateFormat: "dd/mm/yy", minDate:_periodo_fecha_inicial, maxDate:_periodo_fecha_final, changeMonth: true, changeYear: true, defaultDate: '<?php echo "01/".($mes_actual<10?"0".$mes_actual:$mes_actual)."/".$anho_actual; ?>' };
  802. var clasesObj = [];
  803. // var _reloadTime = 45; //en segundos, tiempo para refrescar horarios
  804. var _w = 180, _h = 150;//tamaño de bloques
  805. var _block_h = 34; //espaciado por cada elemento que colisiona
  806. var _reloadOnClose = false;
  807. var id_obj = 0; //id de objeto actual
  808. var _perfiles;
  809. <?php if($objSesion->puedeEditar() ){ ?>
  810. _perfiles = [1,2,3,4];
  811. <?php } else{ ?>
  812. _perfiles = [<?php echo implode(",", $perfilUsr_arr)?>];
  813. <?php } ?>
  814. </script>
  815. <?php if($objSesion->puedeEditar() ){ ?>
  816. <script src="./js/calendario_edicion.js?rand=<?php echo rand();?>"></script>
  817. <?php }else{//no editar ?>
  818. <script src="./js/calendario_read.js"></script>
  819. <?php
  820. }//fin on editar
  821. ?>
  822. <?php } ?>
  823. </body>
  824. </html>