Пример #1
0
 public ActionResult Convert(Turgunda2.Models.ConvertModel cm)
 {
     if (!string.IsNullOrEmpty(cm.entityid))
     {
         int index;
         if (Int32.TryParse(cm.entityid, out index))
         {
             string value = StaticObjects.SpecialGetEntityNameByIndex(index);
             cm.entityvalue = value;
         }
     }
     return View(cm);
 }
Пример #2
0
        /// <summary>
        /// EditForm вычисляет (строит, корректирует) модель записи и направляет ее на View построения фрагмента редактирования.
        /// Возможно несколько случаев запуска EditForm: 1) начальное построение объекта класса RecordModel, который представляет 
        /// собой формируемую копию имеющейся записи; 2) коррекция модели и построение формы; 3) фиксация результата в БД.
        /// Носителем состояния объекта являются публичные переменные, передаваемые от построения к построению. Признаком
        /// первого варианта является булевский признак firsttime, который потом "гасится" до конца итераций.  
        /// </summary>
        /// <param name="rmodel"></param>
        /// <returns></returns>
        //[HttpPost]
        public PartialViewResult EditForm(Turgunda2.Models.RecordModel rmodel)
        {
            string chk = Request.Params["chk"]; // проверка ОДНОЙ введенной связи
            string ok = Request.Params["ok"]; // фиксация изменений, запоминание в БД
            string canc = Request.Params["canc"]; // Отмена редактирования

            //string p_4 = Request["p_4"];
            //string p_4_ = Request.QueryString["p_4"];

            if (rmodel.firsttime)
            { // формирование формы редактирования
                rmodel.firsttime = false;
                bool replacemode = true;
                if (rmodel.eid == "create888")
                {
                    string eid = StaticObjects.AddInvRelation(rmodel.bid, rmodel.iprop, rmodel.etype, User.Identity.Name);
                    rmodel.eid = eid;
                    replacemode = false;
                }
                rmodel.LoadFromDb();
                rmodel.MakeLocalRecord();
                //XElement[] arr = rmodel.GetHeaderFlow().ToArray();
                //rmodel.MakeXResult();
                if (!replacemode) ViewData["insertnewrelation"] = rmodel.eid;
            }
            else if (canc != null)
            {
                rmodel.LoadFromDb();
                rmodel.MakeLocalRecord();
                return PartialView("EditFormFinal", rmodel);
            }
            else
            { // Собирание данных из реквеста
                XElement format = rmodel.CalculateFormat();
                XElement[] hrows = rmodel.GetHeaderFlow().ToArray();
                if (chk != null)
                {   // Проверка. Находим первый ряд такой, что: а) это прямое отношение, б) набран текст и есть тип, в) нет ссылки.
                    // Делаем поисковый запрос через SearchModel. Результаты SearchResult[] помещаем в ViewData под именем searchresults,
                    // а в ViewData["searchindex"] поместим индекс
                    var pair = hrows.Select((hr, ind) => new { hr = hr, ind = ind })
                        .FirstOrDefault(hrind =>
                        {
                            var hr = hrind.hr;
                            if (hr.Name != "d") return false;
                            var ind = hrind.ind;
                            if (string.IsNullOrEmpty(rmodel.GetFValue(ind)) || string.IsNullOrEmpty(rmodel.GetTValue(ind))) return false;
                            if (!string.IsNullOrEmpty(rmodel.GetPValue(ind))) return false;
                            return true;
                        });
                    if (pair != null)
                    {
                        int ind = pair.ind;
                        // Ничего проверять не буду
                        Turgunda2.Models.SearchModel sm = new Models.SearchModel(rmodel.GetFValue(ind), rmodel.GetTValue(ind));
                        ViewData["searchresults"] = sm.Results;
                        ViewData["searchindex"] = ind;
                    }
                }
                else if (ok != null)
                { // Запоминание
                    // Соберем получившуюся запись
                    XElement record = new XElement(sema2012m.ONames.GetXName(rmodel.etype),
                        new XAttribute(sema2012m.ONames.rdfabout, rmodel.eid),
                        hrows.Select((fd, ind) => new { fd = fd, ind = ind })
                        .Select(fdind =>
                        {
                            XElement fd = fdind.fd;
                            int ind = fdind.ind;
                            XName xprop = sema2012m.ONames.GetXName(fd.Attribute("prop").Value);
                            if (fd.Name == "f")
                            {
                                string value = rmodel.GetFValue(ind);
                                if (true || !string.IsNullOrEmpty(value)) // Эта проверка мешает(ла) уничтожению полей
                                {
                                    // Надо определить еще нужен ли язык и какой
                                    bool istext = Turgunda2.Models.Common.IsTextField(fd.Attribute("prop").Value);
                                    return new XElement(xprop, rmodel.GetFValue(ind),
                                        istext ? new XAttribute(sema2012m.ONames.xmllang, rmodel.lang) : null);
                                }
                            }
                            else if (fd.Name == "d")
                            {
                                string pvalue = rmodel.GetPValue(ind);
                                if (!string.IsNullOrEmpty(pvalue))
                                    return new XElement(xprop,
                                    new XAttribute(sema2012m.ONames.rdfresource, rmodel.GetPValue(ind)));
                            }
                            return (XElement)null;
                        }));
                    // Пошлем эту запись на изменение
                    StaticObjects.PutItemToDb(record, false, User.Identity.Name);
                    // Если эта запись является записью типа "DocumentPart", то фиксируем две величины:
                    // ссылку inDocument и идентификатор, имеющийся "за" этой ссылкой
                    if (record.Name.LocalName == "DocumentPart" && record.Name.NamespaceName == sema2012m.ONames.FOG)
                    {
                        var resource_el = record.Element(XName.Get("inDocument", sema2012m.ONames.FOG));
                        if (resource_el != null)
                        {
                            string pvalue = resource_el.Attribute(sema2012m.ONames.rdfresource).Value;
                            Session["inDocumentId"] = pvalue;
                            int ind = 0;
                            for (; ind < Turgunda2.Models.RecordModel.nfields; ind++)
                                if (rmodel.GetPValue(ind) == pvalue) break;
                            if (ind < Turgunda2.Models.RecordModel.nfields)
                            {
                                //var s1 = rmodel.GetFValue(ind);
                                //var s2 = rmodel.GetPValue(ind);
                                //var s3 = rmodel.GetTValue(ind);
                                //var s4 = rmodel.GetVValue(ind);

                                Session["inDocumentName"] = rmodel.GetVValue(ind);
                            }
                        }
                    }

                    return PartialView("EditFormFinal", rmodel);
                }
                else if (rmodel.command != null && rmodel.command == "SetVariant")
                { // Выбор варианта значения для связывания
                    string[] parts = rmodel.exchange.Split('|');
                    int ind = Int32.Parse(parts[0]);
                    string p_id = parts[1];
                    string p_name = parts[2];
                    rmodel.SetPValue(ind, p_id);
                    rmodel.SetVValue(ind, p_name);
                    rmodel.CalculateFormat();
                }
                else if (rmodel.command != null && rmodel.command == "SetVariantNew")
                { // Связывание с новым значением
                    string[] parts = rmodel.exchange.Split('|');
                    int ind = Int32.Parse(parts[0]);
                    string p_type = parts[1];
                    string p_name = parts[2];
                    string nid = StaticObjects.CreateNewItem(p_name, p_type, User.Identity.Name);
                    rmodel.SetPValue(ind, nid);
                    rmodel.SetVValue(ind, p_name);
                    rmodel.CalculateFormat();
                }
                else
                { // Остальное

                }
            }
            return PartialView("EditForm", rmodel);
        }
Пример #3
0
 //[HttpPost]
 public PartialViewResult SetVariant(Turgunda2.Models.RecordModel rmodel)
 {
     //Turgunda2.Models.RecordModel rmodel = new Models.RecordModel();
     //return PartialView("EditForm", rmodel);
     return EditForm(rmodel);
 }
Пример #4
0
 public ActionResult EntityPlaces(Turgunda2.Models.EntityPlacesModel epm)
 {
     if (epm.entityvalue != null)
     {
         epm.places = StaticObjects.SpecialEntityPlaces(epm.entityvalue).ToArray();
     }
     return View(epm);
 }