usuarios_editar.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/util.php");
  4. require_once("../include/bd_pdo.php");
  5. require_once("../classes/ValidaSesion.php");
  6. require_once("../classes/MainMenu.php");
  7. $menu = 6;
  8. $submenu = 67;
  9. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  10. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  11. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  12. header("Location: main.php");
  13. exit;
  14. }
  15. $pag = "usuarios.php";
  16. if(!isset($_GET["id"])){
  17. header("Location: ".$pag."?error=0");
  18. exit;
  19. }
  20. $usr_id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  21. /*if($usr_id == $_SESSION["usuario_id"]){
  22. header("Location: ".$pag);
  23. exit;
  24. }*/
  25. $stmt = $pdo->prepare('Select * from fs_usuario(:usr)');
  26. $stmt->bindParam(":usr", $usr_id);
  27. if(!$stmt->execute()){
  28. header("Location: ".$pag."&error=2");
  29. exit;
  30. }
  31. $usuario_rs = $stmt->fetch();
  32. $stmt->closeCursor();
  33. //Categorias
  34. $stmt = $pdo->prepare('Select * from fs_categoria(NULL)');
  35. if(!$stmt->execute()){
  36. $errorDesc = "Ocurrió un error al cargar las categorías de los profesores";
  37. }else{
  38. $categoria_rs = $stmt->fetchAll();
  39. }
  40. $stmt->closeCursor();
  41. ?>
  42. <!DOCTYPE html>
  43. <html lang="es" prefix="og: http://ogp.me/ns#">
  44. <head>
  45. <title>APSA - Facultad de Ingeniería</title>
  46. <meta charset="utf-8">
  47. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  48. <link rel="icon" type="image/png" href="../img/favicon.png" />
  49. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  50. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  51. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  52. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  53. <link rel="stylesheet" href="../css/jquery-ui.css" type="text/css">
  54. <link rel="stylesheet" href="../css/calendar.css" type="text/css">
  55. </head>
  56. <body>
  57. <div>
  58. <?php
  59. //--- Objeto que pinta menu
  60. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, "Editar Usuario");//usr, menu, pdo, sist
  61. $menuObj->printMenu();
  62. //Area
  63. $stmt = $pdo->prepare('Select * from fs_areaacademica(NULL, NULL)');
  64. if(!$stmt->execute()){
  65. $errorDesc = "Ocurrió un error al cargar las áreas académicas";
  66. }else{
  67. $area_rs = $stmt->fetchAll();
  68. }
  69. $stmt->closeCursor();
  70. //Obtiene estados
  71. $stmt = $pdo->prepare('Select * from fs_estadousuario(NULL)');
  72. if(!$stmt->execute()){
  73. $errorDesc = "Ocurrió un error al cargar los estados de los usuarios";
  74. }else
  75. $estado_rs = $stmt->fetchAll();
  76. $stmt->closeCursor();
  77. //Tipo contacto
  78. $stmt = $pdo->prepare('Select * from fs_tipocontacto(NULL)');
  79. if(!$stmt->execute()){
  80. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  81. }else{
  82. $tipocontacto_rs = $stmt->fetchAll();
  83. }
  84. $stmt->closeCursor();
  85. //Perfil contacto
  86. $stmt = $pdo->prepare('Select * from fs_perfilcontacto(NULL)');
  87. if(!$stmt->execute()){
  88. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  89. }else{
  90. $perfilcontacto_rs = $stmt->fetchAll();
  91. }
  92. $stmt->closeCursor();
  93. //Datos de contacto
  94. $stmt = $pdo->prepare('Select * from fs_contacto(:usr_id, NULL, NULL)');//selecciona contactos
  95. $stmt->bindParam(":usr_id", $usr_id);
  96. if(!$stmt->execute()){
  97. $errorDesc = "Ocurrió un error al cargar los datos de contacto del usuario";
  98. print_r($stmt->errorInfo());
  99. }else{
  100. $contacto_rs = $stmt->fetchAll();
  101. }
  102. $stmt->closeCursor();
  103. //--Manejo de errores y mensajes de exito
  104. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  105. switch ($_GET["error"]){
  106. case 0: $errorDesc = "No se reciberon los datos del usuario."; break;
  107. case 1: $errorDesc = "Ocurrió un error al actualizar los datos del usuario. Los prámetros pueden ser incorrectos"; break;
  108. case 2: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  109. case 3: $errorDesc = "Ocurrió un error al guardar las áreas académicas del usuario."; break;
  110. case 4: $errorDesc = "Ocurrió un error al camibar el estado de administrativo."; break;
  111. case 5: $errorDesc = "Ocurrió un error al camibar el estado de profesor."; break;
  112. case 6: $errorDesc = "La contraseña no es válida. Debe contener al menos 1 letra, 1 número, 1 caracter especial y tener una longitud de 5 caracteres."; break;
  113. case 8: $errorDesc = "Ocurrió un error al insertar la imagen. Debe pesar menos de 10MB."; break;
  114. case 9: $errorDesc = "No es una extensión válida para la imagen. Solo se permiten archivos jpg y png."; break;
  115. case 10: $errorDesc = "Ocurrió un error al cargar la imagen."; break;
  116. }
  117. }
  118. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  119. switch ($_GET["ok"]){
  120. case 0: $successDesc = "El usuario se guardó correctamente."; break;
  121. }
  122. }
  123. ?>
  124. <main class="container-fluid content marco">
  125. <?php include_once("../include/errorMessage.php");?>
  126. <?php if(isset($area_rs) && isset($estado_rs)){
  127. ?>
  128. <form action="./action/usuario_update.php" method="post" id="formaModal" onsubmit="return validaForm()" enctype="multipart/form-data">
  129. <div class="row">
  130. <div class="col-8">
  131. <p>Escribe el nombre utilizando mayúsculas, minúsculas y acentos.</p>
  132. <input type="hidden" name="id" value="<?php echo $usr_id ?>" />
  133. <div class="form-box">
  134. <?php
  135. require_once("./include/grados.php");
  136. if(!empty(GRADOS) && count(GRADOS)>0){
  137. ?>
  138. <div class="form-group row">
  139. <label for="apellidos" class="col-6 col-form-label">Grado de estudios *</label>
  140. <div class="col-6">
  141. <select name="grado" class="form-control col-12 col-md-4">
  142. <?php
  143. foreach(GRADOS as $grado){
  144. $selected = ($grado == $usuario_rs["Usuario_grado"])?'selected="selected"':'';
  145. echo '<option value="'.$grado.'" '.$selected.'>'.$grado.'</option>';
  146. }
  147. ?>
  148. </select>
  149. </div>
  150. </div>
  151. <?php } ?>
  152. <div class="form-group row">
  153. <label for="apellidos" class="col-6 col-form-label">Apellidos *</label>
  154. <div class="col-6">
  155. <input id="apellidos" name="apellidos" type="text" class="form-control" required="required" maxlength="30" value="<?php echo $usuario_rs["Usuario_apellidos"]; ?>">
  156. </div>
  157. </div>
  158. <div class="form-group row">
  159. <label for="nombre" class="col-6 col-form-label">Nombre *</label>
  160. <div class="col-6">
  161. <input id="nombre" name="nombre" type="text" class="form-control" required="required" maxlength="40" value="<?php echo $usuario_rs["Usuario_nombre"]; ?>">
  162. </div>
  163. </div>
  164. <div class="form-group row">
  165. <label for="clave" class="col-6 col-form-label">Clave ULSA *</label>
  166. <div class="col-6">
  167. <input id="clave" name="clave" type="text" class="form-control" required="required" maxlength="7" value="<?php echo $usuario_rs["Usuario_claveULSA"]; ?>">
  168. </div>
  169. </div>
  170. <div class="form-group row">
  171. <label for="curp" class="col-6 col-form-label">CURP</label>
  172. <div class="col-6">
  173. <input id="curp" name="curp" type="text" class="form-control" maxlength="25" value="<?php echo $usuario_rs["Usuario_curp"]; ?>">
  174. </div>
  175. </div>
  176. <div class="form-group row">
  177. <label for="ingreso" class="col-6 col-form-label">Fecha ingreso *</label>
  178. <div class="col-6">
  179. <input id="ingreso" name="ingreso" type="text" class="form-control date-picker" placeholder="dd/mm/aaaa" maxlength="10" readonly="readonly" required="required" value="<?php echo fechaSlash($usuario_rs["Usuario_fecha_ingreso"]); ?>">
  180. <div class="invalid-feedback">No es una fecha válida.</div>
  181. </div>
  182. </div>
  183. <?php if($_SESSION["sgi_administrador"]){ ?>
  184. <div class="form-group row">
  185. <label for="ingreso" class="col-6 col-form-label">Fotografía</label>
  186. <div class="col-6">
  187. <input id="foto" name="foto" type="file" class="form-control-file">
  188. </div>
  189. </div>
  190. <?php }?>
  191. <div class="form-group row">
  192. <label for="estado" class="col-6 col-form-label">Estado</label>
  193. <div class="col-6">
  194. <!--<select id="estado" name="estado" class="form-control">
  195. <?php foreach($estado_rs as $estado) {?>
  196. <option value="<?php echo $estado["UsuarioEstado_id"];?>" <?php if($usuario_rs["UsuarioEstado_id"] == $estado["UsuarioEstado_id"]){echo "selected='selected'";}?> ><?php echo $estado["UsuarioEstado_desc"];?></option>
  197. <?php } ?>
  198. </select>-->
  199. <div class="datalist datalist-select mb-1 w-100">
  200. <div class="datalist-input">&nbsp;</div>
  201. <span class="ing-buscar icono"></span>
  202. <ul style="display:none">
  203. <?php foreach($estado_rs as $estado) {?>
  204. <li data-id="<?php echo $estado["UsuarioEstado_id"];?>" <?php if($usuario_rs["UsuarioEstado_id"] == $estado["UsuarioEstado_id"]){echo "class='selected'";}?>><?php echo $estado["UsuarioEstado_desc"];?></li>
  205. <?php }?>
  206. </ul>
  207. <input type="hidden" id="estado" name="estado" value="">
  208. </div>
  209. </div>
  210. </div>
  211. </div>
  212. </div>
  213. <div class="col-4">
  214. <div class="my-auto pt-5 text-center">
  215. <?php
  216. $foto_url = "../img/fotos/";
  217. if (!empty($usuario_rs["Usuario_foto"])){
  218. $foto_url.= $usuario_rs["Usuario_foto"];
  219. }else{
  220. $foto_url.= "blank.jpg";
  221. }?>
  222. <img src="<?php echo $foto_url;?>" alt="Foto" style="max-height:200px">
  223. </div>
  224. </div>
  225. </div>
  226. <div class="row">
  227. <div class="col-12">
  228. <div class="row my-5">
  229. <div class="col-12 col-sm-6">
  230. <div class="form-box">
  231. <div class="form-group row">
  232. <label for="es_profesor" class="col-4 col-form-label">Es profesor</label>
  233. <div class="col-8">
  234. <div class="form-check form-check-inline pt-1">
  235. <input id="es_profesor" <?php if($usuario_rs["es_Profesor"]){ echo "checked='true'";} ?> name="es_profesor" type="checkbox" class="form-check-input radio-lg " value="1">
  236. <input type="hidden" name="es_profesor_old" value="<?php echo $usuario_rs["es_Profesor"]; ?>" >
  237. </div>
  238. </div>
  239. </div>
  240. <div class="form-group row" id="profesorBox">
  241. <label for="cat" class="col-4 col-form-label <?php if(!$usuario_rs["es_Profesor"]){ echo "disabled";} ?>">Categoría</label>
  242. <div class="col-8">
  243. <div class="datalist datalist-select mb-1 w-100 <?php if(!$usuario_rs["es_Profesor"]){ echo 'disabled';} ?>">
  244. <div class="datalist-input">Selecciona una categoría</div>
  245. <span class="ing-buscar icono"></span>
  246. <ul style="display:none">
  247. <?php foreach($categoria_rs as $categoria) { ?>
  248. <li data-id="<?php echo $categoria["Categoria_id"];?>" <?php if($usuario_rs["Categoria_id"] == $categoria["Categoria_id"]) echo "class = 'selected'" ?>><?php echo $categoria["Categoria_desc"];?></li>
  249. <?php }?>
  250. </ul>
  251. <input type="hidden" id="cat" name="cat" value="">
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. </div>
  257. <div class="col-12 col-sm-6">
  258. <div class="form-box">
  259. <div class="form-group row">
  260. <label for="es_administrativo" class="col-4 col-form-label">Es administrativo</label>
  261. <div class="col-8">
  262. <div class="form-check form-check-inline pt-1">
  263. <input id="es_administrativo" <?php if($usuario_rs["es_Administrativo"]){ echo "checked='true'";} ?> name="es_administrativo" type="checkbox" class="form-check-input radio-lg " value="1">
  264. <input type="hidden" name="es_administrativo_old" value="<?php echo $usuario_rs["es_Administrativo"]; ?>" >
  265. </div>
  266. </div>
  267. </div>
  268. <div class="form-group row <?php if(!$usuario_rs["es_Administrativo"]){ echo "d-none";} ?>" id="administrativoBox">
  269. <div class="col-12">
  270. <p><span class="alerta"><?php echo $ICO["alerta"];?></span> Recuerda asignar un <b>Puesto y permisos</b> al usuario</p>
  271. </div>
  272. </div>
  273. </div>
  274. </div>
  275. </div>
  276. <div class="row">
  277. <div class="col-12 my-3 p-4 bg-light">
  278. <h3 class="mb-3">Contacto</h3>
  279. <div id="contacto_list" class="col-12 px-0">
  280. <div class="form-group row contacto d-none">
  281. <div class="col-2 px-1">
  282. <select name="contacto_tipo[]" class="form-control tipo" disabled="true" readonly="true">
  283. <?php foreach($tipocontacto_rs as $tipocontacto) {?>
  284. <option value="<?php echo $tipocontacto["TipoContacto_id"];?>" data-subtipo="<?php echo $tipocontacto["SubtipoContacto"];?>"><?php echo $tipocontacto["TipoContacto_desc"];?></option>
  285. <?php } ?>
  286. </select>
  287. </div>
  288. <div class="col-2 px-1">
  289. <select name="contacto_perfil[]" class="form-control" disabled="true" readonly="true">
  290. <?php foreach($perfilcontacto_rs as $tipocontacto) {?>
  291. <option value="<?php echo $tipocontacto["PerfilContacto_id"];?>" <?php if($tipocontacto["PerfilContacto_seleccionado"]){echo 'checked="checked"';}?>><?php echo $tipocontacto["PerfilContacto_desc"];?></option>
  292. <?php } ?>
  293. </select>
  294. </div>
  295. <div class="col-2 px-1 d-none">
  296. <select name="contacto_subtipo[]" class="form-control subtipo" disabled="true" readonly="true">
  297. </select>
  298. </div>
  299. <div class="col px-1">
  300. <input name="contacto_valor[]" type="text" class="form-control" maxlength="100" placeholder="Valor" disabled="true" readonly="true">
  301. </div>
  302. <div class="col-1">
  303. <button type="button" class="btn btn-outline-danger borra-contacto"><?php echo $ICO["borrar2"];?> </button>
  304. </div>
  305. </div>
  306. <?php
  307. foreach($contacto_rs as $contacto){ ?>
  308. <div class="form-group row contacto">
  309. <div class="col-2 px-1">
  310. <select name="contacto_tipo[]" class="form-control tipo">
  311. <?php foreach($tipocontacto_rs as $tipocontacto) {
  312. $selected = ($contacto["TipoContacto_id"] == $tipocontacto["TipoContacto_id"]) ? "selected='selected'":"";
  313. ?>
  314. <option <?php echo $selected;?> value="<?php echo $tipocontacto["TipoContacto_id"];?>" data-subtipo="<?php echo $tipocontacto["SubtipoContacto"];?>"><?php echo $tipocontacto["TipoContacto_desc"];?></option>
  315. <?php } ?>
  316. </select>
  317. </div>
  318. <div class="col-2 px-1">
  319. <select name="contacto_perfil[]" class="form-control">
  320. <?php foreach($perfilcontacto_rs as $tipocontacto) {
  321. $selected = ($contacto["PerfilContacto_id"] == $tipocontacto["PerfilContacto_id"]) ? "selected='selected'":"";
  322. ?>
  323. <option <?php echo $selected;?> value="<?php echo $tipocontacto["PerfilContacto_id"];?>" <?php if($tipocontacto["PerfilContacto_seleccionado"]){echo 'checked="checked"';}?>><?php echo $tipocontacto["PerfilContacto_desc"];?></option>
  324. <?php } ?>
  325. </select>
  326. </div>
  327. <?php
  328. //Subipo contacto
  329. $stmt = $pdo->prepare('Select * from fs_subtipocontacto(:tipo, NULL)');
  330. $stmt->bindParam(":tipo", $contacto["TipoContacto_id"]);
  331. if(!$stmt->execute()){
  332. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  333. $subtipocontacto_rs = array();
  334. }else{
  335. $subtipocontacto_rs = $stmt->fetchAll();
  336. }
  337. $stmt->closeCursor();
  338. if(count($subtipocontacto_rs) == 0){ ?>
  339. <div class="col-2 px-1 d-none">
  340. <select name="contacto_subtipo[]" class="form-control subtipo">
  341. </select>
  342. </div>
  343. <?php } else {?>
  344. <div class="col-2 px-1">
  345. <select name="contacto_subtipo[]" class="form-control subtipo">
  346. <?php foreach($subtipocontacto_rs as $tipocontacto) {
  347. $selected = ($contacto["SubtipoContacto_id"] == $tipocontacto["SubtipoContacto_id"]) ? "selected='selected'":"";
  348. ?>
  349. <option <?php echo $selected;?> value="<?php echo $tipocontacto["SubtipoContacto_id"];?>"><?php echo $tipocontacto["SubtipoContacto_desc"];?></option>
  350. <?php } ?>
  351. </select>
  352. </div>
  353. <?php } ?>
  354. <div class="col px-1">
  355. <input name="contacto_valor[]" type="text" class="form-control" maxlength="100" placeholder="Valor" value="<?php echo $contacto["Contacto_valor"]; ?>">
  356. </div>
  357. <div class="col-1">
  358. <button type="button" class="btn btn-outline-danger borra-contacto"><?php echo $ICO["borrar2"];?> </button>
  359. </div>
  360. </div>
  361. <?php } ?>
  362. </div>
  363. <div class="row">
  364. <div class="col-4 col-sm-2 px-1">
  365. <button type="button" class="btn btn-outline-primary btn-block" id="agrega-contacto"><?php echo $ICO["mas"];?> Agregar</button>
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370. <div class="form-group row">
  371. <div class="col-12 text-center">
  372. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar</button>
  373. <a href="usuarios.php" class="btn btn-outline-danger"><?php echo $ICO["cancelar"];?> Cancelar</a>
  374. </div>
  375. </div>
  376. </div>
  377. </div>
  378. </form>
  379. <?php } ?>
  380. </main>
  381. <!--- FOOTER--->
  382. <?php require_once("../include/footer.php"); ?>
  383. </div>
  384. <script src="../js/jquery.min.js"></script>
  385. <script src="../js/jquery-ui.js"></script>
  386. <script src="../js/datepicker-es.js"></script>
  387. <script src="../js/bootstrap/popper.min.js"></script>
  388. <script src="../js/bootstrap/bootstrap.min.js"></script>
  389. <script src="../js/fechas.js"></script>
  390. <script src="../js/util.js"></script>
  391. <script src="../js/sidebarmenu.js"></script>
  392. <script src="../js/datalist.js"></script>
  393. <script src="./js/usuarios.js?rand=<?php echo rand();?>"></script>
  394. <script>
  395. function validaForm(){
  396. $("#contacto_list >.contacto:first-child").remove();
  397. return true;
  398. }
  399. $(document).ready(function(){
  400. $(".date-picker" ).datepicker({ dateFormat: "dd/mm/yy", changeMonth: true, changeYear: true, yearRange: "1980:<?php date("Y");?>" });
  401. $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] );
  402. });
  403. </script>
  404. </body>
  405. </html>