/// <summary> /// This method saves a new list in the bd if not id is gived, or update an existing list if is gived /// </summary> /// <param name="formData"></param> /// <param name="id"></param> /// <author> /// Luis Gonzalo Quijada Romero /// </author> /// <returns> /// Returns the saved document's id /// </returns> public String saveList(FormCollection formData) { String dataPermissions = Session["Permissions"].ToString(); String dataPermissionsClient = Session["PermissionsClient"].ToString(); bool access = false; bool accessClient = false; // access = getpermissions("users", "r"); access = validatepermissions.getpermissions("lists", "u", dataPermissions); accessClient = validatepermissions.getpermissions("lists", "u", dataPermissionsClient); if (access == true && accessClient == true) { if (this.Request.IsAjaxRequest()) { try //trying to unserialize the formcollection gived { formData = CustomForm.unserialize(formData); } catch (Exception e) { return(null); } String listID = (formData["listID"] == "null") ? null : formData["listID"]; //is this an insert or an update?, converting null in javascript to null in c# if (listID != null) { char[] delimiters = { ',', '[', ']' }; string[] changedElements = formData["changedElements"].Split(delimiters); foreach (string element in changedElements) { removeElement(formData["listID"], element); } } BsonDocument list = listTable.getRow(listID); //validating listName if (!Regex.IsMatch(formData["listName"], "[A-Za-z_]+[A-Za-z0-9.-_]*")) { return("El nombre de la lista tiene un formato incorrecto"); } //validating listDisplayName else if (!Regex.IsMatch(formData["listDisplayName"], "")) { return("El nombre para mostrar de la lista tiene un formato incorrecto"); } else if (listNameUsed(formData["listName"]) && (list == null || formData["listName"] != list.GetElement("name").Value.ToString())) { return("El nombre de la lista ya está siendo utilizado"); } JObject jsonData = new JObject(); try { jsonData.Add("name", formData["listName"]); jsonData.Add("displayName", formData["listDisplayName"]); } catch (Exception e) { return(null); } try //trying to set the creator's id { if (listID == null) { jsonData.Add("creatorId", this.Session["_id"].ToString()); } else { try { jsonData.Add("creatorId", list["creatorId"].ToString()); } catch (Exception e) { /*Ignored*/ } } } catch (Exception e) { /*Ignored*/ } /*setting dependency*/ try { String dependency = formData["dependency"]; //checking dependency of this list BsonDocument dependencyDocument = BsonDocument.Parse(dependency); if (listHasElement(dependencyDocument.GetElement("listID").Value.ToString(), dependencyDocument.GetElement("elementName").Value.ToString())) { jsonData.Add("dependency", formData["dependency"]); } } catch (Exception e) { /*Ignored*/ } /*** Creating elements ***/ JObject listElements = new JObject(); JArray unorderElements = new JArray(); try //trying to create the unorder elements { BsonDocument uoElements = BsonDocument.Parse(formData["unorderElements"]); foreach (BsonElement element in uoElements) { if (Regex.IsMatch(element.Name.ToString(), "[A-Za-z0-9.-_]+") && Regex.IsMatch(element.Value.ToString(), "[A-Za-z0-9._-áéíóúÁÉÍÓÚñÑ]*")) { JObject newElement = new JObject(); newElement.Add(element.Name.ToString(), element.Value.ToString()); unorderElements.Add(newElement); } } if (listID != null) { BsonDocument oldElements = list.GetElement("elements").Value.ToBsonDocument(); foreach (BsonDocument document in (BsonArray)oldElements.GetElement("unorder").Value) { BsonElement element = document.First(); JObject newElement = new JObject(); newElement.Add(element.Name.ToString(), element.Value.ToString()); unorderElements.Add(newElement); } } } catch (Exception e) { /*Ignored*/ } listElements.Add("unorder", unorderElements); JArray orderElements = new JArray(); try //trying to create the unorder elements { BsonDocument uoElements = BsonDocument.Parse(formData["orderElements"]); int index = 0; foreach (BsonElement element in uoElements) { if (Regex.IsMatch(element.Name.ToString(), "[A-Za-z0-9.-_]+") && Regex.IsMatch(element.Value.ToString(), "[A-Za-z0-9._-áéíóúÁÉÍÓÚñÑ]*")) { JObject orderElement = new JObject(); orderElement.Add(element.Name.ToString(), element.Value.ToString()); orderElement.Add("position", index); orderElements.Add(orderElement); ++index; } } } catch (Exception e) { /*Ignored*/ } listElements.Add("order", orderElements); jsonData.Add("elements", listElements); String jsonString = JsonConvert.SerializeObject(jsonData); String savedID = listTable.saveRow(jsonString, listID); _logTable.SaveLog(Session["_id"].ToString(), "Listas", "Insert: guardar lista", "List", DateTime.Now.ToString()); jsonData.Add("client-name", "cinepolis"); jsonData.Add("innerCollection", "list"); jsonData.Add("auxId", listID); jsonData.Add("idInClient", savedID); jsonString = JsonConvert.SerializeObject(jsonData); jsonString = jsonString.Replace("\"", "'"); String jsonAgent = "{'action':'spreadToFather','collection':'ObjectReference','document':" + jsonString + ",'Source':'cinepolis'}"; // initAgent(); // agent.sendMessage(jsonAgent); return(savedID); } return(null); } return(null); }