avisos_editar.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. <?php
  2. require_once 'class/c_login.php';
  3. require_once 'include/bd_pdo.php';
  4. $user = Login::get_user();
  5. $user->access('Avisos');
  6. if ($user->acceso == null) {
  7. header('Location: main.php?error=1');
  8. } else {
  9. $user->print_to_log('Avisos Editar');
  10. }
  11. $fac = $user->facultad['facultad_id'];
  12. if ($user->admin) {
  13. $fac = null;
  14. }
  15. $fs_aviso = query('SELECT * FROM fs_aviso(:aviso_id, null, :facultad_id, null, 0, null)', [':aviso_id' => $_GET['id'], ':facultad_id' => $fac], true);
  16. $fs_carreras = query('SELECT * FROM fs_carreras(:fac, null, null)', [':fac' => $fs_aviso['facultad_id']], false);
  17. $fs_usr = query('SELECT * FROM fs_profesor_aviso(:aviso_id)', [':aviso_id' => $_GET['id']], false);
  18. $today = date('Y-m-d');
  19. $edit = $today < $fs_aviso['aviso_fecha_inicial'];
  20. ?>
  21. <!DOCTYPE html>
  22. <html lang="en">
  23. <head>
  24. <meta charset="UTF-8">
  25. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  26. <title>Avisos Crear</title>
  27. <link rel="stylesheet" href="css/jquery-ui.css">
  28. <link rel="stylesheet" href="css/calendar.css">
  29. <link rel="stylesheet" href="css/richtext.css" type="text/css">
  30. <link rel="stylesheet" href="css/fa_all.css" type="text/css">
  31. <?php
  32. include 'import/html_css_files.php';
  33. ?>
  34. </head>
  35. <body>
  36. <?php
  37. include "import/html_header.php";
  38. html_header(
  39. "EDITAR AVISO",
  40. "Gestión de Checador "
  41. );
  42. $user->access('Avisos');
  43. ?>
  44. <main class="content marco">
  45. <div class="row">
  46. <div class="col-12">
  47. <form action="./action/action_avisos_update.php" method="post" id="formaModal" onsubmit="return validaCampos()">
  48. <input type="hidden" name="aviso_id" id="aviso_id" value="<?= $fs_aviso['aviso_id'] ?>">
  49. <div class="form-box">
  50. <div class="form-group row">
  51. <label for="fecha_inicial" class="col-4 col-form-label">Fecha inicial</label>
  52. <div class="col-8 col-sm-4">
  53. <?php if ($edit) { ?>
  54. <input id="fecha_inicial" name="fecha_inicial" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
  55. $dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
  56. echo $dia_inicial; ?>">
  57. <div class="invalid-feedback">No es una fecha valida</div>
  58. <?php } else { ?>
  59. <div>
  60. <?php $day = explode("-", $fs_aviso['aviso_fecha_inicial']);
  61. $dia_inicial = $day['2'] . '/' . $day['1'] . '/' . $day[0];
  62. echo $dia_inicial; ?>
  63. </div>
  64. <?php } ?>
  65. </div>
  66. </div>
  67. <div class="form-group row">
  68. <label for="fecha_final" class="col-4 col-form-label">Fecha Final *</label>
  69. <div class="col-8 col-sm-4">
  70. <input id="fecha_final" name="fecha_final" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php $day = explode("-", $fs_aviso['aviso_fecha_final']);
  71. $dia_final = $day['2'] . '/' . $day['1'] . '/' . $day[0];
  72. echo $dia_final; ?>">
  73. <div class="invalid-feedback">No es una fecha valida</div>
  74. </div>
  75. </div>
  76. <div class="form-group row">
  77. <label for="texto" class="col-4 col-form-label">Aviso *</label>
  78. <div class="col-8">
  79. <?php if ($edit == true) { ?>
  80. <textarea name="texto" id="texto" class="richtext" rows="10" readonly="readonly"><?= $fs_aviso['aviso_texto'] ?></textarea>
  81. <?php } else { ?>
  82. <p><?= $fs_aviso['aviso_texto'] ?></p>
  83. <?php } ?>
  84. </div>
  85. </div>
  86. <?php if ($edit) { ?>
  87. <div class="form-group row tipo_aviso">
  88. <label class="col-4 col-form-label">Enviar aviso:</label>
  89. <div class="col-4 pt-2">
  90. <div class="custom-control custom-switch">
  91. <input type="checkbox" class="custom-control-input tipo-switch" name="bloque_tipo" id="bloque_tipo" value="1" data-box="profesorBox" data-select="tipo_box">
  92. <label class="custom-control-label" for="bloque_tipo">Por carrera</label>
  93. </div>
  94. </div>
  95. <div class="col-4 pt-2">
  96. <div class="custom-control custom-switch">
  97. <input type="checkbox" class="custom-control-input tipo-switch" name="bloque_usr" id="bloque_usr" value="1" data-box="administrativoBox" data-select="usuario_box">
  98. <label class="custom-control-label" for="bloque_usr">Por nombre</label>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="invalid-feedback offset-4">No hay profesores para mandar el aviso</div>
  103. <div class="collapse" id="profesorBox">
  104. <h3>Carreras</h3>
  105. <p>Utiliza el botón para asignar las carreras que recibirán el aviso.</p>
  106. <div class="form-group row">
  107. <div class="col-10">
  108. <select name="tipo[]" id="tipo_box" class="form-control" multiple="multiple" size="5">
  109. </select>
  110. </div>
  111. <div class="col-2">
  112. <p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_carrera"><span class="ing-mas ing-fw"></span> Asignar</button></p>
  113. <p><button type="button" class="btn btn-outline-danger btn-quita-tipo"><span class="ing-menos ing-fw"></span> Quitar</button></p>
  114. </div>
  115. </div>
  116. </div>
  117. <div class="collapse" id="administrativoBox">
  118. <h3>Nombre de profesores</h3>
  119. <p>Utiliza el botón para asignar los profesores que recibirán el aviso.</p>
  120. <div class="form-group row">
  121. <div class="col-10">
  122. <select name="usuario[]" id="usuario_box" class="form-control" multiple="multiple" size="5">
  123. <?php
  124. foreach ($fs_usr as $usuario) {
  125. echo "<option value='" . $usuario['profesor_id'] . "'>" . $usuario['profesor_nombre'] . "</option>";
  126. }
  127. ?>
  128. </select>
  129. </div>
  130. <div class="col-2">
  131. <p><button type="button" class="btn btn-outline-primary" data-toggle="modal" data-target="#modal_usr"><span class="ing-mas ing-fw"></span> Asignar</button></p>
  132. <p><button type="button" class="btn btn-outline-danger btn-quita-usr"><span class="ing-menos ing-fw"></span> Quitar</button></p>
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. <?php } else {
  138. $num_prof = round(count($fs_usr) / 2);
  139. ?>
  140. <h3>Profesores que recibirán el aviso</h3>
  141. <div class="row" style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
  142. <div class="col-5">
  143. <div>
  144. <ul>
  145. <?php for ($i = 0; $i < $num_prof; $i++) {
  146. echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
  147. } ?>
  148. </ul>
  149. </div>
  150. </div>
  151. <div class="col-5">
  152. <div>
  153. <ul>
  154. <?php for ($i = $i; $i < count($fs_usr); $i++) {
  155. echo "<li>" . $fs_usr[$i]['profesor_nombre'] . "</li>";
  156. } ?>
  157. </ul>
  158. </div>
  159. </div>
  160. </div>
  161. <?php } ?>
  162. <div class="form-group row mt-2">
  163. <div class="col-12 text-center">
  164. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><span class="ing-aceptar"></span> Guardar</button>
  165. <a href="avisos.php" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Cancelar</a>
  166. </div>
  167. </div>
  168. </form>
  169. </div>
  170. </div>
  171. </main>
  172. <!-- Footer -->
  173. <?php
  174. include "import/html_footer.php";
  175. ?>
  176. <!-- Modal -->
  177. <div class="modal fade" id="modal_carrera" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
  178. <div class="modal-dialog modal-dialog-centered" role="document">
  179. <div class="modal-content">
  180. <div class="modal-header">
  181. <h4 class="col-12 modal-title text-center">Carreras
  182. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  183. <span aria-hidden="true">&times;</span>
  184. </button>
  185. </h4>
  186. </div>
  187. <div class="modal-body">
  188. <table class="table table-sm table-striped table-white">
  189. <thead class="thead-dark">
  190. <tr>
  191. <th>Carrera</th>
  192. <th>Asignar</th>
  193. </tr>
  194. </thead>
  195. <tbody>
  196. <?php $count = 1;
  197. foreach ($fs_carreras as $carrera) { ?>
  198. <tr class="tipo-row" id="arow_<?= $carrera['carrera_id'] ?>">
  199. <td><?= $carrera['carrera_nombre'] ?></td>
  200. <td class="text-center"><button type="button" class="btn btn-outline-primary btn-sm btn-agrega-tipo" data-id="<?= $carrera['carrera_id'] ?>" data-text="<?= $carrera['carrera_nombre'] ?>"><span class="ing-mas"></span></button></td>
  201. </tr>
  202. <?php $count++;
  203. } ?>
  204. </tbody>
  205. </table>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. <div class="modal fade" id="modal_usr" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true" data-backdrop="static" data-keyboard="false">
  211. <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
  212. <div class="modal-content">
  213. <div class="modal-header">
  214. <h4 class="col-12 modal-title text-center">Busca Usuarios
  215. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  216. <span aria-hidden="true">&times;</span>
  217. </button>
  218. </h4>
  219. </div>
  220. <div class="modal-body">
  221. <form id="forma_buscar-usr" onsubmit="return false">
  222. <input type="hidden" id="facultad" name="facultad" value="<?= $fac ?>">
  223. <div class="form-box">
  224. <div class="form-group row">
  225. <label for="filter_desc" class="col-4 col-form-label">Nombre</label>
  226. <div class="col-8">
  227. <input id="filter_desc" name="desc" type="text" class="form-control">
  228. </div>
  229. </div>
  230. <div class="form-group row">
  231. <label for="filter_clave" class="col-4 col-form-label">Clave ULSA</label>
  232. <div class="col-8">
  233. <input id="filter_clave" name="clave" type="text" class="form-control">
  234. </div>
  235. </div>
  236. </div>
  237. <div class="for-group row">
  238. <div class="col-12 text-center">
  239. <button type="submit" class="btn btn-outline-primary" id="btn-busca-usr"><span class="ing-buscar"></span> Buscar</button>
  240. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><span class="ing-cancelar"></span> Cerrar</button>
  241. </div>
  242. </div>
  243. </form>
  244. <div style="max-height:400px; overflow-y:auto; overflow-x:hidden;">
  245. <table class="table table-sm table-striped table-white mt-3">
  246. <thead class="thead-dark">
  247. <tr>
  248. <th>Usuario</th>
  249. <th style="width: 20%;">Asignar</th>
  250. </tr>
  251. </thead>
  252. <tbody id="table-result-usr">
  253. <tr class="usr-row">
  254. <td class="usr-nombre"></td>
  255. <td class="usr-agrega text-center"><button type="button" class="btn btn-outline-primary btn-sm invisible btn-agrega-usr"><span class="ing-mas"></span></button></td>
  256. </tr>
  257. </tbody>
  258. </table>
  259. </div>
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. <script src="js/jquery.min.js"></script>
  265. <script src="js/jquery-ui.js"></script>
  266. <script src="js/bootstrap/bootstrap.min.js"></script>
  267. <script src="js/datalist.js"></script>
  268. <script src="js/datepicker-es.js"></script>
  269. <script src="./js/richtext.js"></script>
  270. <?php
  271. require_once 'js/messages.php';
  272. ?>
  273. <script>
  274. var today = new Date();
  275. $(".date-picker").datepicker($.datepicker.regional["es"]);
  276. $(".date-picker").datepicker({
  277. dateFormat: "dd/mm/yyyy",
  278. changeMonth: true,
  279. });
  280. $(document).ready(function() {
  281. $('.richtext').richText();
  282. $("#fecha_final").datepicker("option", "minDate", today);
  283. $("#fecha_inicial").datepicker("option", "minDate", today);
  284. <?php
  285. if (count($fs_usr) > 0) { ?>
  286. $('#bloque_usr').prop("checked", true);
  287. $('#administrativoBox').collapse('show');
  288. <?php } if ($edit == false) { ?>
  289. $('.richText-editor').removeAttr("contentEditable");
  290. <?php }
  291. ?>
  292. });
  293. $(document).on("change", ".tipo-switch", function(event) {
  294. if ($(this).data("box") !== undefined) {
  295. if ($(this).prop('checked')) {
  296. $('#' + $(this).data("box")).collapse('show');
  297. } else {
  298. $('#' + $(this).data("box")).collapse('hide');
  299. }
  300. }
  301. $('#bloque_tipo').removeClass("is-invalid");
  302. $('#bloque_usr').removeClass("is-invalid");
  303. });
  304. $(document).on("click", ".btn-agrega-tipo", function(event) {
  305. var id = $(this).data("id");
  306. var text = $(this).data("text");
  307. if ($('#tipo_box option[value="' + id + '"]').length == 0) {
  308. $("#tipo_box").append($("<option></option>").attr("value", id).text(text));
  309. }
  310. $(this).parents("tr").addClass("d-none");
  311. });
  312. $(document).on("click", ".btn-quita-tipo", function(event) {
  313. var id = $("#tipo_box option:selected").val();
  314. $("#arow_" + id).removeClass("d-none");
  315. $("#tipo_box option:selected").remove();
  316. });
  317. $(document).on("click", ".modal-open", function(event) {
  318. $(".area-row").removeClass("d-none");
  319. $('#area > option').each(function() {
  320. $("#row_" + $(this).val()).addClass("d-none");
  321. });
  322. $('#modal').modal("show");
  323. });
  324. $(document).on('click', '#btn-busca-usr', function(event) {
  325. var nombre = $('#filter_desc').val();
  326. var clave = $('#filter_clave').val();
  327. var fac = $('#facultad').val();
  328. $('#table-result-usr').show();
  329. $.ajax({
  330. url: 'action/usuario_find.php',
  331. type: 'POST',
  332. dataType: 'json',
  333. data: {
  334. nombre: nombre,
  335. clave: clave,
  336. facultad: fac
  337. },
  338. success: function(result) {
  339. console.log(result.length);
  340. $("#table-result-usr").find(".usr-nombre").html("");
  341. $("#table-result-usr").find(".usr-agrega button").addClass("invisible");
  342. var rows = $("#table-result-usr > tr").length; //limpia tabla actual
  343. if (rows > result.length) {
  344. while (rows > result.length && rows > 1) {
  345. $("#table-result-usr .usr-row:last-child").remove();
  346. rows--;
  347. }
  348. } else {
  349. for (var i = rows; i < result.length; i++) {
  350. $("#table-result-usr .usr-row:first-child").clone(true).appendTo("#table-result-usr");
  351. }
  352. }
  353. if (result.length != 0) {
  354. $('#table-result-usr').children().each(function(index) {
  355. if (index < result.length) {
  356. $(this).find('.usr-nombre').html(result[index]['profesor_nombre']);
  357. $(this).find('.usr-agrega button').data("id", result[index]['profesor_id']);
  358. $(this).find('.usr-agrega button').data("text", result[index]['profesor_nombre']);
  359. $(this).show();
  360. $(this).find(".usr-agrega button").removeClass("invisible");
  361. }
  362. })
  363. }
  364. },
  365. error: function() {
  366. console.log('error');
  367. }
  368. });
  369. });
  370. $(document).on("click", ".btn-agrega-usr", function(event) {
  371. var id = $(this).data("id");
  372. var text = $(this).data("text");
  373. var rows = $("#table-result-usr > tr").length; //limpia tabla actual
  374. if ($('#usuario_box option[value="' + id + '"]').length == 0) {
  375. $("#usuario_box").append($("<option></option>").attr("value", id).text(text));
  376. }
  377. if (rows > 1)
  378. $(this).parents("tr").remove();
  379. else {
  380. $(this).parents("tr").hide();
  381. $("#filter_desc-usr").val("");
  382. }
  383. });
  384. $(document).on("click", ".btn-quita-usr", function(event) {
  385. $("#usuario_box option:selected").remove();
  386. });
  387. function validaCampos() {
  388. var error = false;
  389. var inicio = $('#fecha_inicial').val();
  390. var fin = $('#fecha_final').val();
  391. var aux = inicio.split('/');
  392. inicio = aux[2] + '-' + aux[1] + '-' + aux[0];
  393. aux = fin.split('/');
  394. fin = aux[2] + '-' + aux[1] + '-' + aux[0];
  395. if (fin < inicio) {
  396. $('#fecha_final').addClass('is-invalid');
  397. error = true;
  398. }
  399. if ($('select').find('option').length == 0) {
  400. error = true;
  401. $('.tipo_aviso').addClass('is-invalid');
  402. } else {
  403. $('.tipo_aviso').removeClass('is-invalid');
  404. }
  405. if (error) {
  406. return false;
  407. } else {
  408. $('#tipo_box option').prop('selected', true);
  409. $('#usuario_box option').prop('selected', true);
  410. $('#formaModal').prp('action', './action/action_avisos_update.php');
  411. }
  412. }
  413. </script>
  414. </body>
  415. </html>