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(); } } }
/// <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()); }