123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- /*
- * Actualiza datos de usuario en BD.
- * Se divide en 3 partes: datos generales, datos administrativos (opcional), datos de profesor (opcional).
- * No quita tipo de usuario sólo lo actualiza. Para quitar tipos se debe usar usuario_delete
- * Recibe:
- * id
- * nombre
- * apellidos
- * curp
- * plan[]
- * clave[]
- * ingreso[]
- * contacto * opcional
- *
- */
- require_once("../../include/constantes.php");
- include_once("../../include/nocache.php");//continue on error
- require_once("../../include/util.php");//die on error
- require_once("../../include/bd_pdo.php");
- require_once("../../classes/ValidaSesion.php");
- require_once("../classes/LogActividad.php");//die on error
- define("IGNORA", 0);//no hace nada
- define("INSERTA", 1);//inserta nuevo en BD
- define("BORRA", 2);//borra BD
- define("ACTUALIZA", 3);//actualiza en BD
- /*function insertaPlan($pdo, $usr_id, $datos){
- $stmt = $pdo->prepare('Select * from fi_alumno_planestudio(:id, :plan, :claveulsa, :fechai, NULL, NULL)');
- $stmt->bindParam(":id", $usr_id);
- $stmt->bindParam(":plan", $datos["plan"]);
- $stmt->bindParam(":claveulsa", $datos["clave"]);
- $stmt->bindParam(":fechai", $datos["ingreso"]);
- if(!$stmt->execute()){
- $stmt->closeCursor();
- return false;
- }
- $stmt->closeCursor();
- return true;
- }*/
- function borraPlan($pdo, $usr_id, $datos){
- $stmt = $pdo->prepare('Select * from fd_alumno_planestudio(:id, :plan, :claveulsa)');
- $stmt->bindParam(":id", $usr_id);
- $stmt->bindParam(":plan", $datos["plan"]);
- $stmt->bindParam(":claveulsa", $datos["clave"]);
- if(!$stmt->execute()){
- $stmt->closeCursor();
- return false;
- }
- $stmt->closeCursor();
- return true;
- }
- function actualizaPlan($pdo, $usr_id, $datos){
- if($datos["procedencia"] != 0){
- $stmt = $pdo->prepare('Select * from fu_alumno_planestudio(:id, :plan, :claveulsa, :fechai, :procedencia, :generacion)');
- $stmt->bindParam(":procedencia", $datos["procedencia"]);
- }else{
- $stmt = $pdo->prepare('Select * from fu_alumno_planestudio(:id, :plan, :claveulsa, :fechai, NULL, :generacion)');
- }
- $stmt->bindParam(":id", $usr_id);
- $stmt->bindParam(":plan", $datos["plan"]);
- $stmt->bindParam(":claveulsa", $datos["clave"]);
- $stmt->bindParam(":fechai", $datos["ingreso"]);
- $stmt->bindParam(":generacion", $datos["generacion"]);
- if(!$stmt->execute()){
- $stmt->closeCursor();
- return false;
- }
- $stmt->closeCursor();
- return true;
- }
- $pag = "../alumnos_editar.php";
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 101, GEMA);
- if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
- header("Location: ".$pag."?error=2&id=".$_POST["id"]);
- exit();
- }
- unset($objValida);
- try {
- $pdo->beginTransaction();
-
- if(!isset($_POST["id"]) || !isset($_POST["nombre"]) || !isset($_POST["apellidos"]) || !isset($_POST["plan"],$_POST["clave"]) || !isset($_POST["ingreso"])){
- header("Location:".$pag."?error=0");
- exit();
- }
-
- $usr_id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $nombre = (trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
- $apellidos = (trim(filter_input(INPUT_POST, "apellidos", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
- $curp = mb_strtoupper(trim(filter_input(INPUT_POST, "curp", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
-
- //Valida que no esté solo en mayúsculas
- if($nombre == mb_strtoupper($nombre, "UTF-8")){
- $nombre = mb_convert_case(mb_strtolower($nombre), MB_CASE_TITLE, "UTF-8");
- }
- if($apellidos == mb_strtoupper($apellidos, "UTF-8")){
- $apellidos = mb_convert_case(mb_strtolower($apellidos), MB_CASE_TITLE, "UTF-8");
- }
- $planAlumnoNuevo = array();
- for($i=0; $i<count($_POST["plan"]); $i++){
- $planAlumnoNuevo[] = array("plan"=>$_POST["plan"][$i], "clave" => intval($_POST["clave"][$i]), "ingreso"=> fechaGuion($_POST["ingreso"][$i], false),
- "generacion"=> fechaGuion($_POST["generacion"][$i], false), "procedencia" => $_POST["procedencia"][$i],
- "hash"=>$_POST["plan"][$i].intval($_POST["clave"][$i]).fechaGuion($_POST["ingreso"][$i], false).fechaGuion($_POST["generacion"][$i], false).$_POST["procedencia"][$i], "action" => INSERTA);
- }
-
-
- //Plan de estudios asignados actualmente
- $stmt = $pdo->prepare('Select * from fs_alumno_planestudio(:usr_id, NULL)');
- $stmt->bindParam(":usr_id", $usr_id);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?id=".$usr_id."&error=1");
- exit();
- }else{
- $carrera_rs = $stmt->fetchAll();
- }
- $stmt->closeCursor();
-
- $planAlumnoBD = array();
- foreach($carrera_rs as $carrera){
- $planAlumnoBD[] = array("plan"=>$carrera["PlanEstudio_id"], "clave" =>$carrera["Usuario_claveULSA"], "ingreso"=> fechaGuion($carrera["Alumno_fecha_ingreso"], false),
- "generacion"=> fechaGuion($carrera["Alumno_generacion"], false), "procedencia" => $carrera["TipoProcedencia_id"]==""?0:$carrera["TipoProcedencia_id"],
- "hash"=>$carrera["PlanEstudio_id"].$carrera["Usuario_claveULSA"].fechaGuion($carrera["Alumno_fecha_ingreso"], false).fechaGuion($carrera["Alumno_generacion"], false).$carrera["TipoProcedencia_id"], "action" => ACTUALIZA);
- }
- /*Compara info nueva con BD y determina las acciones necesarias*/
- for($i=0; $i<count($planAlumnoNuevo); $i++){
- for($j=0; $j<count($planAlumnoBD); $j++){
- if($planAlumnoNuevo[$i]["hash"] == $planAlumnoBD[$j]["hash"]){
- $planAlumnoNuevo[$i]["action"] = IGNORA;//ignora valor enBD
- $planAlumnoBD[$j]["action"] = IGNORA;//ignora valor enBD
- }else if($planAlumnoNuevo[$i]["plan"] == $planAlumnoBD[$j]["plan"] && $planAlumnoNuevo[$i]["clave"] == $planAlumnoBD[$j]["clave"]){
- $planAlumnoNuevo[$i]["action"] = ACTUALIZA;//actualiza a BD unevo valor
- $planAlumnoBD[$j]["action"] = IGNORA;//ignora valor enBD
- }
- }
- }
- //---- Actualiza alumno ---
- $stmt = $pdo->prepare('Select * from fu_alumno(:id, :nombre, :apellidos, :curp)');//devuelve: Usuario_id
- $stmt->bindParam(":id", $usr_id);
- $stmt->bindParam(":nombre", $nombre);
- $stmt->bindParam(":apellidos", $apellidos);
- $stmt->bindParam(":curp", $curp);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?id=".$usr_id."&error=1");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
-
- //---- Actualiza carreras ----
- $error = false;
- foreach($planAlumnoNuevo as $datos){
- switch($datos["action"]){
- /*case INSERTA:
- if(!insertaPlan($pdo, $usr_id, $datos)){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=3");
- exit();
- }
- break;*/
- case ACTUALIZA:
- if(!actualizaPlan($pdo, $usr_id, $datos)){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=3");
- exit();
- }
- echo "Actualiza";
- print_r($datos);
- }
- }
- foreach($planAlumnoBD as $datos){
- if($datos["action"] == BORRA){
- if(!borraPlan($pdo, $usr_id, $datos)){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=4");
- exit();
- }
- /*echo "Borra";
- print_r($datos);*/
- }
- }
-
- //---- Actualiza datos de contacto ----
- $stmt = $pdo->prepare('Select * from fd_contacto(:usr, NULL)');//borra contacto actual
- $stmt->bindParam(":usr", $usr_id);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?error=1");
- exit();
- }
-
- if(isset($_POST["contacto_tipo"]) ){
- $tipoArr = $_POST["contacto_tipo"];
- $valorArr = $_POST["contacto_valor"];
- $perfilArr = $_POST["contacto_perfil"];
- $subtipoArr = $_POST["contacto_subtipo"];
-
- for($i=0; $i< count($tipoArr); $i++){
- if(trim($valorArr[$i]) != ""){
- if($subtipoArr[$i] != 0){
- $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr, :perf, :subt)');//inserta contactos
- $stmt->bindParam(":subt", $subtipoArr[$i]);
- }else{
- $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr, :perf, NULL)');//inserta contactos
- }
- $stmt->bindParam(":usr", $usr_id);
- $stmt->bindParam(":valor", $valorArr[$i]);
- $stmt->bindParam(":tipo", $tipoArr[$i]);
- $stmt->bindParam(":perf", $perfilArr[$i]);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //echo "Error fi_contacto [".$valorArr[$i]."] [".$tipoArr[$i]."] [".$usr_id."]<br>";
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?error=6");
- exit();
- }
- }
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- }
-
- $log = new LogActividad();
- $desc_log = "Actualiza alumno ID[".$usr_id."] Nombre[".$nombre." ".$apellidos."] CURP[".$curp."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- $pdo->commit();
- $stmt = null; // cierra conexion
- header("Location: ../alumnos.php?ok=1");
- } catch(PDOException $e) {
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=1");
- }
- ?>
|