public override List <SelectListItem> GetSelectList() { ItemVersion getVsn = VersionManager.Instance.CurrentVersion.Overlay(AllowedVersionsOverlay); VersionManager.Instance.PushState(VersioningMode.Specific, getVsn); try { var summaries = Collator.Instance.Get <Summary, object>(AssignableContentTypes, iq => iq); var slis = summaries.Select(s => new SelectListItem { Text = IsContentType ? s.Title : s.Title + " (" + BaseContent.ContentClassDisplayName(s.Type) + ")", Value = s.ItemVersionedId.Mask(AllowedVersionsOverlay).ToString(), Selected = (s.Id.ToString() == this.Id && s.Type == this.Type && s.Version.Mask(AllowedVersionsOverlay) == this.Version) }).OrderBy(sli => sli.Text).ToList(); bool noneSelected = !slis.Any(sli => sli.Selected); slis.Insert(0, new SelectListItem { Text = "", Value = "", Selected = noneSelected }); return(slis); } finally { VersionManager.Instance.PopState(); } }
public ActionResult 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 = VersionManager.Instance.CurrentVersion; ItemVersion vsn = curr.Superimpose(maskVsn); currMaskedVsn = curr.Mask(maskVsn); VersionManager.Instance.PushState(VersioningMode.Specific, vsn); versioned = true; } try { var cachedTypes = types.Where(t => Cache.IsTotalCached(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 ? " (" + BaseContent.ContentClassDisplayName(summ.Type) + ")" : "") + (versioned && !currMaskedVsn.ContainedBy(summ.Version.Mask(maskVsn)) ? " [" + VersionManager.Instance.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 }, JsonRequestBehavior.AllowGet)); } finally { if (versioned) { VersionManager.Instance.PopState(); } } }