usuario_update.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. /*
  3. * Actualiza datos de usuario en BD.
  4. * Se divide en 3 partes: datos generales, datos administrativos (opcional), datos de profesor (opcional).
  5. * No quita tipo de usuario sólo lo actualiza. Para quitar tipos se debe usar usuario_delete
  6. * Recibe:
  7. * id
  8. * nombre
  9. * apellidos
  10. * curp
  11. * clave
  12. * correo * opcional
  13. * fechaingreso
  14. * contacto * opcional
  15. * estado
  16. *
  17. * esAdministrativo * opcional. Si llega busca datos de administrativo
  18. * puesto
  19. * esProfesor *opcional. Si llega busca datos de profesor
  20. * categoría
  21. *
  22. * Error:
  23. * 0 - no se recibieron todos los campos
  24. * 1 - error al guardar en base de datos
  25. *
  26. * Success:
  27. */
  28. require_once("../../include/constantes.php");
  29. include_once("../../include/nocache.php");//continue on error
  30. require_once("../../include/util.php");//die on error
  31. require_once("../../include/bd_pdo.php");
  32. require_once("../../classes/ValidaSesion.php");
  33. require_once("../classes/LogActividad.php");//die on error
  34. $pag = "../usuarios_editar.php";
  35. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  36. $objSesion = new ValidaSesion($pdo, 32, APSA);
  37. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  38. header("Location: ".$pag."?error=2&id=".$_POST["id"]);
  39. exit();
  40. }
  41. unset($objValida);
  42. try {
  43. $pdo->beginTransaction();
  44. if(!isset($_POST["id"]) || !isset($_POST["nombre"]) || !isset($_POST["apellidos"]) || !isset($_POST["clave"])
  45. || !isset($_POST["ingreso"]) || !isset($_POST["estado"])){
  46. header("Location:../usuarios.php?error=0");
  47. exit();
  48. }
  49. $query = ":p_id, ";
  50. $usr_id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  51. $query .= ":p_grado,";
  52. $grado = (trim(filter_input(INPUT_POST, "grado", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  53. $query .= ":p_nombre,";
  54. $nombre = (trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  55. $query .= ":p_apellidos,";
  56. $apellidos = (trim(filter_input(INPUT_POST, "apellidos", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  57. $query .= ":p_curp,";
  58. $curp = mb_strtoupper(trim(filter_input(INPUT_POST, "curp", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  59. $query .= ":p_claveulsa,";
  60. //$clave = mb_strtoupper(trim(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  61. $clave = intval(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_NUMBER_INT));//limpia texto
  62. $query .= ":p_fechai,";
  63. $fechaingreso = trim(filter_input(INPUT_POST, "ingreso"));//limpia texto
  64. $fechaingreso = fechaGuion($fechaingreso);
  65. $query .= ":p_edo";
  66. $estado = filter_input(INPUT_POST, "estado", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  67. //Valida que no esté solo en mayúsculas
  68. if($nombre == mb_strtoupper($nombre, "UTF-8")){
  69. $nombre = mb_convert_case(mb_strtolower($nombre), MB_CASE_TITLE, "UTF-8");
  70. }
  71. if($apellidos == mb_strtoupper($apellidos, "UTF-8")){
  72. $apellidos = mb_convert_case(mb_strtolower($apellidos), MB_CASE_TITLE, "UTF-8");
  73. }
  74. //actualiza usuario
  75. $stmt = $pdo->prepare('Select * from fu_usuario('.$query.')');//devuelve: Usuario_id
  76. $stmt->bindParam(":p_id", $usr_id);
  77. $stmt->bindParam(":p_grado", $grado);
  78. $stmt->bindParam(":p_nombre", $nombre);
  79. $stmt->bindParam(":p_apellidos", $apellidos);
  80. $stmt->bindParam(":p_curp", $curp);
  81. $stmt->bindParam(":p_claveulsa", $clave);
  82. $stmt->bindParam(":p_fechai", $fechaingreso);
  83. $stmt->bindParam(":p_edo", $estado);
  84. if(!$stmt->execute()){
  85. $pdo->rollBack();
  86. print_r($stmt->errorInfo());
  87. //header("Location:".$pag."?id=".$usr_id."&error=1");
  88. exit();
  89. }
  90. $stmt->closeCursor(); // cierra conexion de resultado
  91. //Actualiza datos de contacto
  92. $stmt = $pdo->prepare('Select * from fd_contacto(:usr, NULL)');//borra contacto actual
  93. $stmt->bindParam(":usr", $usr_id);
  94. if(!$stmt->execute()){
  95. $pdo->rollBack();
  96. print_r($stmt->errorInfo());
  97. //header("Location:".$pag."?error=1");
  98. exit();
  99. }
  100. if(isset($_POST["contacto_tipo"]) ){
  101. $tipoArr = $_POST["contacto_tipo"];
  102. $valorArr = $_POST["contacto_valor"];
  103. $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr)');//inserta contactos
  104. $stmt->bindParam(":usr", $usr_id);
  105. for($i=0; $i< count($tipoArr); $i++){
  106. if($valorArr[$i] != ""){
  107. $stmt->bindParam(":valor", $valorArr[$i]);
  108. $stmt->bindParam(":tipo", $tipoArr[$i]);
  109. if(!$stmt->execute()){
  110. $pdo->rollBack();
  111. //echo "Error fi_usuario [".$nombre."] [".$paterno."] [".$materno."] [".$clave."] [".$user."]";
  112. //print_r($stmt->errorInfo());
  113. header("Location:".$pag."?error=6");
  114. exit();
  115. }
  116. }
  117. }
  118. $stmt->closeCursor(); // cierra conexion de resultado
  119. }
  120. //Inserta foto
  121. if($_SESSION["sgi_administrador"]){
  122. $archivo = $_FILES['foto']['name'];
  123. if(!empty($archivo)){
  124. // Check file size
  125. if ($_FILES["foto"]["size"][0] > 10 * 1024 * 1024) {//en bytes
  126. $pdo->rollBack();
  127. header("Location:".$pag."?id=".$usr_id."&error=8");
  128. exit();
  129. }
  130. $exts_arr = array("jpg","png", "jpeg");
  131. $dot_arr = explode('.', $archivo);
  132. $ext = end($dot_arr);
  133. if(!in_array($ext, $exts_arr)){
  134. $pdo->rollBack();
  135. header("Location:".$pag."?id=".$usr_id."&error=9");
  136. exit();
  137. }
  138. $target_dir = "../../img/fotos/";
  139. $newfilename = "foto_".$clave."_".md5($clave).".".$ext;
  140. if (!move_uploaded_file($_FILES["foto"]["tmp_name"], $target_dir.$newfilename)) {
  141. $pdo->rollBack();
  142. header("Location:".$pag."?id=".$usr_id."&error=10");
  143. exit();
  144. }
  145. $stmt = $pdo->prepare('Select * from fu_usuariofoto(:p_id, :foto)');//devuelve: Usuario_id
  146. $stmt->bindParam(":p_id", $usr_id);
  147. $stmt->bindParam(":foto", $newfilename);
  148. if(!$stmt->execute()){
  149. $pdo->rollBack();
  150. header("Location:".$pag."?id=".$usr_id."&error=10");
  151. exit();
  152. }
  153. $stmt->closeCursor(); // cierra conexion de resultado
  154. }
  155. }
  156. //Validaciones administrativo
  157. if(isset($_POST["es_administrativo"]) && intval($_POST["es_administrativo"]) == 1){
  158. if(isset($_POST["es_administrativo_old"]) && intval($_POST["es_administrativo_old"]) == 1){//ya existía
  159. //actualiza en administrativo
  160. if(isset($_POST["puesto"]) && $_POST["puesto"] != ""){
  161. $puesto = filter_input(INPUT_POST, "puesto", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  162. $stmt = $pdo->prepare('Select * from fu_administrativo(:p_id, :p_puesto)');//devuelve: Usuario_id
  163. $stmt->bindParam(":p_id", $usr_id);
  164. $stmt->bindParam(":p_puesto", $puesto);
  165. if(!$stmt->execute()){
  166. $pdo->rollBack();
  167. header("Location:".$pag."?id=".$usr_id."&error=4");
  168. exit();
  169. }
  170. $stmt->closeCursor(); // cierra conexion de resultado
  171. $log = new LogActividad();
  172. $desc_log = "Actualiza tipo de usuario como administrativo ID[".$usr_id."]";
  173. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  174. }
  175. }else{//no era admin
  176. //inserta en administrativo. El puesto se define en otra página
  177. $stmt = $pdo->prepare('Select * from fi_administrativo(:p_id)');//devuelve: Usuario_id
  178. $stmt->bindParam(":p_id", $usr_id);
  179. if(!$stmt->execute()){
  180. $pdo->rollBack();
  181. //echo "Error fi_administrativo";
  182. //print_r($stmt->errorInfo());
  183. header("Location:".$pag."?id=".$usr_id."&error=4");
  184. exit();
  185. }
  186. $stmt->closeCursor(); // cierra conexion de resultado
  187. $log = new LogActividad();
  188. $desc_log = "Inserta tipo de usuario nuevo como administrativo ID[".$usr_id."]";
  189. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  190. }
  191. }else{//ya no es admin
  192. if(isset($_POST["es_administrativo_old"]) && intval($_POST["es_administrativo_old"]) == 1){//ya existía
  193. $stmt = $pdo->prepare('select * from fd_administrativo(:p_id)');
  194. $stmt->bindParam(":p_id", $usr_id);
  195. if(!$stmt->execute()){
  196. $pdo->rollBack();
  197. header("Location:".$pag."?id=".$usr_id."&error=4");
  198. exit();
  199. }
  200. $stmt->closeCursor(); // cierra conexion de resultado
  201. }
  202. }
  203. //Validaciones para profesor
  204. if(isset($_POST["es_profesor"]) && intval($_POST["es_profesor"]) == 1){
  205. if(isset($_POST["es_profesor_old"]) && intval($_POST["es_profesor_old"]) == 1){//ya existía
  206. //actualiza en profesor
  207. if(isset($_POST["cat"]) && $_POST["cat"] != ""){
  208. $cat = filter_input(INPUT_POST, "cat", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  209. $stmt = $pdo->prepare('Select * from fu_profesor(:p_id, :p_cat)');//devuelve: Usuario_id
  210. $stmt->bindParam(":p_id", $usr_id);
  211. $stmt->bindParam(":p_cat", $cat);
  212. if(!$stmt->execute()){
  213. $pdo->rollBack();
  214. print_r($stmt->errorInfo());
  215. //header("Location:".$pag."?id=".$usr_id."&error=1");
  216. exit();
  217. }
  218. $stmt->closeCursor(); // cierra conexion de resultado
  219. $log = new LogActividad();
  220. $desc_log = "Actualiza tipo de usuario como profesor ID[".$usr_id."]";
  221. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  222. }
  223. }else{//no era prof inserta
  224. //inserta en profesor
  225. if(isset($_POST["cat"]) && $_POST["cat"] != ""){
  226. $cat = trim(filter_input(INPUT_POST, "cat", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  227. $stmt = $pdo->prepare('Select * from fi_profesor(:p_id, :p_cat)');//devuelve: Usuario_id
  228. $stmt->bindParam(":p_id", $usr_id);
  229. $stmt->bindParam(":p_cat", $cat);
  230. if(!$stmt->execute()){
  231. $pdo->rollBack();
  232. //echo "Error fi_profesor";
  233. //print_r($stmt->errorInfo());
  234. header("Location:".$pag."?id=".$usr_id."&error=5");
  235. exit();
  236. }
  237. $stmt->closeCursor(); // cierra conexion de resultado
  238. $log = new LogActividad();
  239. $desc_log = "Inserta tipo de usuario nuevo como profesor ID[".$usr_id."]";
  240. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  241. }
  242. }//fin no era prof
  243. }else{//no es profesor
  244. if(isset($_POST["es_profesor_old"]) && intval($_POST["es_profesor_old"]) == 1){//ya existía
  245. $stmt = $pdo->prepare('select * from fd_profesor(:p_id)');
  246. $stmt->bindParam(":p_id", $usr_id);
  247. if(!$stmt->execute()){
  248. $pdo->rollBack();
  249. header("Location:".$pag."?id=".$usr_id."&error=5");
  250. exit();
  251. }
  252. $stmt->closeCursor(); // cierra conexion de resultado
  253. }
  254. }
  255. $log = new LogActividad();
  256. $desc_log = "Actualiza usuario ID[".$usr_id."] Nombre[".$nombre." ".$apellidos."] ClaveULSA[".$clave."] CURP[".$curp."]";
  257. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  258. $pdo->commit();
  259. $stmt = null; // cierra conexion
  260. header("Location: ../usuarios.php?ok=1");
  261. } catch(PDOException $e) {
  262. $pdo->rollBack();
  263. header("Location:".$pag."?id=".$usr_id."&error=1");
  264. }
  265. ?>