123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <?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
- * clave
- * correo * opcional
- * fechaingreso
- * contacto * opcional
- * estado
- *
- * esAdministrativo * opcional. Si llega busca datos de administrativo
- * puesto
- * esProfesor *opcional. Si llega busca datos de profesor
- * categoría
- *
- * Error:
- * 0 - no se recibieron todos los campos
- * 1 - error al guardar en base de datos
- *
- * Success:
- */
- 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
- $pag = "../usuarios_editar.php";
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 32, APSA);
- 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["clave"])
- || !isset($_POST["ingreso"]) || !isset($_POST["estado"])){
- header("Location:../usuarios.php?error=0");
- exit();
- }
- $query = ":p_id, ";
- $usr_id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $query .= ":p_grado,";
- $grado = (trim(filter_input(INPUT_POST, "grado", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
- $query .= ":p_nombre,";
- $nombre = (trim(filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
- $query .= ":p_apellidos,";
- $apellidos = (trim(filter_input(INPUT_POST, "apellidos", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
-
- $query .= ":p_curp,";
- $curp = mb_strtoupper(trim(filter_input(INPUT_POST, "curp", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
-
- $query .= ":p_claveulsa,";
- //$clave = mb_strtoupper(trim(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
- $clave = intval(filter_input(INPUT_POST, "clave", FILTER_SANITIZE_NUMBER_INT));//limpia texto
-
-
- $query .= ":p_fechai,";
- $fechaingreso = trim(filter_input(INPUT_POST, "ingreso"));//limpia texto
- $fechaingreso = fechaGuion($fechaingreso);
- $query .= ":p_edo";
- $estado = filter_input(INPUT_POST, "estado", FILTER_SANITIZE_NUMBER_INT);//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");
- }
- //actualiza usuario
- $stmt = $pdo->prepare('Select * from fu_usuario('.$query.')');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- $stmt->bindParam(":p_grado", $grado);
- $stmt->bindParam(":p_nombre", $nombre);
- $stmt->bindParam(":p_apellidos", $apellidos);
- $stmt->bindParam(":p_curp", $curp);
- $stmt->bindParam(":p_claveulsa", $clave);
- $stmt->bindParam(":p_fechai", $fechaingreso);
- $stmt->bindParam(":p_edo", $estado);
- 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 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"];
- $stmt = $pdo->prepare('Select * from fi_contacto(:valor, :tipo, :usr)');//inserta contactos
- $stmt->bindParam(":usr", $usr_id);
-
- for($i=0; $i< count($tipoArr); $i++){
- if($valorArr[$i] != ""){
- $stmt->bindParam(":valor", $valorArr[$i]);
- $stmt->bindParam(":tipo", $tipoArr[$i]);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //echo "Error fi_usuario [".$nombre."] [".$paterno."] [".$materno."] [".$clave."] [".$user."]";
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?error=6");
- exit();
- }
- }
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- }
-
- //Inserta foto
- if($_SESSION["sgi_administrador"]){
- $archivo = $_FILES['foto']['name'];
- if(!empty($archivo)){
- // Check file size
- if ($_FILES["foto"]["size"][0] > 10 * 1024 * 1024) {//en bytes
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=8");
- exit();
- }
- $exts_arr = array("jpg","png", "jpeg");
- $dot_arr = explode('.', $archivo);
- $ext = end($dot_arr);
- if(!in_array($ext, $exts_arr)){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=9");
- exit();
- }
- $target_dir = "../../img/fotos/";
- $newfilename = "foto_".$clave."_".md5($clave).".".$ext;
- if (!move_uploaded_file($_FILES["foto"]["tmp_name"], $target_dir.$newfilename)) {
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=10");
- exit();
- }
- $stmt = $pdo->prepare('Select * from fu_usuariofoto(:p_id, :foto)');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- $stmt->bindParam(":foto", $newfilename);
- if(!$stmt->execute()){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=10");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- }
- }
- //Validaciones administrativo
- if(isset($_POST["es_administrativo"]) && intval($_POST["es_administrativo"]) == 1){
- if(isset($_POST["es_administrativo_old"]) && intval($_POST["es_administrativo_old"]) == 1){//ya existía
- //actualiza en administrativo
- if(isset($_POST["puesto"]) && $_POST["puesto"] != ""){
- $puesto = filter_input(INPUT_POST, "puesto", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $stmt = $pdo->prepare('Select * from fu_administrativo(:p_id, :p_puesto)');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- $stmt->bindParam(":p_puesto", $puesto);
- if(!$stmt->execute()){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=4");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- $log = new LogActividad();
- $desc_log = "Actualiza tipo de usuario como administrativo ID[".$usr_id."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
- }else{//no era admin
- //inserta en administrativo. El puesto se define en otra página
- $stmt = $pdo->prepare('Select * from fi_administrativo(:p_id)');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //echo "Error fi_administrativo";
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?id=".$usr_id."&error=4");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- $log = new LogActividad();
- $desc_log = "Inserta tipo de usuario nuevo como administrativo ID[".$usr_id."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
- }else{//ya no es admin
- if(isset($_POST["es_administrativo_old"]) && intval($_POST["es_administrativo_old"]) == 1){//ya existía
- $stmt = $pdo->prepare('select * from fd_administrativo(:p_id)');
- $stmt->bindParam(":p_id", $usr_id);
- if(!$stmt->execute()){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=4");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- }
- }
-
- //Validaciones para profesor
- if(isset($_POST["es_profesor"]) && intval($_POST["es_profesor"]) == 1){
- if(isset($_POST["es_profesor_old"]) && intval($_POST["es_profesor_old"]) == 1){//ya existía
- //actualiza en profesor
- if(isset($_POST["cat"]) && $_POST["cat"] != ""){
- $cat = filter_input(INPUT_POST, "cat", FILTER_SANITIZE_NUMBER_INT);//limpia texto
- $stmt = $pdo->prepare('Select * from fu_profesor(:p_id, :p_cat)');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- $stmt->bindParam(":p_cat", $cat);
- if(!$stmt->execute()){
- $pdo->rollBack();
- print_r($stmt->errorInfo());
- //header("Location:".$pag."?id=".$usr_id."&error=1");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- $log = new LogActividad();
- $desc_log = "Actualiza tipo de usuario como profesor ID[".$usr_id."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
-
- }else{//no era prof inserta
- //inserta en profesor
- if(isset($_POST["cat"]) && $_POST["cat"] != ""){
- $cat = trim(filter_input(INPUT_POST, "cat", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
- $stmt = $pdo->prepare('Select * from fi_profesor(:p_id, :p_cat)');//devuelve: Usuario_id
- $stmt->bindParam(":p_id", $usr_id);
- $stmt->bindParam(":p_cat", $cat);
- if(!$stmt->execute()){
- $pdo->rollBack();
- //echo "Error fi_profesor";
- //print_r($stmt->errorInfo());
- header("Location:".$pag."?id=".$usr_id."&error=5");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- $log = new LogActividad();
- $desc_log = "Inserta tipo de usuario nuevo como profesor ID[".$usr_id."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
- }//fin no era prof
-
- }else{//no es profesor
- if(isset($_POST["es_profesor_old"]) && intval($_POST["es_profesor_old"]) == 1){//ya existía
- $stmt = $pdo->prepare('select * from fd_profesor(:p_id)');
- $stmt->bindParam(":p_id", $usr_id);
- if(!$stmt->execute()){
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=5");
- exit();
- }
- $stmt->closeCursor(); // cierra conexion de resultado
- }
- }
-
- $log = new LogActividad();
- $desc_log = "Actualiza usuario ID[".$usr_id."] Nombre[".$nombre." ".$apellidos."] ClaveULSA[".$clave."] CURP[".$curp."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- $pdo->commit();
- $stmt = null; // cierra conexion
- header("Location: ../usuarios.php?ok=1");
- } catch(PDOException $e) {
- $pdo->rollBack();
- header("Location:".$pag."?id=".$usr_id."&error=1");
- }
- ?>
|