usuarios.php 23 KB

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