alumno_update.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. * plan[]
  12. * clave[]
  13. * ingreso[]
  14. * contacto * opcional
  15. *
  16. */
  17. require_once("../../include/constantes.php");
  18. include_once("../../include/nocache.php");//continue on error
  19. require_once("../../include/util.php");//die on error
  20. require_once("../../include/bd_pdo.php");
  21. require_once("../../classes/ValidaSesion.php");
  22. require_once("../classes/LogActividad.php");//die on error
  23. define("IGNORA", 0);//no hace nada
  24. define("INSERTA", 1);//inserta nuevo en BD
  25. define("BORRA", 2);//borra BD
  26. define("ACTUALIZA", 3);//actualiza en BD
  27. /*function insertaPlan($pdo, $usr_id, $datos){
  28. $stmt = $pdo->prepare('Select * from fi_alumno_planestudio(:id, :plan, :claveulsa, :fechai, NULL, NULL)');
  29. $stmt->bindParam(":id", $usr_id);
  30. $stmt->bindParam(":plan", $datos["plan"]);
  31. $stmt->bindParam(":claveulsa", $datos["clave"]);
  32. $stmt->bindParam(":fechai", $datos["ingreso"]);
  33. if(!$stmt->execute()){
  34. $stmt->closeCursor();
  35. return false;
  36. }
  37. $stmt->closeCursor();
  38. return true;
  39. }*/
  40. function borraPlan($pdo, $usr_id, $datos){
  41. $stmt = $pdo->prepare('Select * from fd_alumno_planestudio(:id, :plan, :claveulsa)');
  42. $stmt->bindParam(":id", $usr_id);
  43. $stmt->bindParam(":plan", $datos["plan"]);
  44. $stmt->bindParam(":claveulsa", $datos["clave"]);
  45. if(!$stmt->execute()){
  46. $stmt->closeCursor();
  47. return false;
  48. }
  49. $stmt->closeCursor();
  50. return true;
  51. }
  52. function actualizaPlan($pdo, $usr_id, $datos){
  53. if($datos["procedencia"] != 0){
  54. $stmt = $pdo->prepare('Select * from fu_alumno_planestudio(:id, :plan, :claveulsa, :fechai, :procedencia, :generacion)');
  55. $stmt->bindParam(":procedencia", $datos["procedencia"]);
  56. }else{
  57. $stmt = $pdo->prepare('Select * from fu_alumno_planestudio(:id, :plan, :claveulsa, :fechai, NULL, :generacion)');
  58. }
  59. $stmt->bindParam(":id", $usr_id);
  60. $stmt->bindParam(":plan", $datos["plan"]);
  61. $stmt->bindParam(":claveulsa", $datos["clave"]);
  62. $stmt->bindParam(":fechai", $datos["ingreso"]);
  63. $stmt->bindParam(":generacion", $datos["generacion"]);
  64. if(!$stmt->execute()){
  65. $stmt->closeCursor();
  66. return false;
  67. }
  68. $stmt->closeCursor();
  69. return true;
  70. }
  71. $pag = "../alumnos_editar.php";
  72. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  73. $objSesion = new ValidaSesion($pdo, 101, GEMA);
  74. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  75. header("Location: ".$pag."?error=2&id=".$_POST["id"]);
  76. exit();
  77. }
  78. unset($objValida);
  79. try {
  80. $pdo->beginTransaction();
  81. if(!isset($_POST["id"]) || !isset($_POST["nombre"]) || !isset($_POST["apellidos"]) || !isset($_POST["plan"],$_POST["clave"]) || !isset($_POST["ingreso"])){
  82. header("Location:".$pag."?error=0");
  83. exit();
  84. }
  85. $usr_id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  86. $nombre = (trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  87. $apellidos = (trim(filter_input(INPUT_POST, "apellidos", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  88. $curp = mb_strtoupper(trim(filter_input(INPUT_POST, "curp", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  89. //Valida que no esté solo en mayúsculas
  90. if($nombre == mb_strtoupper($nombre, "UTF-8")){
  91. $nombre = mb_convert_case(mb_strtolower($nombre), MB_CASE_TITLE, "UTF-8");
  92. }
  93. if($apellidos == mb_strtoupper($apellidos, "UTF-8")){
  94. $apellidos = mb_convert_case(mb_strtolower($apellidos), MB_CASE_TITLE, "UTF-8");
  95. }
  96. $planAlumnoNuevo = array();
  97. for($i=0; $i<count($_POST["plan"]); $i++){
  98. $planAlumnoNuevo[] = array("plan"=>$_POST["plan"][$i], "clave" => intval($_POST["clave"][$i]), "ingreso"=> fechaGuion($_POST["ingreso"][$i], false),
  99. "generacion"=> fechaGuion($_POST["generacion"][$i], false), "procedencia" => $_POST["procedencia"][$i],
  100. "hash"=>$_POST["plan"][$i].intval($_POST["clave"][$i]).fechaGuion($_POST["ingreso"][$i], false).fechaGuion($_POST["generacion"][$i], false).$_POST["procedencia"][$i], "action" => INSERTA);
  101. }
  102. //Plan de estudios asignados actualmente
  103. $stmt = $pdo->prepare('Select * from fs_alumno_planestudio(:usr_id, NULL)');
  104. $stmt->bindParam(":usr_id", $usr_id);
  105. if(!$stmt->execute()){
  106. $pdo->rollBack();
  107. //print_r($stmt->errorInfo());
  108. header("Location:".$pag."?id=".$usr_id."&error=1");
  109. exit();
  110. }else{
  111. $carrera_rs = $stmt->fetchAll();
  112. }
  113. $stmt->closeCursor();
  114. $planAlumnoBD = array();
  115. foreach($carrera_rs as $carrera){
  116. $planAlumnoBD[] = array("plan"=>$carrera["PlanEstudio_id"], "clave" =>$carrera["Usuario_claveULSA"], "ingreso"=> fechaGuion($carrera["Alumno_fecha_ingreso"], false),
  117. "generacion"=> fechaGuion($carrera["Alumno_generacion"], false), "procedencia" => $carrera["TipoProcedencia_id"]==""?0:$carrera["TipoProcedencia_id"],
  118. "hash"=>$carrera["PlanEstudio_id"].$carrera["Usuario_claveULSA"].fechaGuion($carrera["Alumno_fecha_ingreso"], false).fechaGuion($carrera["Alumno_generacion"], false).$carrera["TipoProcedencia_id"], "action" => ACTUALIZA);
  119. }
  120. /*Compara info nueva con BD y determina las acciones necesarias*/
  121. for($i=0; $i<count($planAlumnoNuevo); $i++){
  122. for($j=0; $j<count($planAlumnoBD); $j++){
  123. if($planAlumnoNuevo[$i]["hash"] == $planAlumnoBD[$j]["hash"]){
  124. $planAlumnoNuevo[$i]["action"] = IGNORA;//ignora valor enBD
  125. $planAlumnoBD[$j]["action"] = IGNORA;//ignora valor enBD
  126. }else if($planAlumnoNuevo[$i]["plan"] == $planAlumnoBD[$j]["plan"] && $planAlumnoNuevo[$i]["clave"] == $planAlumnoBD[$j]["clave"]){
  127. $planAlumnoNuevo[$i]["action"] = ACTUALIZA;//actualiza a BD unevo valor
  128. $planAlumnoBD[$j]["action"] = IGNORA;//ignora valor enBD
  129. }
  130. }
  131. }
  132. //---- Actualiza alumno ---
  133. $stmt = $pdo->prepare('Select * from fu_alumno(:id, :nombre, :apellidos, :curp)');//devuelve: Usuario_id
  134. $stmt->bindParam(":id", $usr_id);
  135. $stmt->bindParam(":nombre", $nombre);
  136. $stmt->bindParam(":apellidos", $apellidos);
  137. $stmt->bindParam(":curp", $curp);
  138. if(!$stmt->execute()){
  139. $pdo->rollBack();
  140. //print_r($stmt->errorInfo());
  141. header("Location:".$pag."?id=".$usr_id."&error=1");
  142. exit();
  143. }
  144. $stmt->closeCursor(); // cierra conexion de resultado
  145. //---- Actualiza carreras ----
  146. $error = false;
  147. foreach($planAlumnoNuevo as $datos){
  148. switch($datos["action"]){
  149. /*case INSERTA:
  150. if(!insertaPlan($pdo, $usr_id, $datos)){
  151. $pdo->rollBack();
  152. header("Location:".$pag."?id=".$usr_id."&error=3");
  153. exit();
  154. }
  155. break;*/
  156. case ACTUALIZA:
  157. if(!actualizaPlan($pdo, $usr_id, $datos)){
  158. $pdo->rollBack();
  159. header("Location:".$pag."?id=".$usr_id."&error=3");
  160. exit();
  161. }
  162. echo "Actualiza";
  163. print_r($datos);
  164. }
  165. }
  166. foreach($planAlumnoBD as $datos){
  167. if($datos["action"] == BORRA){
  168. if(!borraPlan($pdo, $usr_id, $datos)){
  169. $pdo->rollBack();
  170. header("Location:".$pag."?id=".$usr_id."&error=4");
  171. exit();
  172. }
  173. /*echo "Borra";
  174. print_r($datos);*/
  175. }
  176. }
  177. //---- Actualiza datos de contacto ----
  178. $stmt = $pdo->prepare('Select * from fd_contacto(:usr, NULL)');//borra contacto actual
  179. $stmt->bindParam(":usr", $usr_id);
  180. if(!$stmt->execute()){
  181. $pdo->rollBack();
  182. //print_r($stmt->errorInfo());
  183. header("Location:".$pag."?error=1");
  184. exit();
  185. }
  186. if(isset($_POST["contacto_tipo"]) ){
  187. $tipoArr = $_POST["contacto_tipo"];
  188. $valorArr = $_POST["contacto_valor"];
  189. $perfilArr = $_POST["contacto_perfil"];
  190. $subtipoArr = $_POST["contacto_subtipo"];
  191. for($i=0; $i< count($tipoArr); $i++){
  192. if(trim($valorArr[$i]) != ""){
  193. if($subtipoArr[$i] != 0){
  194. $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr, :perf, :subt)');//inserta contactos
  195. $stmt->bindParam(":subt", $subtipoArr[$i]);
  196. }else{
  197. $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr, :perf, NULL)');//inserta contactos
  198. }
  199. $stmt->bindParam(":usr", $usr_id);
  200. $stmt->bindParam(":valor", $valorArr[$i]);
  201. $stmt->bindParam(":tipo", $tipoArr[$i]);
  202. $stmt->bindParam(":perf", $perfilArr[$i]);
  203. if(!$stmt->execute()){
  204. $pdo->rollBack();
  205. //echo "Error fi_contacto [".$valorArr[$i]."] [".$tipoArr[$i]."] [".$usr_id."]<br>";
  206. //print_r($stmt->errorInfo());
  207. header("Location:".$pag."?error=6");
  208. exit();
  209. }
  210. }
  211. }
  212. $stmt->closeCursor(); // cierra conexion de resultado
  213. }
  214. $log = new LogActividad();
  215. $desc_log = "Actualiza alumno ID[".$usr_id."] Nombre[".$nombre." ".$apellidos."] CURP[".$curp."]";
  216. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  217. $pdo->commit();
  218. $stmt = null; // cierra conexion
  219. header("Location: ../alumnos.php?ok=1");
  220. } catch(PDOException $e) {
  221. $pdo->rollBack();
  222. header("Location:".$pag."?id=".$usr_id."&error=1");
  223. }
  224. ?>