public string doDocumentSubmit(string accion, string parametro, string grupo, string email, string modeloID, int width, HttpRequest req) { string ret = ""; Grupo g = app.getGrupo(grupo); ModeloEvaluacion m = g.organizacion.getModeloEvaluacion(modeloID); Usuario u = g.getUsuarioHabilitado(email); lock (g) { Propuesta prop = prepararDocumento(g, email, modeloID, req); //proceso evento m.evaluacionSubmit(accion, parametro, prop, g, email); //las propuesta debe ir en orden de nivel //genro respuesta ret = m.toHTML(prop, g, email, width, ModeloEvaluacion.eModo.editar); //guarpo prevista para poder crearla luego Prevista prev = new Prevista(); prev.titulo = m.titulo; prev.propuestas.Clear(); prev.propuestas.Add(prop); u.prevista = prev; } return(ret); }
public string doOperativoAccion(string grupo, string email, string accion, HttpRequest req) { //devuelvo el bosque de aqui hacia abajo Grupo g = app.getGrupo(grupo); return(g.organizacion.doAccion(g, email, accion, req)); }
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(); }
public int cleanTime = 20; //quito arbol de memoria si no se toca en 20 minutos 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(); //proceso peticiones Grupo grupo; Arbol a; string ret = ""; if (actn != null) { switch (actn.ToLower()) { case "getquesopersonal": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { //pruebas //grupo.queso = new Queso(); //app.saveGrupos(); //devuelvo el queso List <Type> tipos = new List <Type>(); foreach (Modelo m in grupo.organizacion.getModelosDocumento()) { tipos.Add(m.GetType()); } foreach (ModeloEvaluacion m in grupo.organizacion.getModelosEvaluacion()) { tipos.Add(m.GetType()); } ret = Tools.toJson(grupo.queso.getQuesoPersonal(Request["email"]), tipos); } Response.Write(ret); app.addLog("getQuesoPersonal", Request.UserHostAddress, Request["grupo"], "", ""); break; case "evaluartema": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doEvaluarTema(Request["idTema"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "getquesoresultado": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(getQuesoResultado(Request["grupo"], int.Parse(Request["temaIndex"]), int.Parse(Request["preguntaIndex"]))); break; case "htmlevaluacion": //devuelvo las propuestas de toda la rama VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(HTMLEvaluacion(null, Request["modeloEvaluacion"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "prevista": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doPrevista(Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]), Request)); break; case "revisar": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doRevisar(Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); break; case "crearevaluacion": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doCrearEvaluacionUsuario(Request["modelo"], Request["grupo"], Request["email"], int.Parse(Request["width"]))); app.addLog("crearevaluacion", Request.UserHostAddress, Request["grupo"], Request["email"], "Nueva propuesta recibida"); break; case "crearevaluacionalpadre": Response.Write(crearEvaluacionAlPadre(Request["grupopadre"], Request["grupohijo"], Request["docnombre"], Request["doctitulo"], Request["docmodeloid"], Request.Files[0])); app.addLog("crearevaluacion", Request.UserHostAddress, Request["grupo"], Request["email"], "Nueva propuesta recibida"); break; case "crearevaluacionalhijo": Response.Write(crearEvaluacionAlHijo(Request["grupopadre"], Request["grupohijo"], Request["docnombre"], Request["doctitulo"], Request["docmodeloid"], Request.Files[0])); app.addLog("crearevaluacion", Request.UserHostAddress, Request["grupo"], Request["email"], "Nueva propuesta recibida"); break; case "evaluacionsubmit": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doDocumentSubmit(Request["accion"], Request["parametro"], Request["grupo"], Request["email"], Request["modelo"], int.Parse(Request["width"]), Request)); 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 bool doSimulacionLive0(Grupo g, float coopProb) //{ // bool ret = false; // lock (g) // { // Arbol a = g.arbol; // float action = coopProb + a.getNexRandom() - 0.5f; // if (action > 3f / 4f) // { // //cooperacion, muevo un voto del menor al mayor // Nodo mayor = a.getMayorAgregar(0); // Nodo menor = a.getMenorQuitar(mayor.id); // if (mayor != menor && menor.flores > 0 && !mayor.consensoAlcanzado) // { // Usuario u = a.quitarFlor(menor); // try { a.asignarflor(u, mayor); } // catch { } // if (mayor.consensoAlcanzado) ret = true; // } // } // else if (action > 2f / 4f) // { // //voto a minorias, muevo un voto del mayor al menor // var mayor = a.getMayorQuitar(0); // var menor = a.getMenorAgregar(mayor.id); // if (mayor != menor && mayor.flores > 0 && !menor.consensoAlcanzado) // { // Usuario u = a.quitarFlor(mayor); // try { a.asignarflor(u, menor); } // catch { } // if (menor.consensoAlcanzado) ret = true; // } // } // else if (action > 1f / 4f) // { // //quito alguna flor // var mayor = a.getMayorQuitar(0); // if (mayor.flores > 0) // { // a.quitarFlor(mayor); // } // } // else // { // //creo una rama nueva // //seleccion nodo al azar // List<Nodo> nodes = a.toList(); // Nodo selected = a.rndElement(nodes); // //agrego nuevo nodo // if (!selected.consensoAlcanzado && selected.nivel < 5) // { // //agrego nodo // //creo texto segun nivel y modelo de documento // Modelo m = g.organizacion.getModeloDocumento("nabu.plataforma.modelos.Accion"); //modelo de simulacion (Accion) // Propuesta prop = new Propuesta(); // prop.email = g.usuarios[0].email; // prop.modeloID = m.id; // prop.nivel = selected.nivel + 1; //esta propuesta es para el hijo que voy a crear // prop.nodoID = selected.id; // prop.niveles = 5; // prop.titulo = Tools.tr("Documento simulado", g.idioma); // prop.etiqueta = "."; // //lleno datos de prueba // foreach (Variable v in m.getVariables()) // { // if (v.id == "s.etiqueta") // prop.bag.Add("s.etiqueta", "Sim"); // else if (v.id == "s.titulo") // prop.bag.Add("s.titulo", Tools.tr("Documento simulado", g.idioma)); // else // prop.bag.Add(v.id, Tools.tr("Simulacion", g.idioma)); // } // //me aseguro que el usuario tenga flores o agrego otro // if (a.lastSimUsuario.flores.Count < 5) // a.lastSimUsuario.flores.Add(new Flor()); // else // { // //busco un usuario con flores // a.lastSimUsuario = a.getUsuarioConFloresDisponibles(); // } // if (a.lastSimUsuario == null) // { // Usuario u = new Usuario(); // u.nombre = "Sim" + g.usuarios.Count + 1; // u.email = "Sim" + g.usuarios.Count + 1; // u.flores.Add(new Flor()); // g.usuarios.Add(u); // a.lastSimUsuario = u; // } // prop.email = a.lastSimUsuario.email; // Nodo nuevo = a.addNodo(selected, prop); // if (selected.nivel == 1) // { // selected.nombre = "Sim" + selected.id; // } // } // } // } // return ret; //} string doPrevista(int id, string modeloID, string grupo, string email, int width, HttpRequest req) { string ret = ""; Grupo g = app.getGrupo(grupo); Modelo m = g.organizacion.getModeloDocumento(modeloID); lock (g) { List <Propuesta> props = prepararDocumento(g, email, modeloID, id, req); //genro prevista para segurarme que defina etiqueta y titulo ret = m.toHTML(props, g, email, width, Modelo.eModo.prevista); //las propuesta debe ir en orden de nivel //guarpo prevista para poder crearla luego if (props.Count > 0) { Usuario u = g.getUsuarioHabilitado(email); Prevista prev = new Prevista(); prev.etiqueta = m.etiqueta; prev.titulo = m.titulo; prev.propuestas.Clear(); foreach (Propuesta p in props) { if (p.esPrevista()) { prev.propuestas.Add(p); } } u.prevista = prev; } //else no ha escrito nada nuevo } return(ret); }
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(); }
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(); //envio algun mail si hay en cola app.mailBot.send(); //proceso peticiones Grupo grupo; Arbol a; string ret = ""; string msg; if (actn != null) { switch (actn.ToLower()) { case "cambiarclave": grupo = app.getGrupo(Request["grupo"]); lock (grupo) { grupo.ts = DateTime.Now; Usuario u = grupo.getUsuarioHabilitado(Request["email"]); if (u == null) { throw new appException(Tools.tr("El usuario no existe o no esta habilitado", grupo.idioma)); } else { if (u.clave != Request["claveActual"]) { throw new appException(Tools.tr("La clave actual no corresponde", grupo.idioma)); } else { if (Request["nuevaClave"] == "") { throw new appException(Tools.tr("La clave nueva no puede ser vacia", grupo.idioma)); } else { u.clave = Request["nuevaClave"]; //no devuelvo mensaje } } } } break; case "resumen": Response.Write(getResumen()); break; case "borrargrupo": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { Usuario u = grupo.getUsuario(Request["email"]); if (u != null && u.isAdmin) { borrarCarpeta(Server.MapPath("grupos/" + grupo.nombre)); } else { throw new Exception("Debe ser coordinador"); } } app.grupos.Remove(grupo); Response.Write("Grupo borrado"); break; case "borrarhijo": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { foreach (Hijo hijo in grupo.hijos) { if (hijo.URL == Request["hijoURL"] && hijo.nombre == Request["hijoNombre"]) { grupo.hijos.Remove(hijo); break; } } Response.Write(Tools.tr("Grupo hijo borrado", grupo.idioma)); } break; case "crearhijo": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { string hijoURL = Request["hijoURL"]; if (hijoURL.EndsWith("/")) { hijoURL = hijoURL.Substring(0, hijoURL.Length - 1); } if (hijoURL == "") { hijoURL = Request.UrlReferrer.AbsoluteUri.Substring(0, Request.UrlReferrer.AbsoluteUri.LastIndexOf("/")); } grupo.hijos.Add(new Hijo(hijoURL, Request["hijoNombre"])); Response.Write(Tools.tr("Nuevo grupo hijo agregado", grupo.idioma)); } break; case "getusuarios": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { a = grupo.arbol; grupo.ts = DateTime.Now; a.actualizarApoyos(); Response.Write(Tools.toJson(grupo.getUsuariosOrdenados())); } break; case "crearusuarios": grupo = app.getGrupo(Request["grupo"]); List <Usuario> usuarios = Tools.fromJson <List <Usuario> >(Request["usuarios"]); lock (grupo) { foreach (Usuario u in usuarios) { if (grupo.getUsuario(u.email) == null) { //este no existe, lo creo actualizarUsuario(u.nombre, u.email, u.clave, grupo.nombre, true, false, false, false, false, false, "", u.grupoDesde); } } Response.Write(Tools.tr("Usuarios creados desahibilitados", Request["grupo"], grupo.idioma)); } break; case "exception": app.addLog("client exception", Request.UserHostAddress, Request["grupo"], Request["email"], Request["flag"] + " -- " + Request["message"] + " -- " + Request["stack"]); break; case "sendmailwelcome": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { a = grupo.arbol; string url = Request.UrlReferrer.OriginalString.Substring(0, Request.UrlReferrer.OriginalString.LastIndexOf("/")); url += "/?grupo=" + Request["grupo"]; Usuario u = grupo.getUsuario(Request["usuarioemail"]); msg = Tools.sendMailWelcome(grupo, Request["usuarioemail"], u.clave, url, Server.MapPath("mails/modelos/" + grupo.idioma)); } Response.Write(msg); break; case "sendmail": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); string email = Request["usuarioemail"]; string body = Request["body"]; string subject = Request["subject"]; msg = Tools.sendMail(email, subject, body.Replace("\n", "<br>")); Response.Write(msg); break; case "sendmailalta": //peticion de alta al coordinador grupo = app.getGrupo(Request["grupo"]); lock (grupo) { Usuario u = grupo.getAdmin(); msg = Tools.sendMailAlta(grupo, u.email, Request["nombre"], Request["usuarioemail"], Server.MapPath("mails/modelos")); } Response.Write(msg); break; case "getconfig": //plataformas cliente reconocidas //Type=Chrome45;Name=Chrome;Version=45.0;Platform=WinNT;Cookies=True //Type=Safari5;Name=Safari;Version=5.1;Platform=Unknown;Cookies=True;width=1300;height=854 //Type=InternetExplorer11;Name=InternetExplorer;Version=11.0;Platform=WinNT;Cookies=True;width=784;height=537 Config cnf = getConfig(); cnf.browser = Request.Browser.Browser; cnf.type = Request.Browser.Type; cnf.version = Request.Browser.Version; cnf.width = int.Parse(Request["width"]); cnf.height = int.Parse(Request["height"]); ret = Tools.toJson(cnf); Response.Write(ret); app.addLog("getConfig", Request.UserHostAddress, "", "", getClientBrowser(Request) + ";width=" + Request["width"] + ";height=" + Request["height"]); break; //case "newgrupoadmins": // Grupo g = doNewGrupoFromPadre(Request["grupo"], Request["organizacion"], Request["admins"], Request["idioma"], Request["padreURL"], Request["idioma"]); // lock (app.grupos) // { // app.grupos.Add(g); // //guardo a disco // app.saveGrupos(); // } // Response.Write("Grupo creado"); // app.addLog("doNewGrupoFromPadre", Request.UserHostAddress, Request["grupo"], Request["email"], ""); // break; case "clearbosque": //subo buscando al padre //VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); if (grupo.padreNombre == "") { grupo.bosque = new Bosque(grupo); ret = grupo.bosque.toJson(); } else { //pido al padre ret = Tools.getHttp(grupo.padreURL + "/doMain.aspx?actn=clearBosque&grupo=" + grupo.padreNombre); } Response.Write(ret); break; case "getbosque": //subo buscando al padre //VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); ret = ""; grupo = app.getGrupo(Request["grupo"]); if (grupo.padreNombre == "") { //yo soy la cabeza del bosque try { if (grupo.bosque == null || DateTime.Now.Subtract(grupo.bosque.born).TotalHours >= 24) { grupo.bosque = new Bosque(grupo); } ret = grupo.bosque.toJson(); } catch (Exception ex) { throw new Exception("Comunidad [" + grupo.nombre + "]> " + ex.Message); } } else { //pido al padre try { ret = Tools.getHttp(grupo.padreURL + "/doMain.aspx?actn=getBosque&grupo=" + grupo.padreNombre); } catch (Exception ex) { throw new Exception("No se puede alcanzar la cabeza de la comunidad desde [" + grupo.nombre + "]> " + ex.Message); } } Response.Write(ret); break; case "getnodo": //devuelvo configuracion de hijos try { grupo = app.getGrupo(Request["grupo"]); Bosque.Nodo nodo = Bosque.crearNodo(grupo); ret = Tools.toJson(nodo); } catch (Exception ex) { throw new Exception("getNodo(" + Request["grupo"] + ") > " + ex.Message); } Response.Write(ret); break; case "organizacion": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(doOperativoAccion(Request["grupo"], Request["email"], Request["accion"], Request)); break; case "getoperativo": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Response.Write(getOperativo(Request["grupo"])); break; case "newgrupo": Grupo g = Grupo.newGrupo(Request["grupo"], Request["organizacion"], Request["nombreAdmin"], Request["email"], Request["clave"], Request["idioma"], Request.UrlReferrer.AbsoluteUri.Substring(0, Request.UrlReferrer.AbsoluteUri.LastIndexOf("/"))); lock (app.grupos) { app.grupos.Add(g); //guardo a disco app.saveGrupos(); } Response.Write(Tools.tr("Grupo creado", g.idioma)); app.addLog("newGrupo", Request.UserHostAddress, Request["grupo"], Request["email"], ""); break; case "actualizarusuario": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); Usuario u2 = actualizarUsuario(Server.HtmlEncode(Request["nuevonombre"]), Request["nuevoemail"], Request["nuevaclave"], Request["grupo"], Request["habilitado"] == "true", Request["readOnly"] == "true", Request["isAdmin"] == "true", Request["isSecretaria"] == "true", Request["isRepresentante"] == "true", Request["isFacilitador"] == "true", Request["funcion"], null); Response.Write(Tools.tr("Usuario [%1] actualizado", u2.email, grupo.idioma)); app.addLog("actualizarUsuario", Request.UserHostAddress, Request["grupo"], Request["email"], Request["nombre"]); break; case "removeusuario": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); Usuario u3 = removeUsuario(Request["usuarioemail"], Request["grupo"]); grupo = app.getGrupo(Request["grupo"]); Response.Write(Tools.tr("Usuario [%1] borrado", u3.email, grupo.idioma)); break; //case "getgrupos": // Response.Write(getGrupos()); // break; case "login": Response.Write(doLogin(Request["email"], Request["clave"], Request["grupo"])); break; case "borraralertas": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); lock (grupo) { Usuario u = grupo.getUsuario(Request["email"]); u.alertas.Clear(); } Response.End(); //no hay respuesta break; case "getgrupopersonal": VerificarUsuario(Request["grupo"], Request["email"], Request["clave"]); grupo = app.getGrupo(Request["grupo"]); GrupoPersonal gp = null; lock (grupo) { gp = grupo.getGrupoPersonal(Request["email"]); } Response.Write(Tools.toJson(gp)); break; case "dictionary": List <string> eskeys = new List <string>();; foreach (string item in Tools.dictionary) { if (item.Split('|')[1] == "es") { eskeys.Add(item.Split('|')[0]); } } eskeys.Sort(); ret = ""; ret += dictionaryFill("es", eskeys); ret += dictionaryFill("ct", eskeys); ret += dictionaryFill("en", eskeys); ret += dictionaryFill("fr", eskeys); 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 + " [" + Tools.errordebug + "]"); app.addLog("server exception", "", "", "", s); } Response.End(); }