コード例 #1
0
        public IActionResult RefQuery(string query, string listId, string allowedVsn)
        {
            var         types         = listId.Split('_').Select(cn => ContentTypeHierarchy.GetContentType(cn)).ToList();
            bool        showType      = types.Count > 1;
            var         qWords        = query.ToLower().Split(new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            ItemVersion maskVsn       = null;
            ItemVersion currMaskedVsn = null;
            bool        versioned     = false;

            if (!string.IsNullOrEmpty(allowedVsn))
            {
                maskVsn = new ItemVersion(allowedVsn);
                ItemVersion curr = sys.Versions.CurrentVersion;
                ItemVersion vsn  = curr.Superimpose(maskVsn);
                currMaskedVsn = curr.Mask(maskVsn);
                sys.Versions.PushState(VersioningMode.Specific, vsn);
                versioned = true;
            }

            try
            {
                var cachedTypes   = types.Where(t => Cache.IsTotalCached(LyniconModuleManager.Instance, t, true)).ToList();
                var uncachedTypes = types.Except(cachedTypes).ToList();
                var items         = Enumerable.Range(0, 1).Select(n => new { label = "", value = "" }).ToList();
                items.Clear();
                if (uncachedTypes.Count > 0)
                {
                    // TO DO add attribute for containers specifying which field or fields to scan for title, add code to create query to scan here
                }
                if (cachedTypes.Count > 0)
                {
                    items.AddRange(Collator.Instance.Get <Summary, Summary>(cachedTypes,
                                                                            iq => iq.Where(s => qWords.All(w => ((s.Title ?? "").ToLower() + " " + s.Type.Name.ToLower()).Contains(w))).Take(30))
                                   .Select(summ => new
                    {
                        label = summ.Title + (showType ? " (" + LyniconUi.ContentClassDisplayName(summ.Type) + ")" : "")
                                + (versioned && !currMaskedVsn.ContainedBy(summ.Version.Mask(maskVsn)) ? " [" + sys.Versions.DisplayVersion(summ.Version.Mask(maskVsn)).Select(dv => dv.Text).Join(" ") + "]" : ""),
                        value = versioned ? summ.ItemVersionedId.Mask(maskVsn).ToString() : summ.ItemId.ToString()
                    })
                                   .OrderBy(s => s.label));
                }

                return(Json(new { items }));
            }
            finally
            {
                if (versioned)
                {
                    sys.Versions.PopState();
                }
            }
        }
コード例 #2
0
ファイル: FilterManager.cs プロジェクト: slamj1/lyniconanc
        /// <summary>
        /// Generate a CSV file as a string from Filter page user inputs
        /// </summary>
        /// <param name="versionFilter">list of version keys in the order they appear in VersionManager.SelectionViewModel</param>
        /// <param name="classFilter">List of content class names</param>
        /// <param name="filters">List of filters</param>
        /// <param name="pagingSpec">Specification of paging</param>
        /// <returns>A CSV as a string</returns>
        public string GenerateCsv(List <string> versionFilter, string[] classFilter, List <ListFilter> filters, PagingSpec pagingSpec)
        {
            var results = RunFilter(versionFilter, classFilter, filters, pagingSpec);

            StringBuilder sb = new StringBuilder();

            foreach (var row in results)
            {
                sb.AppendFormat("\"{0}\"", LyniconUi.ContentClassDisplayName(row.Item2.Type));
                sb.AppendFormat(",\"{0}\"", row.Item2.DisplayTitle().Replace("\"", ""));
                sb.AppendFormat(",\"{0}\"", row.Item2.Url);
                foreach (var filt in filters.Where(f => f.Show))
                {
                    sb.Append(",");

                    string vals = filt.GetShowText(row) ?? "";
                    if (vals.Contains("|"))
                    {
                        bool innerFirst = true;
                        foreach (string val in vals.Split('|'))
                        {
                            if (innerFirst)
                            {
                                innerFirst = false;
                            }
                            else
                            {
                                sb.Append(",");
                            }

                            sb.AppendFormat("\"{0}\"", val.Replace("\"", ""));
                        }
                    }
                    else
                    {
                        sb.AppendFormat("\"{0}\"", vals.Replace("\"", ""));
                    }
                }
                sb.AppendLine();
            }

            return(sb.ToString());
        }