Exemplo n.º 1
0
        /// <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);
        }