public void GetNavigation(NavigationBuilder builder) { var workContext = _workContextAccessor.GetContext(); var httpContext = workContext.HttpContext; if (httpContext == null) { return; } var queryString = workContext.HttpContext.Request.QueryString; string part = queryString["part"]; string field = queryString["field"]; ContentPickerSearchFieldSettings settings = null; // if the picker is loaded for a specific field, apply custom settings if (!String.IsNullOrEmpty(part) && !String.IsNullOrEmpty(field)) { var definition = _contentDefinitionManager.GetPartDefinition(part).Fields.FirstOrDefault(x => x.Name == field); if (definition != null) { settings = definition.Settings.GetModel <ContentPickerSearchFieldSettings>(); } } if (settings != null && !settings.ShowSearchTab) { return; } builder.Add(T("Content Picker"), menu => menu .Add(T("Search Content"), "5", item => item.Action("Index", "ContentPicker", new { area = "Orchard.Search" }).LocalNav())); }
public ActionResult Index(PagerParameters pagerParameters, string part, string field, string searchText = "") { var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var searchSettingsPart = Services.WorkContext.CurrentSite.As <SearchSettingsPart>(); var searchIndex = searchSettingsPart.SearchIndex; var searchFields = searchSettingsPart.GetSearchFields(searchSettingsPart.SearchIndex); var totalCount = 0; var foundIds = new int[0]; if (!String.IsNullOrWhiteSpace(searchText)) { ContentPickerSearchFieldSettings settings = null; // if the picker is loaded for a specific field, apply custom settings if (!String.IsNullOrEmpty(part) && !String.IsNullOrEmpty(field)) { var definition = _contentDefinitionManager.GetPartDefinition(part).Fields.FirstOrDefault(x => x.Name == field); if (definition != null) { settings = definition.Settings.GetModel <ContentPickerSearchFieldSettings>(); } } if (!_indexManager.HasIndexProvider()) { return(View("NoIndex")); } var builder = _indexManager.GetSearchIndexProvider().CreateSearchBuilder(searchIndex); try { builder.Parse(searchFields, searchText); if (settings != null && !String.IsNullOrEmpty(settings.DisplayedContentTypes)) { var rawTypes = settings.DisplayedContentTypes.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList(); var contentTypes = _contentDefinitionManager .ListTypeDefinitions() .Where(x => x.Parts.Any(p => rawTypes.Contains(p.PartDefinition.Name))) .ToArray(); foreach (string type in contentTypes.Select(x => x.Name)) { builder.WithField("type", type).AsFilter(); } } totalCount = builder.Count(); builder = builder.Slice((pager.Page > 0 ? pager.Page - 1 : 0) * pager.PageSize, pager.PageSize); var searchResults = builder.Search(); foundIds = searchResults.Select(searchHit => searchHit.ContentItemId).ToArray(); } catch (Exception exception) { Logger.Error(T("Invalid search query: {0}", exception.Message).Text); Services.Notifier.Error(T("Invalid search query: {0}", exception.Message)); } } var list = Services.New.List(); foreach (var contentItem in Services.ContentManager.GetMany <IContent>(foundIds, VersionOptions.Published, QueryHints.Empty)) { // ignore search results which content item has been removed or unpublished if (contentItem == null) { totalCount--; continue; } list.Add(Services.ContentManager.BuildDisplay(contentItem, "SummaryAdmin")); } var pagerShape = Services.New.Pager(pager).TotalItemCount(totalCount); foreach (IShape item in list.Items) { item.Metadata.Type = "ContentPicker"; } // retain the parameter in the pager links RouteData.Values["searchText"] = searchText; dynamic tab = Services.New.SearchContentTab() .ContentItems(list) .Pager(pagerShape) .SearchText(searchText); return(new ShapeResult(this, Services.New.ContentPicker().Tab(tab))); }