예제 #1
0
        // GET: TProblemas/Details/5
        public ActionResult Details(int?id)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Home"));
            }
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TProblema tProblema = db.TProblema.Find(id);

            if (tProblema == null)
            {
                return(HttpNotFound());
            }
            DirectoryInfo directory = new DirectoryInfo(@"E:\Files\" + tProblema.IdProblema);

            if (Directory.Exists(@"E:\Files\" + tProblema.IdProblema))
            {
                FileInfo[]    rgFiles = directory.GetFiles("*.*");
                List <string> items   = rgFiles.Select(file => file.Name).ToList();
                if (items.Count > 0)
                {
                    ViewBag.items = items;
                }
            }
            return(View(tProblema));
        }
예제 #2
0
        // GET: TProblemas/Edit/5
        public ActionResult Edit(int?id)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Home"));
            }
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TProblema tProblema = db.TProblema.Find(id);

            if (tProblema == null)
            {
                return(HttpNotFound());
            }
            DirectoryInfo directory = new DirectoryInfo(@"E:\Files\" + tProblema.IdProblema);

            if (Directory.Exists(@"E:\Files\" + tProblema.IdProblema))
            {
                FileInfo[]    rgFiles = directory.GetFiles("*.*");
                List <string> items   = new List <string>();
                foreach (var file in rgFiles)
                {
                    items.Add(file.Name);
                }
                if (items.Count > 0)
                {
                    ViewBag.items = items;
                }
            }



            var pp         = db.TProblemaParametro.Where(p => p.IdProblema == id).ToList();
            var parametros = db.TParametro.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();

            foreach (TProblemaParametro t in pp)
            {
                for (int j = 0; j < parametros.Count; j++)
                {
                    if (parametros[j].IdParametro == t.IdParametro)
                    {
                        parametros.RemoveAt(j);
                        j--;
                    }
                }
            }
            ViewBag.parametros = parametros;
            ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);



            return(View(tProblema));
        }
예제 #3
0
        public ActionResult DeleteConfirmed(int id)
        {
            TProblema tProblema = db.TProblema.Find(id);

            db.TProblemaParametro.RemoveRange(db.TProblemaParametro.Where(p => p.IdProblema == tProblema.IdProblema));
            db.TProblema.Remove(tProblema);
            db.SaveChanges();
            DirectoryInfo directory = new DirectoryInfo(@"E:\Files\" + tProblema.IdProblema);

            if (Directory.Exists(@"E:\Files\" + tProblema.IdProblema))
            {
                FileInfo[] dirs = directory.GetFiles("*.*");
                foreach (var x in dirs)
                {
                    System.IO.File.Delete(x.FullName);
                }
                directory.Delete();
            }

            return(RedirectToAction("Index", new { id = tProblema.IdUniverso, p = tProblema.usuario }));
        }
예제 #4
0
        public ActionResult Similares(Int32 id)
        {
            TProblema tProblema = db.TProblema.Find(id);

            ViewBag.titulo    = tProblema.titulo;
            ViewBag.enunciado = tProblema.Enunciado;
            List <TProblema> probs = db.TProblema.Include(t => t.TProblemaParametro).Where(p => p.ejemplo && p.IdUniverso == tProblema.IdUniverso).ToList();
            List <TProblema> fin   = new List <TProblema>();

            for (int i = 0; i < probs.Count; i++)
            {
                if (CompararParams(tProblema.TProblemaParametro.ToList(), probs[i].TProblemaParametro.ToList()))
                {
                    fin.Add(probs[i]);
                }
            }
            if (fin.Count > 0)
            {
                ViewBag.probs = fin;
            }

            return(View());
        }
예제 #5
0
        //Complejidad
        private void SetComplexity(TProblema t, ICollection <TProblemaParametro> p)
        {
            p = new List <TProblemaParametro>(p.OrderBy(a => a.Valor));

            if (p.Count == 1)
            {
                t.ComplejidadId = 1;
            }
            else
            {
                List <double> valores = new List <double>();
                foreach (var val in p)
                {
                    if (val.Valor != null)
                    {
                        valores.Add((double)val.Valor);
                    }
                }
                double     inc        = valores[0];
                double     final      = valores[valores.Count - 1];
                List <int> resultados = new List <int>();

                int       cont = 1;
                TUniverso u    = db.TUniverso.Find(t.IdUniverso);
                for (int i = 0; i < u.CantNiveles; i++)
                {
                    object[] intervalo = Intervals(cont, final, inc);//obtener el nivel donde esta ubicado este valor.
                    foreach (var par in p)
                    {
                        if (Ubicar(intervalo, par)) //saber si en que posicion del intervalo esta el parametro
                        {
                            resultados.Add(cont);   // Agregarlo a la lista de resultados
                        }
                    }
                    cont++;
                }
                resultados = new List <int>(resultados.OrderByDescending(i => i));
                List <object[]> fin = new List <object[]>();
                for (int i = 0; i < resultados.Count; i++)
                {
                    List <int> repeticiones = new List <int>();
                    int        n            = resultados[0];
                    repeticiones.Add(n);
                    for (int j = 1; j < resultados.Count; j++)
                    {
                        if (n == resultados[j])
                        {
                            repeticiones.Add(n);
                            resultados.RemoveAt(j);
                            j--;
                        }
                    }
                    resultados.RemoveAt(0);
                    i--;
                    object[] o = new object[2];
                    o[0] = n;
                    o[1] = repeticiones.Count;
                    fin.Add(o);
                }//Obtener repeticiones del parametro en un intervalo
                fin = new List <object[]>(fin.OrderByDescending(k => k[1]));
                if (Iguales(fin))//Si las cantidades son iguales
                {
                    //Teoria de Desicion Laplace
                    t.ComplejidadId = int.Parse(fin[fin.Count - 1][0].ToString());
                }
                else
                {
                    if (fin.Count == 2)
                    {
                        t.ComplejidadId = int.Parse(fin[1][0].ToString());
                    }
                    else
                    {
                        t.ComplejidadId = int.Parse(fin[0][0].ToString());
                    }
                }
            }
        }
예제 #6
0
        public ActionResult Edit([Bind(Include = "IdProblema,titulo,Enunciado,Solucion,IdUniverso,ejemplo,ComplejidadId,usuario")] TProblema tProblema, string json, HttpPostedFileBase file,
                                 HttpPostedFileBase imagen, HttpPostedFileBase documento)
        {
            if (ModelState.IsValid)
            {
                var probs =
                    db.TProblema.Where(p => p.IdUniverso == tProblema.IdUniverso && p.IdProblema != tProblema.IdProblema && p.titulo == tProblema.titulo)
                    .ToList();
                if (probs.Count > 0)
                {
                    return(RedirectToAction("Index", new { id = tProblema.IdUniverso, p = tProblema.usuario, e = tProblema.titulo }));
                }
                db.Entry(tProblema).State = EntityState.Modified;
                db.TProblemaParametro.RemoveRange(db.TProblemaParametro.Where(p => p.IdProblema == tProblema.IdProblema));
                List <TProblemaParametro> t = ParseParametros(json);

                if (t.Count == 0)
                {
                    return(RedirectToAction("Index", new { id = tProblema.IdUniverso, p = tProblema.usuario, e = "El problema debe tener un parametro o mas" }));
                }
                if (t.Count > 0)
                {
                    tProblema.TProblemaParametro = t;
                    SetComplexity(tProblema, tProblema.TProblemaParametro);
                }

                db.SaveChanges();

                DirectorySecurity s          = new DirectorySecurity("E:", AccessControlSections.Owner);
                DirectoryInfo     directory1 = new DirectoryInfo("E:");
                directory1.SetAccessControl(s);
                if (Directory.Exists(@"E\Files") == false)
                {
                    Directory.CreateDirectory(directory1.Root.Name + @"\Files");
                }
                Directory.CreateDirectory(directory1.Root.Name + @"Files\" + tProblema.IdProblema);
                if (file != null)
                {
                    string ext = SaberExt(file.FileName);
                    if (CompararCadenas(ext, "avi") || CompararCadenas(ext, "mp4"))
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        var path     =
                            Path.Combine(
                                directory1.Root.Name + @"Files\" + tProblema.IdProblema,
                                fileName);
                        file.SaveAs(path);
                    }
                }
                if (imagen != null)
                {
                    string extimagen = SaberExt(imagen.FileName);
                    if (CompararCadenas(extimagen, "jpg") || CompararCadenas(extimagen, "png") || CompararCadenas(extimagen, "jpeg"))
                    {
                        var fileName = Path.GetFileName(imagen.FileName);
                        var path     = Path.Combine(directory1.Root.Name + @"Files\" + tProblema.IdProblema, fileName);
                        imagen.SaveAs(path);
                    }
                }

                if (documento != null)
                {
                    string extdoc = SaberExt(documento.FileName);
                    if (extdoc.Contains("xls") || extdoc.Contains("doc") || CompararCadenas(extdoc, "pdf"))
                    {
                        var fileName = Path.GetFileName(documento.FileName);
                        var path     = Path.Combine(directory1.Root.Name + @"Files\" + tProblema.IdProblema, fileName);
                        documento.SaveAs(path);
                    }
                }


                return(RedirectToAction("Index", new{ id = tProblema.IdUniverso, p = tProblema.usuario }));
            }



            ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);
            return(View(tProblema));
        }
예제 #7
0
        public ActionResult Create([Bind(Include = "IdProblema,titulo,Enunciado,Solucion,IdUniverso,ejemplo,ComplejidadId,usuario")] TProblema tProblema, string json, HttpPostedFileBase file,
                                   HttpPostedFileBase imagen, HttpPostedFileBase documento)
        {
            List <TParametro> parametros;
            List <TUniverso>  u;
            bool band = false;

            if (ModelState.IsValid)
            {
                try
                {
                    var x1 = db.TProblema.Where(
                        param => param.titulo == tProblema.titulo && param.IdUniverso == tProblema.IdUniverso).ToList();
                    if (x1.Count > 0)
                    {
                        ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);
                        ViewBag.error      = "Ya existe un problema con el mismo titulo en este Universo";
                        parametros         = db.TParametro.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                        ViewBag.parametros = parametros;
                        u                  = db.TUniverso.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                        ViewBag.nomb       = u[0].NombUniverso;
                        ViewBag.IdUniverso = tProblema.IdUniverso;
                        return(View(tProblema));
                    }

                    if (tProblema.ejemplo == false)
                    {
                        tProblema.Solucion = null;
                    }

                    List <TProblemaParametro> t = ParseParametros(json);
                    if (t.Count == 0)
                    {
                        ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);
                        ViewBag.error      = "Agregue al menos un parametro para el problema";
                        parametros         = db.TParametro.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                        ViewBag.parametros = parametros;
                        u                  = db.TUniverso.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                        ViewBag.nomb       = u[0].NombUniverso;
                        ViewBag.IdUniverso = tProblema.IdUniverso;
                        return(View(tProblema));
                    }
                    if (t.Count > 0)
                    {
                        tProblema.TProblemaParametro = t;
                    }

                    SetComplexity(tProblema, tProblema.TProblemaParametro);
                    db.TProblema.Add(tProblema);
                    int x = db.SaveChanges();
                    band = true;
                }
                catch (Exception E)
                {
                    ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);

                    ViewBag.error      = "Ha ocurrido un error cuando se creaba el problema. Revise los campos";
                    parametros         = db.TParametro.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                    ViewBag.parametros = parametros;
                    u                  = db.TUniverso.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
                    ViewBag.nomb       = u[0].NombUniverso;
                    ViewBag.IdUniverso = tProblema.IdUniverso;
                    return(View(tProblema));
                }

                if (band == true)
                {
                    DirectorySecurity s         = new DirectorySecurity("E:", AccessControlSections.Owner);
                    DirectoryInfo     directory = new DirectoryInfo("E:");
                    directory.SetAccessControl(s);
                    if (Directory.Exists(@"E\Files") == false)
                    {
                        Directory.CreateDirectory(directory.Root.Name + @"\Files");
                    }
                    Directory.CreateDirectory(directory.Root.Name + @"Files\" + tProblema.IdProblema);

                    if (file != null)
                    {
                        string ext = SaberExt(file.FileName);
                        if (CompararCadenas(ext, "avi") || CompararCadenas(ext, "mp4"))
                        {
                            var fileName = Path.GetFileName(file.FileName);
                            var path     =
                                Path.Combine(
                                    directory.Root.Name + @"Files\" + tProblema.IdProblema,
                                    fileName);
                            file.SaveAs(path);
                        }
                    }
                    if (imagen != null)
                    {
                        string extimagen = SaberExt(imagen.FileName);
                        if (CompararCadenas(extimagen, "jpg") || CompararCadenas(extimagen, "png") || CompararCadenas(extimagen, "jpeg"))
                        {
                            var fileName = Path.GetFileName(imagen.FileName);
                            var path     = Path.Combine(directory.Root.Name + @"Files\" + tProblema.IdProblema, fileName);
                            imagen.SaveAs(path);
                        }
                    }

                    if (documento != null)
                    {
                        string extdoc = SaberExt(documento.FileName);
                        if (extdoc.Contains("xls") || extdoc.Contains("doc") || CompararCadenas(extdoc, "pdf"))
                        {
                            var fileName = Path.GetFileName(documento.FileName);
                            var path     = Path.Combine(directory.Root.Name + @"Files\" + tProblema.IdProblema, fileName);
                            documento.SaveAs(path);
                        }
                    }
                }

                return(RedirectToAction("Index", new { id = tProblema.IdUniverso, p = tProblema.usuario }));
            }

            ViewBag.IdUniverso = new SelectList(db.TUniverso, "IdUniverso", "NombUniverso", tProblema.IdUniverso);

            parametros         = db.TParametro.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
            ViewBag.parametros = parametros;
            u            = db.TUniverso.Where(param => param.IdUniverso == tProblema.IdUniverso).ToList();
            ViewBag.nomb = u[0].NombUniverso;
            return(View(tProblema));
        }