avisos_editar.php 22 KB

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