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()));
        }
Exemple #2
0
        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)));
        }