Exemple #1
0
        /// <summary>
        /// Llena los datos de una persona de la fila mandada como parametro
        /// </summary>
        /// <param name="datos">La fila con el origen de los datos</param>
        /// <param name="completo">Si es true, saca todos los datos de la fila, de ser false, solo nombre, usuario y clave</param>
        /// <param name="completo">Si es true, incluye datos privados como telefono y direccion </param>
        public void llenarDatos(DataRow datos, bool completo = true, bool incluirDatosPrivados = false)
        {
            clave           = DataRowParser.ToInt(datos["clave"]);
            nombre          = DataRowParser.ToString(datos["nombre"]);
            apellidoPaterno = DataRowParser.ToString(datos["apellidoP"]);
            apellidoMaterno = DataRowParser.ToString(datos["apellidoM"]);
            usuario         = DataRowParser.ToString(datos["usuario"]);
            omips           = DataRowParser.ToBool(datos["omips"]);
            oculta          = DataRowParser.ToBool(datos["oculta"]);
            foto            = DataRowParser.ToString(datos["foto"]);

            if (completo)
            {
                nacimiento = DataRowParser.ToDateTime(datos["nacimiento"]);
                facebook   = DataRowParser.ToString(datos["facebook"]);
                twitter    = DataRowParser.ToString(datos["twitter"]);
                sitio      = DataRowParser.ToString(datos["sitio"]);
                correo     = DataRowParser.ToString(datos["correo"]);
                permisos   = DataRowParser.ToTipoPermisos(datos["permisos"]);
                genero     = DataRowParser.ToString(datos["genero"]);
                ioiID      = DataRowParser.ToInt(datos["ioiID"]);
                omegaup    = DataRowParser.ToString(datos["omegaup"]);
                topcoder   = DataRowParser.ToString(datos["topcoder"]);
                codeforces = DataRowParser.ToString(datos["codeforces"]);

                if (incluirDatosPrivados)
                {
                    celular       = DataRowParser.ToString(datos["celular"]);
                    telefono      = DataRowParser.ToString(datos["telefono"]);
                    direccion     = DataRowParser.ToString(datos["direccion"]);
                    emergencia    = DataRowParser.ToString(datos["emergencia"]);
                    parentesco    = DataRowParser.ToString(datos["parentesco"]);
                    telEmergencia = DataRowParser.ToString(datos["telemergencia"]);
                    medicina      = DataRowParser.ToString(datos["medicina"]);
                    alergias      = DataRowParser.ToString(datos["alergias"]);
                }
            }
        }
        public ActionResult Edit(HttpPostedFileBase file, Persona p, string tipoUsuario)
        {
            if (!estaLoggeado() || p == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

            Persona current        = getUsuario();
            bool    esSuperUsuario = current.esSuperUsuario();

            if (p.clave != current.clave)
            {
                if (!esSuperUsuario)
                {
                    return(RedirectTo(Pagina.ERROR, 403));
                }
                current = Persona.obtenerPersonaConClave(p.clave);
            }

            if (!ModelState.IsValid)
            {
                return(Edit(current.usuario));
            }

            limpiarErroresViewBag();

#if !DEBUG
            if (!esSuperUsuario && !revisaCaptcha())
            {
                ViewBag.errorCaptcha = true;
                return(Edit(current.usuario));
            }
#endif

            // Validaciones foto
            if (file != null)
            {
                Archivos.ResultadoImagen resultado = Archivos.esImagenValida(file, Peticion.TamañoFotoMaximo);
                if (resultado != Archivos.ResultadoImagen.VALIDA)
                {
                    ViewBag.errorImagen = resultado.ToString().ToLower();
                    return(Edit(current.usuario));
                }
            }

            // Validacion genero
            if (String.IsNullOrEmpty(p.genero) || p.genero.Equals("M"))
            {
                p.genero = "M";
            }
            else
            {
                p.genero = "F";
            }

            // Validación permisos
            if (esSuperUsuario && tipoUsuario != null && tipoUsuario != "")
            {
                Persona.TipoPermisos permisos;
                permisos = DataRowParser.ToTipoPermisos(tipoUsuario);
                if (permisos == Persona.TipoPermisos.ADMIN && !esAdmin())
                {
                    return(RedirectTo(Pagina.ERROR, 403));
                }
                p.permisos = permisos;
            }
            else
            {
                p.permisos = current.permisos;
            }

            // Se copian los datos que no se pueden modificar
            p.clave = current.clave;
            if (!esAdmin())
            {
                p.ioiID  = current.ioiID;
                p.oculta = current.oculta;
            }
            p.usuario = current.usuario;
            p.omips   = current.omips;

            // Se guarda la imagen en disco
            if (file != null)
            {
                p.foto = Archivos.guardaArchivo(file);
            }

            // Se guardan los datos
            if (p.guardarDatos(generarPeticiones: !esSuperUsuario, currentValues: current))
            {
                if (!esSuperUsuario)
                {
                    Log.add(Log.TipoLog.USUARIO, p.nombreCompleto + " actualizó sus datos");
                }

                // Se modificaron los datos del usuario, tenemos que recargarlos en la variable de sesion
                recargarDatos();

                if (esSuperUsuario)
                {
                    if (file != null)
                    {
                        string oldFoto = p.foto;
                        p.foto =
                            Archivos.copiarArchivo(p.foto, Archivos.Folder.TEMPORAL,
                                                   p.clave.ToString(), Archivos.Folder.USUARIOS);
                        Archivos.eliminarArchivo(oldFoto, Archivos.Folder.TEMPORAL);
                        p.guardarDatos();
                    }

                    guardarParams(Pagina.SAVED_PROFILE, OK);
                    return(RedirectTo(Pagina.SAVED_PROFILE, current.usuario));
                }

                if (file != null || p.nombreCompleto != current.nombreCompleto)
                {
                    guardarParams(Pagina.SAVED_PROFILE, ADMIN);
                    return(RedirectTo(Pagina.SAVED_PROFILE));
                }
                else
                {
                    guardarParams(Pagina.SAVED_PROFILE, OK);
                    return(RedirectTo(Pagina.SAVED_PROFILE));
                }
            }
            else
            {
                guardarParams(Pagina.SAVED_PROFILE, ERROR);
                return(RedirectTo(Pagina.SAVED_PROFILE));
            }
        }