Exemple #1
0
        public bool EsAdmin(int usuario_id)
        {
            var EsAdmin = false;

            using (var context = new RedSocialContext())
            {
                try
                {
                    var u = context.Usuario
                            .Where(x => x.id == usuario_id && x.Admin == 1)
                            .FirstOrDefault();

                    if (u != null)
                    {
                        EsAdmin = true;
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(EsAdmin);
        }
Exemple #2
0
        /// <summary>
        /// Este método es usado para registrar la información básica del usuario, autentificar y redireccionar al home de nuestro aplicativo.
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public ResponseModel RegistroDeLogin(Usuario usuario)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    // Guardamos la clave en formato MD5
                    usuario.Contrasena = HashHelper.MD5(usuario.Contrasena);

                    // Ignoramos la validacion para que la contraseña pase
                    context.Configuration.ValidateOnSaveEnabled = false;

                    context.Usuario.Add(usuario);
                    context.SaveChanges();

                    context.Database.ExecuteSqlCommand("UPDATE Usuario SET Url = @url WHERE id = @id",
                                                       new SqlParameter("url", ViewHelper.ConvertNameToUrl(usuario.Nombre, usuario.Apellido, usuario.id.ToString())),
                                                       new SqlParameter("id", usuario.id));

                    // Guardamos en session al usuario actual, solo necesitamos guardar su ID
                    SessionHelper.AddUserToSession(usuario.id.ToString());

                    rm.SetResponse(true);
                    rm.href = "inicio";
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }
Exemple #3
0
        public ResponseModel Acceder(Usuario usuario)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    // Encriptamos la contraseña para comparar
                    usuario.Contrasena = HashHelper.MD5(usuario.Contrasena);

                    var _usuario = context.Usuario
                                   .Where(x =>
                                          x.Contrasena == usuario.Contrasena &&
                                          x.Correo == usuario.Correo
                                          ).SingleOrDefault();

                    if (_usuario != null)
                    {
                        SessionHelper.AddUserToSession(_usuario.id.ToString());

                        rm.SetResponse(true);
                        rm.href = "inicio";
                    }
                    else
                    {
                        rm.SetResponse(false, "El usuario ingresado no existe");
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }
Exemple #4
0
        public static void Registrar(RedSocialContext context, HttpPostedFileBase file, int[] medidas, string FotoRelacion)
        {
            // Aplicamos la logica para crear los thumbnails
            ImageHelper imghelper = new ImageHelper();
            string      nombre    = ViewHelper.getNameForFiles() + Path.GetExtension(file.FileName);
            string      ruta      = System.Web.HttpContext.Current.Server.MapPath("~/Uploads/" + nombre);

            file.SaveAs(ruta);

            imghelper.Path   = System.Web.HttpContext.Current.Server.MapPath("~/Uploads/");
            imghelper.Img    = nombre;
            imghelper.Scales = medidas;
            imghelper.resizes();

            List <string> imagenes = imghelper.getNewImages();

            Foto Foto = new Foto
            {
                Foto1         = imagenes[0],
                Foto2         = imagenes[1],
                Foto3         = imagenes[2],
                Relacion      = FotoRelacion,
                FechaRegistro = ViewHelper.getDate(true)
            };

            context.Database.ExecuteSqlCommand("DELETE FROM Foto WHERE relacion = @r", new SqlParameter("r", FotoRelacion));
            context.Entry(Foto).State = EntityState.Added;
        }
Exemple #5
0
        public List <Publicacion> Listar(int usuario_id = 0)
        {
            List <Publicacion> publicaciones = new List <Publicacion>();

            using (var context = new RedSocialContext())
            {
                try
                {
                    // Traemos las ultimoas 20 publicaciones
                    if (usuario_id == 0) // Si queremos traer todas las publicaciones
                    {
                        publicaciones = context.Publicacion
                                        .OrderByDescending(x => x.FechaRegistro)
                                        .Take(30).ToList();        //Take equivale a SELECT TOP 30
                    }
                    else // Si queremos traer las publicaciones de u nusuario especifico
                    {
                        publicaciones = context.Publicacion
                                        .OrderByDescending(x => x.FechaRegistro)
                                        .Where(x => x.Para == usuario_id)
                                        .Take(30).ToList();        //Take equivale a SELECT TOP 30
                    }

                    foreach (var p in publicaciones)
                    {
                        // Obtenemos el emisor y su foto
                        p.Emisor = context.Usuario
                                   .Where(x => x.id == p.De).SingleOrDefault();

                        p.Emisor.Foto = context.Foto
                                        .Where(x => x.Relacion == "U" + p.De).SingleOrDefault();


                        if (p.Emisor.Foto == null)
                        {
                            p.Emisor.Foto = new Foto();                        // Si no tiene foto agregamos una por defecto
                        }
                        // Obtenemos el receptor y su foto
                        p.Receptor = context.Usuario
                                     .Where(x => x.id == p.Para).SingleOrDefault();

                        p.Receptor.Foto = context.Foto
                                          .Where(x => x.Relacion == "U" + p.Para).SingleOrDefault();

                        if (p.Receptor.Foto == null)
                        {
                            p.Receptor.Foto = new Foto();                          // Si no tiene foto agregamos una por defecto
                        }
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(publicaciones);
        }
Exemple #6
0
        public int Total()
        {
            int t = 0;

            using (var context = new RedSocialContext())
            {
                try
                {
                    t = context.Usuario
                        .OrderBy(x => x.Nombre)
                        .Count();
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }
            return(t);
        }
Exemple #7
0
        public Usuario Obtener(int id)
        {
            Usuario usuario = new Usuario();

            using (var context = new RedSocialContext())
            {
                try
                {
                    usuario = context.Usuario
                              .Where(x => x.id == id).Single();

                    // Damos formato a la fecha en yyyy/mm/dd
                    usuario.FechaNacimiento = ViewHelper.ConvertToDate(usuario.FechaNacimiento);

                    // Ahora obtenemos su foto
                    usuario.Foto = context.Foto.Where(
                        x => x.Relacion == FotoRelacion + usuario.id).SingleOrDefault();

                    // Si la foto no existe le ponemos una por defecto
                    if (usuario.Foto == null)
                    {
                        usuario.Foto = new Foto();
                    }

                    /* Ahora obtenemos los conocimientos de nuestro usuario, pero vamos a traerlos de la tabla conocimiento
                     * para esto haremos un LINQ INNER JOIN */
                    usuario.UsuarioConocimientos = (from c in context.Conocimientos.ToList()
                                                    join cu in context.UsuarioConocimiento.ToList()
                                                    on c.id equals cu.Conocimiento_id
                                                    where cu.Usuario_id == usuario.id
                                                    orderby c.Nombre select cu).ToList();

                    /* Como en nuestra entidad UsuarioConocimiento le hemos indicado que son llaves foraneas, el entity framework
                     * ha llegando los objetos Usuario y Conocimiento de esta clase automaticamente */
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(usuario);
        }
Exemple #8
0
        public List <ReportePublicacionesPorUsuario> ReportePublicacionesPorUsuario()
        {
            var reporte = new List <ReportePublicacionesPorUsuario>();

            using (var ctx = new RedSocialContext())
            {
                try
                {
                    reporte = ctx.Database
                              .SqlQuery <ReportePublicacionesPorUsuario>("[USP_ReportePublicacionesPorUsuario]")
                              .ToList();
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(reporte);
        }
Exemple #9
0
        public List <Conocimiento> Listar()
        {
            List <Conocimiento> conocimientos = new List <Conocimiento>();

            try
            {
                using (var context = new RedSocialContext())
                {
                    // Otra forma de hacer Query, usando Linq
                    conocimientos = (from c in context.Conocimientos
                                     orderby c.Nombre
                                     select c).ToList();
                }
            }
            catch (Exception e)
            {
                ELog.Save(this, e);
            }

            return(conocimientos);
        }
Exemple #10
0
        public ResponseModel Eliminar(int id)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    context.Entry(new Usuario {
                        id = id
                    }).State = EntityState.Deleted;
                    context.SaveChanges();

                    rm.SetResponse(true);
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }
Exemple #11
0
        public List <Usuario> Listar(int take, int skip)
        {
            List <Usuario> Usuarios = new List <Usuario>();

            using (var context = new RedSocialContext())
            {
                try
                {
                    Usuarios = context.Usuario
                               .OrderBy(x => x.Nombre)
                               .Skip(take * skip)
                               .Take(take)
                               .ToList();

                    // Debemos agregar sus fotos
                    foreach (var u in Usuarios)
                    {
                        // Ahora obtenemos su foto
                        u.Foto = context.Foto.Where(
                            x => x.Relacion == FotoRelacion + u.id).SingleOrDefault();

                        // Si la foto no existe le ponemos una por defecto
                        if (u.Foto == null)
                        {
                            u.Foto = new Foto();
                        }

                        // Ahora obtenemos los conocimientos de nuestro usuario
                        u.UsuarioConocimientos = context.UsuarioConocimiento
                                                 .Where(x => x.Usuario_id == u.id)
                                                 .ToList();
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }
            return(Usuarios);
        }
Exemple #12
0
        public ResponseModel Registrar(Publicacion publicacion)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    // Llenamos los valores que faltan
                    publicacion.FechaRegistro = ViewHelper.getDate(true);

                    context.Publicacion.Add(publicacion);
                    context.SaveChanges();

                    rm.SetResponse(true);
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }
Exemple #13
0
        public ResponseModel Actualizar(Usuario usuario, HttpPostedFileBase file)
        {
            using (var context = new RedSocialContext())
            {
                try
                {
                    if (file != null)
                    {
                        // Este es un helper que yo cree para crear copias de imagenes y validar, no existe en el marco de ASP.NET MVC
                        var rpta = ImageHelper.TryParse(file, 500);

                        if (rpta != "")
                        {
                            rm.SetResponse(false, rpta);

                            // Lanzamos una exception en caso que la imagen no sea válida
                            throw new Exception(rpta);
                        }

                        /* Ahora debemos guardar la foto, agregando el ID del usuario al campo Relacion de la tabla Foto
                         * Lo que hice fue crear un Modelo que implemente la logica de guardar una foto en la base de datos
                         * y crear copia usando el Helper que yo creo para Imagenes */

                        FotoModel.Registrar(context, file, new int[] { 500, 300, 100 }, FotoRelacion + usuario.id);
                    }

                    // Quitamos la validacion
                    context.Configuration.ValidateOnSaveEnabled = false;

                    // Registramos la entidad
                    var ctxUsuario = context.Entry(usuario);

                    // Le indicamos que es del tipo Update
                    ctxUsuario.State = EntityState.Modified;

                    // Seteamos la fecha al formato YYYY/MM/DD
                    usuario.FechaNacimiento = ViewHelper.ConvertToDate(usuario.FechaNacimiento);

                    // Url del Usuario
                    usuario.Url = ViewHelper.ConvertNameToUrl(usuario.Nombre, usuario.Apellido, usuario.id.ToString());

                    // Campos que no queremos que toque
                    ctxUsuario.Property(x => x.Admin).IsModified = false;

                    if (usuario.Contrasena == null)
                    {
                        ctxUsuario.Property(x => x.Contrasena).IsModified = false;                             // Retiramos contrasena de la actualizacion
                    }
                    else
                    {
                        usuario.Contrasena = HashHelper.MD5(usuario.Contrasena);  // Si la contraseña ha sido cambiada la actualizamos a MD5
                    }

                    /* Antes de agregar los conocimientos debemos borrar los conocimientos que ya tenga este usuario
                     * para evitar registros duplicados. Si seguimos el esquema de entity framework, primero tendriamos
                     * que traer todo los conocimientos que tiene este usuario e indificarle que los elimine. Pero
                     * esto no me parece muy optimo, ya que si tuviera 1000 conocimientos, hariamos demasiados querys */

                    // Asi que la solucion es hacer un query manual
                    context.Database.ExecuteSqlCommand("DELETE FROM UsuarioConocimiento WHERE usuario_id = @usuario_id",
                                                       new SqlParameter("usuario_id", usuario.id));

                    // Agregamos los conocimientos
                    if (usuario.UsuarioConocimientos != null)
                    {
                        // Indicamos que el estado es del tipo insert
                        foreach (var c in usuario.UsuarioConocimientos)
                        {
                            context.Entry(c).State = EntityState.Added;
                        }
                    }

                    // Grabamos
                    context.SaveChanges();

                    rm.SetResponse(true);
                    if (file != null)
                    {
                        rm.href = "self";
                    }
                }
                catch (Exception e)
                {
                    ELog.Save(this, e);
                }
            }

            return(rm);
        }