usuarios.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  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();
  11. if(!$user->admin && $user->acceso == 'n'){
  12. header('Location: main.php?error=1');
  13. }else{
  14. $user->print_to_log('Usuarios');
  15. }
  16. $fac = $user->facultad['facultad_id'] ?? -1;
  17. if($user->admin){
  18. $fac=null;
  19. }
  20. #echo $fac;
  21. ?>
  22. <!DOCTYPE html>
  23. <html lang="en">
  24. <head>
  25. <meta charset="UTF-8">
  26. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  27. <title>Usuarios</title>
  28. <?php
  29. include 'import/html_css_files.php';
  30. ?>
  31. </head>
  32. <body>
  33. <?php
  34. include "import/html_header.php";
  35. html_header(
  36. "USUARIOS",
  37. "Gestión de Checador "
  38. );
  39. $user->access();
  40. if(isset($_POST["desc"])){
  41. $desc=$_POST["desc"];
  42. $filter_desc = trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  43. }else{
  44. $desc=NULL;
  45. }
  46. if(isset($_POST["clave"])){
  47. $clave=$_POST["clave"];
  48. $filter_clave = trim(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  49. }else{
  50. $clave=NULL;
  51. }
  52. if(isset($_POST["rol"])){
  53. if($_POST['rol']!="")
  54. {
  55. $rol=$_POST["rol"];
  56. $filter_rol = trim(filter_input(INPUT_POST, "rol", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  57. }else{
  58. $rol=NULL;
  59. }
  60. }else{
  61. $rol=NULL;
  62. }
  63. if(isset($_POST["mnombre"])){
  64. $desc=$_POST["mnombre"];
  65. $filter_desc = trim(filter_input(INPUT_POST, "mnombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  66. }
  67. if(isset($_POST["mclave"])){
  68. $clave=$_POST["mclave"];
  69. $filter_clave = trim(filter_input(INPUT_POST, "mclave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  70. }
  71. $fs_usuarios = query(
  72. "SELECT * FROM fs_usuarios(:facultad, :nombre, :clave, :rol)",
  73. array(
  74. ":facultad" => $fac,
  75. ":nombre" => $desc,
  76. ":clave" => $clave,
  77. ":rol" => $rol
  78. ),
  79. false
  80. );
  81. $fs_roles = query(
  82. "SELECT * FROM rol ORDER BY rol_titulo",
  83. null,
  84. false
  85. );
  86. if($user->admin){
  87. $fs_facultades = query(
  88. "SELECT * FROM facultad WHERE facultad_activa = true ORDER BY facultad_nombre",
  89. null,
  90. false
  91. );
  92. }
  93. ?>
  94. <main class="content marco">
  95. <?php if($user->acceso == 'w') {?>
  96. <div class="row">
  97. <div class="col-12 text-right">
  98. <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#modal" data-tipo="1"><span class="ing-mas ing-fw"></span> Crear Usuario</button>
  99. </div>
  100. </div>
  101. <?php }?>
  102. <!-- Filtro -->
  103. <div class="row">
  104. <div class="col-12">
  105. <form action="usuarios.php" method="post" onsubmit="return valida_filtro()">
  106. <div class="form-box">
  107. <div class="form-group row">
  108. <label for="filter_desc" class="col-4 col-form-label">Nombre</label>
  109. <div class="col-8 col-sm-4">
  110. <input id="filter_desc" name="desc" type="text" class="form-control" <?php if(isset($filter_desc)){echo 'value="'.$filter_desc.'"';} ?>>
  111. <div class="invalid-feedback" id="desc-error">
  112. Debe ser un numero
  113. </div>
  114. </div>
  115. </div>
  116. <div class="form-group row">
  117. <label for="filter_clave" class="col-4 col-form-label">Clave</label>
  118. <div class="col-8 col-sm-4">
  119. <input id="filter_clave" name="clave" type="text" class="form-control" <?php if(isset($filter_desc)){echo 'value="'.$filter_clave.'"';} ?>>
  120. <div class="invalid-feedback" id="clave-error">
  121. Debe ser un numero
  122. </div>
  123. </div>
  124. </div>
  125. <div class="form-group row">
  126. <label for="filter_rol" class="col-4 col-form-label">Rol</label>
  127. <div class="col-8 col-sm-4">
  128. <div class="datalist datalist-select mb-1 w-100">
  129. <div class="datalist-input">Mostrar todas</div>
  130. <span class="ing-buscar icono"></span>
  131. <ul style="display:none">
  132. <li data-id="" class="pl-4">Mostrar todas</li>
  133. <?php foreach($fs_roles as $rol){ ?>
  134. <li data-id="<?php echo $rol['rol_id']; ?>" class="pl-4 <?php if(isset($filter_rol) && $rol["rol_id"]==$filter_rol){ echo 'selected';} ?>"><?php echo $rol['rol_titulo']; ?></li>
  135. <?php }?>
  136. </ul>
  137. <input type="hidden" id="filter_rol" name="rol" value="">
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. <div class="form-group row">
  143. <div class="col-12 text-center">
  144. <button type="submit" class="btn btn-outline-primary">
  145. <span class="ing-buscar ing-fw"></span>
  146. Filtrar
  147. </button>
  148. <button type="button" class="btn btn-outline-danger btn-reset">
  149. <span class="ing-borrar ing-fw"></span>
  150. Limpiar
  151. </button>
  152. </div>
  153. </div>
  154. </form>
  155. </div>
  156. </div>
  157. <div id="message"></div>
  158. <!-- Tabla -->
  159. <div class="row">
  160. <div class="col-12 table-responsive">
  161. <table class="table table-sm table-striped table-white">
  162. <thead class="thead-dark">
  163. <tr>
  164. <th>Nombre</th>
  165. <th>Correo</th>
  166. <th>Clave</th>
  167. <th>Rol</th>
  168. <?php if($user->admin){ ?>
  169. <th>Facultad</th>
  170. <?php } ?>
  171. <?php if($user->acceso == 'w'){?>
  172. <th>Acciones</th>
  173. <?php }?>
  174. </tr>
  175. </thead>
  176. <tbody>
  177. <?php foreach($fs_usuarios as $usuario){
  178. ?>
  179. <tr data-id="<?= $usuario['id'] ?>" data-facultad="<?= $fac ?>" id="<?= $usuario['id'] ?>">
  180. <td class="text-primary"> <?= $usuario['username'] ?></td>
  181. <td class="text-primary"> <?= $usuario['email'] ?></td>
  182. <td class="text-center"> <?= $usuario['clave'] ?></td>
  183. <td class="text-primary"> <?= $usuario['titulo'] ?></td>
  184. <?php if($user->admin){ ?>
  185. <td class="text-primary"> <?= $usuario['facultad_nombre'] ?> </td>
  186. <?php } ?>
  187. <?php if($user->acceso == 'w'){?>
  188. <td class="text-center icono-acciones">
  189. <a href="#" data-toggle="modal" data-target="#modal" data-tipo="2" title="Editar"><span class="ing-editar ing-fw"></span></a>
  190. </td>
  191. <?php }?>
  192. </tr>
  193. <?php }?>
  194. </tbody>
  195. </table>
  196. </div>
  197. </div>
  198. </main>
  199. <!-- Footer -->
  200. <?php
  201. include "import/html_footer.php";
  202. ?>
  203. <!-- Modal -->
  204. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  205. <div class="modal-dialog modal-dialog-centered" role="document">
  206. <div class="modal-content">
  207. <div class="modal-header">
  208. <h4 class="col-12 modal-title text-center">
  209. <span id="modalLabel">
  210. Editar datos de Usuario
  211. </span>
  212. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  213. <span aria-hidden="true">&times;</span>
  214. </button>
  215. </h4>
  216. </div>
  217. <div class="modal-body">
  218. <form action="" method="post" id="formaModal" onsubmit="return valida_campos()">
  219. <input type="hidden" name="id" id="id">
  220. <input type="hidden" name="mfacultad" id="mfacultad">
  221. <div class="form-box">
  222. <div class="form-group row">
  223. <label for="clave" class="col-4 col-form-label">Clave *</label>
  224. <div class="col-8">
  225. <input type="text" id="mclave" name="mclave" class="form-control" maxlength="8">
  226. <div class="invalid-feedback" id="mclave-error">
  227. Debe ser un numero
  228. </div>
  229. </div>
  230. </div>
  231. <div class="form-group row">
  232. <label for="mnombre" class="col-4 col-form-label">Nombre *</label>
  233. <div class="col-8">
  234. <input type="text" id="mnombre" name="mnombre" class="form-control" maxlength="100">
  235. <div class="invalid-feedback" id="mnombre-error">
  236. Campo obligatorio
  237. </div>
  238. </div>
  239. </div>
  240. <div class="form-group row">
  241. <label for="correo" class="col-4 col-form-label">Correo</label>
  242. <div class="col-8">
  243. <input type="text" id="mcorreo" name="mcorreo" class="form-control" maxlength="100">
  244. <div class="invalid-feedback" id="mcorreo-error">
  245. No puede tener espacios al inicio
  246. </div>
  247. </div>
  248. </div>
  249. <div class="form-group row">
  250. <label for="mrol" class="col-4 col-form-label">Rol</label>
  251. <div class="col-8">
  252. <div class="datalist datalist-select mb-1 w-100">
  253. <div class="datalist-input">Mostrar todas</div>
  254. <span class="ing-buscar icono"></span>
  255. <ul style="display:none">
  256. <?php foreach($fs_roles as $rol){ ?>
  257. <li data-id="<?= $rol['rol_id'] ?>" class="pl-4"><?= $rol['rol_titulo'] ?></li>
  258. <?php } ?>
  259. </ul>
  260. <input type="hidden" id="mrol" name="mrol" value="">
  261. </div>
  262. </div>
  263. </div>
  264. <?php if($user->admin){ ?>
  265. <div class="form-group row" id="mdatalist">
  266. <label for="dlfacultad" class="col-4 col-form-label">Facultad *</label>
  267. <div class="col-8">
  268. <div class="datalist datalist-select mb-1 w-100">
  269. <div class="datalist-input">Mostrar todas</div>
  270. <span class="ing-buscar icono"></span>
  271. <ul style="display:none">
  272. <?php foreach($fs_facultades as $facultad){ ?>
  273. <li data-id="<?= $facultad['facultad_id'] ?>" class="pl-4"><?= $facultad['facultad_nombre'] ?></li>
  274. <?php } ?>
  275. </ul>
  276. <input type="hidden" id="dlfacultad" name="dlfacultad" value="">
  277. </div>
  278. </div>
  279. </div>
  280. <?php } ?>
  281. </div>
  282. <div class="form-group row">
  283. <div class="offset-4 col-8">
  284. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1">
  285. <span class="ing-aceptar ing-fw"></span> Guardar
  286. </button>
  287. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal">
  288. <span class="ing-cancelar ing-fw"></span> Cancelar
  289. </button>
  290. </div>
  291. </div>
  292. </form>
  293. </div>
  294. </div>
  295. </div>
  296. </div>
  297. <script src="js/jquery.min.js"></script>
  298. <script src="js/bootstrap/bootstrap.min.js"></script>
  299. <script src="js/datalist.js"></script>
  300. <?php
  301. require_once 'js/messages.php';
  302. ?>
  303. <script>
  304. <?php if(isset($_GET['error'])){
  305. if($_GET['error']==1){ ?>
  306. triggerMessage("Esta clave ya está en uso", "Error");
  307. <?php }
  308. }
  309. ?>
  310. function valida_campos(){
  311. var error=false;
  312. if($("#mclave").val()==""){
  313. $("#mclave").addClass("is-invalid");
  314. $("#mclave-error").html("Campo obligatorio");
  315. error=true;
  316. }else{
  317. $("#mclave").removeClass("is-invalid");
  318. }
  319. if($("#mclave").val()[0]==" "){
  320. $("#mclave").addClass("is-invalid");
  321. $("#mclave-error").html("No puede tener espacios al inicio");
  322. error=true;
  323. }
  324. if($("#mnombre").val()==""){
  325. $("#mnombre").addClass("is-invalid");
  326. $("#mnombre-error").html("Campo obligatorio");
  327. error=true;
  328. }else{
  329. $("#mnombre").removeClass("is-invalid");
  330. }
  331. if($("#mnombre").val()[0]==" "){
  332. $("#mnombre").addClass("is-invalid");
  333. $("#mnombre-error").html("No puede tener espacios al inicio");
  334. error=true;
  335. }
  336. if($("#mcorreo").val()[0]==" "){
  337. $("#mcorreo").addClass("is-invalid");
  338. $("#mcorreo-error")
  339. error=true;
  340. }
  341. if(error==true){
  342. return false;
  343. }else{
  344. var btn = $('#submitBtn');
  345. if(btn.data('tipo')==2)//update
  346. $('#formaModal').prop("action", "./action/action_usuarios_update.php");
  347. else//insert
  348. $('#formaModal').prop('action', './action/action_usuarios_insert.php');
  349. }
  350. }
  351. $('#modal').on('show.bs.modal', function (event){
  352. var button = $(event.relatedTarget);
  353. var tipo = button.data('tipo');
  354. var modal = $(this);
  355. setDatalistFirst('#mrol');
  356. <?php if($user->admin){ ?>
  357. setDatalistFirst("#dlfacultad");
  358. <?php } ?>
  359. $("#mnombre").removeClass("is-invalid");
  360. $("#mclave").removeClass("is-invalid");
  361. $("#mcorreo").removeClass("is-invalid");
  362. if(tipo == 1){//crear
  363. $('#modalLabel').html("Crear Usuario");
  364. $('#mclave').val("");
  365. $('#mnombre').val("");
  366. $('#mcorreo').val("");
  367. $('#id').val("");
  368. <?php if($user->admin){ ?>
  369. $('#mfacultad').val(<?=$fac?>);
  370. <?php } ?>
  371. }
  372. else{//editar
  373. var id= $(event.relatedTarget).parents('tr').data('id');
  374. var fac=$(event.relatedTarget).parents('tr').data('facultad');
  375. $('#modalLabel').html("Editar Usuario");
  376. $('#id').val(id);
  377. $('#mfacultad').val(fac);
  378. $('#submitBtn').data('tipo', 2);
  379. $.ajax({
  380. url:"action/action_usuarios_select.php",
  381. type:"post",
  382. dataType:"json",
  383. data: {usuario: id},
  384. success:function(result){
  385. console.log(result);
  386. $('#id').val(result['usuario_id']);
  387. $('#mfacultad').val(result['facultad_id']);
  388. $('#mnombre').val(result['usuario_nombre']);
  389. $('#mclave').val(result['usuario_clave']);
  390. $('#mcorreo').val(result['usuario_correo']);
  391. setDatalist('#mrol', result['rol_id']);
  392. <?php if($user->admin){ ?>
  393. setDatalist('#dlfacultad', result['facultad_id']);
  394. <?php } ?>
  395. },
  396. error: function(){
  397. console.log("Error")
  398. }
  399. });
  400. }
  401. });
  402. function valida_filtro(){
  403. var error = false;
  404. if($('#filter_desc').val()[0]==" "){
  405. $('#filter_desc').addClass("is-invalid");
  406. $('#desc-error').html("No puede tener espacios al inicio");
  407. error = true;
  408. }
  409. if(error){
  410. return false;
  411. }
  412. else{
  413. return true;
  414. }
  415. }
  416. $(document).on("click", ".btn-reset", function(event){
  417. var forma = $(this).parents("form");
  418. forma.find("input[type=text]").val("");
  419. setDatalistFirst("#filter_rol");
  420. forma.submit();
  421. });
  422. </script>
  423. </body>
  424. </html>