string HTMLEvaluacion(Propuesta prop, string modeloID, string grupo, string email, int width) { string ret = ""; Grupo g = app.getGrupo(grupo); lock (g) { Arbol a = g.arbol; g.ts = DateTime.Now; ModeloEvaluacion m = g.organizacion.getModeloEvaluacion(modeloID); //limpio valores antiguos Usuario u = g.getUsuarioHabilitado(email); if (u.prevista != null) { u.prevista = null; } ret = m.toHTML(prop, g, email, width, ModeloEvaluacion.eModo.editar); //las propuesta debe ir en orden de nivel } return(ret); }
string HTMLDocumento(int id, string modeloID, string grupo, string email, int width) { string ret = ""; List <Propuesta> l = new List <Propuesta>(); Grupo g = app.getGrupo(grupo); lock (g) { Arbol a = g.arbol; g.ts = DateTime.Now; foreach (Nodo n in a.getPath(id)) { Propuesta op = a.getPropuesta(n); //comparo textox con hermanos y resalto palarbas nuevas if (op != null) { l.Add(op); } } Modelo m = g.organizacion.getModeloDocumento(modeloID); ret = m.toHTML(l, g, email, width, Modelo.eModo.editar); //las propuesta debe ir en orden de nivel } return(ret); }
string doRevisar(int id, string modeloID, string grupo, string email, int width) { string ret = ""; List <Propuesta> props = new List <Propuesta>(); Grupo g = app.getGrupo(grupo); Modelo m = g.organizacion.getModeloDocumento(modeloID); lock (g) { //preparo propuestas de nodos ancestros Arbol a = g.arbol; List <Nodo> path = a.getPath(id); g.ts = DateTime.Now; foreach (Nodo n in path) { Propuesta op = a.getPropuesta(n); //comparo textox con hermanos y resalto palarbas nuevas if (n.nivel > 0 && op != null) { props.Add(op); } } //agrego las propuestas de prevista Usuario u = g.getUsuario(email); if (u.prevista != null) { foreach (Propuesta p in u.prevista.propuestas) { props.Add(p); } } //genro revision ret = m.toHTML(props, g, email, width, Modelo.eModo.revisar); //las propuesta debe ir en orden de nivel } return(ret); }
protected void Page_Load(object sender, EventArgs e) { string actn = Request["actn"]; //verifico lista global de arboles if (Application["aplicacion"] == null) { Application.Lock(); Application["aplicacion"] = new Aplicacion(Server, Request); Application.UnLock(); } app = (Aplicacion)Application["aplicacion"]; Tools.startupPath = Server.MapPath(""); try { //limpio flores caducadas periodicamente verifyFloresCaducadas(); //proceso peticiones Grupo grupo; Arbol a; string ret = ""; string msg; if (actn != null) { switch (actn.ToLower()) { case "docomentar": //devuelvo las propuestas de toda la rama Response.Write(doComentar(int.Parse(Request["id"]), Request["grupo"], Request["email"], Request["comentario"])); app.addLog("doComentar", Request.UserHostAddress, Request["grupo"], "", Request["comentario"]); break; //case "getpropuestasresaltadas": // //devuelvo las propuestas de toda la rama // Response.Write(getPropuestasResaltadas(int.Parse(Request["id"]), Request["grupo"])); // break; //case "getpropuestas": // //devuelvo las propuestas de toda la rama // Response.Write(getPropuestas(int.Parse(Request["id"]), Request["grupo"])); // break; case "htmldocumento": //devuelvo las propuestas de toda la rama Response.Write(HTMLDocumento(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "htmlpropuesta": //devuelvo las propuestas de toda la rama Response.Write(HTMLPropuesta(int.Parse(Request["id"]), Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "getarbolpersonal": grupo = app.getGrupo(Request["grupo"]); lock (grupo) { //devuelvo el arbolPersonal grupo.ts = DateTime.Now; ret = Tools.toJson(grupo.arbol.getArbolPersonal(Request["email"])); } Response.Write(ret); break; case "variante": Response.Write(doVariante(int.Parse(Request["id"]), Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "prevista": Response.Write(doPrevista(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]), Request)); break; case "revisar": Response.Write(doRevisar(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "proponer": Response.Write(doProponer(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"])); app.addLog("proponer", Request.UserHostAddress, Request["grupo"], Request["email"], "Nueva propuesta recibida"); break; case "seguimiento": Response.Write(doSeguimiento(int.Parse(Request["docID"]), Request["grupo"], int.Parse(Request["width"]))); break; case "toggleflor": Response.Write(doToggleFlor(Request["email"], int.Parse(Request["id"]), float.Parse(Request["x"]), Request["grupo"])); app.addLog("toggleFlor", Request.UserHostAddress, Request["grupo"], Request["email"], "Cambio de voto"); break; case "updatearbol": a = updateArbol(Request["grupo"], int.Parse(Request["cantidadFlores"]), float.Parse(Request["minSiPc"]), float.Parse(Request["maxNoPc"])); Response.Write("Arbol actualizado"); break; //case "download": // Response.ContentType = "application/force-download"; // grupo = app.getGrupo(Request["grupo"]); // a = grupo.arbol; // lock (a) // { // Nodo n = a.getNodo(int.Parse(Request["id"])); // Response.AddHeader("Content-Disposition", "Attachment;filename=" + a.nombre + "_" + n.nombre + ".txt"); // } // Response.Write(download(int.Parse(Request["id"]), Request["grupo"])); // app.addLog("download", Request.UserHostAddress, Request["grupo"], "", "nodo=" + Request["id"]); // break; case "simulacionlive": string separador = (0.0f).ToString("0.0").Substring(1,1); float coopProb = float.Parse(Request["coopProb"].Replace(".",separador)); string x = Request["x"]; //guardo las coordenadas x if (x != "") { grupo = app.getGrupo(Request["grupo"]); lock (grupo) { a = grupo.arbol; foreach (string s in x.Split(',')) { Nodo n = a.getNodo(int.Parse(s.Split('=')[0])); n.x = float.Parse(s.Split('=')[1]); } } } //live bool consensoAlcanzado = false; grupo = app.getGrupo(Request["grupo"]); lock (grupo) { for (int pasos = 0; pasos < 10 && !consensoAlcanzado; pasos++) consensoAlcanzado = consensoAlcanzado || doSimulacionLive(grupo, coopProb); } Response.Write("{\"stop\": " + (consensoAlcanzado ? "true" : "false") + ", \"arbolPersonal\":" + Tools.toJson(grupo.arbol.getArbolPersonal("Prueba")) + "}"); break; case "crearsimulacion": Grupo g = new Grupo(); g.nombre = getSimName(); g.path = Server.MapPath("grupos/" + g.nombre); g.URL = Request.UrlReferrer.AbsoluteUri.Substring(0, Request.UrlReferrer.AbsoluteUri.LastIndexOf("/")); g.objetivo = "simulacion"; a = new Arbol(); a.nombre = g.nombre; a.simulacion = true; a.raiz = new Nodo(); a.raiz.nombre = "Sim"; a.grupo = g; g.arbol = a; lock (app.grupos) { app.grupos.Add(g); } a.minSiPc = 60; a.maxNoPc = 50; //usuario de prueba Usuario u1 = new Usuario(); u1.nombre = "Prueba"; u1.email = "Prueba"; g.usuarios.Add(u1); a.lastSimUsuario = u1; //escribo respuesta List<Type> tipos = new List<Type>(); foreach (Modelo m in Modelo.getModelos()) { tipos.Add(m.GetType()); } Response.Write("{\"arbolPersonal\": " + Tools.toJson(a.getArbolPersonal("Prueba")) + ",\"modelos\":" + Tools.toJson(a.modelos, tipos) + "}"); app.addLog("crearSimulacion", Request.UserHostAddress, "", "", "Simulacion creada"); break; default: throw new appException("Peticion no reconocida"); } } else throw new appException("Peticion no reconocida"); } catch (appException ex) { Response.Write("Error=" + ex.Message); } catch (Exception ex) { string s = "Actn:" + actn.ToLower() + "<br>"; s += "Message:" + ex.Message + "<br>"; s += "REMOTE_ADDR:" + Request.ServerVariables["REMOTE_ADDR"] + "<br>"; s += "Querystring:" + Request.QueryString.ToString() + "<br>"; s += "Form:" + Request.Form.ToString() + "<br>"; s += "Stack:" + ex.StackTrace; Response.Write("Error=" + ex.Message); app.addLog("server exception", "", "", "", s); } Response.End(); }
protected void Page_Load(object sender, EventArgs e) { string actn = Request["actn"]; Application.Lock(); if (Application["aplicacion"] == null) { Application["aplicacion"] = new Aplicacion(Server, Request); } app = (Aplicacion)Application["aplicacion"]; Application.UnLock(); Tools.startupPath = Server.MapPath(""); Tools.server = Server; try { //guardo lista de arboles periodicamente app.verifySave(); //limpio flores caducadas periodicamente de todos los usuarios //verifyFloresCaducadas(); se verifica al crear al arbol personal //proceso peticiones Grupo grupo; Arbol a; string ret = ""; if (actn != null) { switch (actn.ToLower()) { case "docomentar": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doComentar(int.Parse(Request["id"]), Request["grupo"], Request["email"], Request["comentario"], Request["objecion"] == "true")); app.addLog("doComentar", Request.UserHostAddress, Request["grupo"], "", Request["comentario"]); break; //case "crearacta": // //devuelvo las propuestas de toda la rama // VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); // Response.Write(crearActa(Request["grupo"], Request["email"], Request)); // break; case "htmldocumento": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(HTMLDocumento(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "htmlpropuesta": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(HTMLPropuesta(int.Parse(Request["id"]), Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "getarbolpersonal": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { //devuelvo el arbolPersonal grupo.ts = DateTime.Now; ret = Tools.toJson(grupo.arbol.getArbolPersonal(Request["email"])); } Response.Write(ret); break; case "variante": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doVariante(int.Parse(Request["id"]), Request["modeloID"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "prevista": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doPrevista(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]), Request)); break; case "revisar": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doRevisar(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "proponer": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doProponer(int.Parse(Request["id"]), Request["modelo"], Request["grupo"], Request["email"])); app.addLog("proponer", Request.UserHostAddress, Request["grupo"], Request["email"], "Nueva propuesta recibida"); break; case "seguimiento": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doSeguimiento(int.Parse(Request["docID"]), Request["grupo"], int.Parse(Request["width"]))); break; case "toggleflor": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doToggleFlor(Request["email"], int.Parse(Request["id"]), float.Parse(Request["x"]), Request["grupo"])); app.addLog("toggleFlor", Request.UserHostAddress, Request["grupo"], Request["email"], "Cambio de voto"); break; case "updatearbol": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); a = updateArbol(Request["grupo"], int.Parse(Request["cantidadFlores"]), float.Parse(Request["minSiPc"]), float.Parse(Request["maxNoPc"]), Request["padreURL"], Request["padreNombre"], Request["idioma"]); Response.Write("Arbol actualizado"); break; case "documentsubmit": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doDocumentSubmit(Request["accion"], Request["parametro"], Request["grupo"], Request["email"], Request["modelo"], int.Parse(Request["id"]), int.Parse(Request["width"]), Request)); break; case "crearsimulacion": //creo grupo Grupo g = new Grupo(); g.nombre = getSimName(); g.path = Server.MapPath("grupos/" + g.nombre); g.URL = Request.UrlReferrer.AbsoluteUri.Substring(0, Request.UrlReferrer.AbsoluteUri.LastIndexOf("/")); g.objetivo = "simulacion"; //organizacion g.organizacion = new nabu.organizaciones.Plataforma(); //arbol a = new Arbol(); a.nombre = g.nombre; a.simulacion = true; a.raiz = new Nodo(); a.raiz.nombre = "Sim"; a.grupo = g; g.arbol = a; a.minSiPc = 100; a.maxNoPc = 0; //usuarios de prueba for (int i = 0; i < 50; i++) { Usuario u = new Usuario(); u.nombre = "u" + i; u.email = "u" + i; for (int q = 0; q < 5; q++) { u.flores.Add(new Flor()); } g.usuarios.Add(u); } //escribo respuesta List <Type> tipos = new List <Type>(); foreach (Modelo m in g.organizacion.getModelosDocumento()) { tipos.Add(m.GetType()); } foreach (ModeloEvaluacion m in g.organizacion.getModelosEvaluacion()) { tipos.Add(m.GetType()); } ret = "{\"arbolPersonal\": " + Tools.toJson(a.getArbolPersonal("u1")) + ","; ret += "\"modelos\":" + Tools.toJson(g.organizacion.getModelosDocumento(), tipos) + ","; ret += "\"modelosEvaluacion\":" + Tools.toJson(g.organizacion.getModelosEvaluacion(), tipos) + "}"; lock (app.grupos) { app.grupos.Add(g); } Response.Write(ret); app.addLog("crearSimulacion", Request.UserHostAddress, "", "", "Simulacion creada"); break; case "simulacionnuevodebate": grupo = app.getGrupo(Request["grupo"]); lock (grupo) { Usuario u = null; //busco un usuario con flores foreach (Usuario u2 in grupo.usuarios) { if (u2.floresDisponibles().Count > 0) { u = u2; break; } } //agergo nodos iniciales if (u != null) { //el nombre de este nodo es la cantidad de dias Nodo NuevoTema = simAgregarNodo(grupo, u, grupo.arbol.raiz, 0); //introduccion al debate //el nombre de este nodo es la generacion Nodo n1 = simAgregarNodo(grupo, u, NuevoTema, 1); } ret = "{\"stop\": false, \"arbolPersonal\":" + Tools.toJson(grupo.arbol.getArbolPersonal("u1")) + "}"; } Response.Write(ret); break; case "simulacionlive": string x = Request["x"]; grupo = app.getGrupo(Request["grupo"]); lock (grupo) { //guardo x //&x=38=43,42=111,43=146 if (x != "") { a = grupo.arbol; foreach (string s in x.Split(',')) { Nodo n = a.getNodo(int.Parse(s.Split('=')[0])); if (n != null) { n.x = float.Parse(s.Split('=')[1]); } } } //para cada debate live int i = 0; while (i < grupo.arbol.raiz.children.Count) { Nodo n = grupo.arbol.raiz.children[i]; int dias = int.Parse(n.nombre); simDebateLive(grupo, n, dias); n.nombre = (dias + 1).ToString(); i++; } ret = "{\"stop\": false, \"arbolPersonal\":" + Tools.toJson(grupo.arbol.getArbolPersonal("u1")) + "}"; } Response.Write(ret); break; default: throw new appException("Peticion no reconocida"); } } else { throw new appException("Peticion no reconocida"); } } catch (appException ex) { Response.Write("Error=" + ex.Message); } catch (Exception ex) { string s = "Actn:" + actn.ToLower() + "<br>"; s += "Message:" + ex.Message + "<br>"; s += "REMOTE_ADDR:" + Request.ServerVariables["REMOTE_ADDR"] + "<br>"; s += "Querystring:" + Request.QueryString.ToString() + "<br>"; s += "Form:" + Request.Form.ToString() + "<br>"; s += "Stack:" + ex.StackTrace; Response.Write("Error=" + ex.Message); app.addLog("server exception", "", "", "", s); } Response.End(); }
public static Grupo newGrupo(string grupo, string organizacion, string nombreAdmin, string email, string clave, string idioma, string URL) { if (grupo == "") { throw new appException("Nombre de grupo no puede ser vacio"); } if (email == "") { throw new appException("Email no puede ser vacio"); } if (clave == "") { throw new appException("Clave no puede ser vacio"); } if (Tools.HtmlEncode(grupo) != grupo) { throw new appException("Nombre de grupo inválido. Evite acentos y caracteres especiales"); } if (Tools.HtmlEncode(email) != email) { throw new appException("Email inválido. Evite acentos y caracteres especiales"); } if (Tools.HtmlEncode(clave) != clave) { throw new appException("Clave inválida. Evite acentos y caracteres especiales"); } //veo que no exista ya System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Tools.MapPath("grupos")); foreach (System.IO.DirectoryInfo fi in di.GetDirectories()) { if (fi.Name == grupo) { //ya existe throw new appException("El grupo ya existe"); } } //creo Grupo g = new Grupo(); g.nombre = grupo; g.path = Tools.MapPath("grupos/" + g.nombre); g.URL = URL; g.idioma = idioma; //organizacion switch (organizacion) { case "Plataforma": g.organizacion = new organizaciones.Plataforma(); break; case "Cooperativa": g.organizacion = new organizaciones.Cooperativa(); break; case "Colegio": g.organizacion = new organizaciones.Colegio(); break; default: throw new Exception("Modelo organizativo [" + organizacion + "] no existe"); } Arbol a = new Arbol(); a.nombre = grupo; a.raiz = new Nodo(); a.raiz.nombre = Tools.HtmlEncode(a.nombre); a.grupo = g; //referencia ciclica, no se pude serializar g.arbol = a; Queso q = new Queso(); q.grupo = g; //referencia ciclica, no se pude serializar g.queso = q; //admin Usuario u = new Usuario(a.cantidadFlores); u.nombre = Tools.HtmlEncode(nombreAdmin); u.email = email; u.clave = clave; u.isAdmin = true; g.usuarios.Add(u); return(g); }