protected virtual void ConvertDate(ForumSearchQuery query, RouteData routeData, string origin) { string date; DateTime?fromUtc = null; DateTime?toUtc = null; if (GetValueFor(query, "d", FacetGroupKind.Date, out date) && TryParseRange(date, out fromUtc, out toUtc)) { if (fromUtc.HasValue && toUtc.HasValue && fromUtc > toUtc) { var tmp = fromUtc; fromUtc = toUtc; toUtc = tmp; } if (fromUtc.HasValue || toUtc.HasValue) { query.CreatedBetween(fromUtc, toUtc); } } AddFacet(query, FacetGroupKind.Date, false, FacetSorting.DisplayOrder, descriptor => { AddDates(descriptor, fromUtc, toUtc); }); }
public IActionResult Index(string category, int forumPage = 1) { var forums = _forumService.GetAll() .Select(forum => new ForumListingModel { Id = forum.Id, Name = forum.Title, Value = forum.Value, ImgUrl = forum.ImageUrl }); var model = new ForumSearchQuery { Forum = forums .Where(p => p.Name == category || category == null) .OrderBy(p => p.Id) .Skip((forumPage - 1) * PageSize) .Take(PageSize), PagingInfo = new PagingInfo { CurrentPage = forumPage, ItemsPerPage = PageSize, TotalItems = category == null? forums.Count() : forums.Where(e => e.Name == category).Count() //TotalItems = forums.Count() }, CurrentCategory = category }; return(View(model)); }
public ForumSearchedEvent(ForumSearchQuery query, ForumSearchResult result) { Guard.NotNull(query, nameof(query)); Guard.NotNull(result, nameof(result)); Query = query; Result = result; }
private void AddFacet( ForumSearchQuery query, FacetGroupKind kind, bool isMultiSelect, FacetSorting sorting, Action <FacetDescriptor> addValues) { string fieldName; var displayOrder = 0; switch (kind) { case FacetGroupKind.Forum: if (_searchSettings.ForumDisabled) { return; } fieldName = "forumid"; displayOrder = _searchSettings.ForumDisplayOrder; break; case FacetGroupKind.Customer: if (_searchSettings.CustomerDisabled) { return; } fieldName = "customerid"; displayOrder = _searchSettings.CustomerDisplayOrder; break; case FacetGroupKind.Date: if (_searchSettings.DateDisabled) { return; } fieldName = "createdon"; displayOrder = _searchSettings.DateDisplayOrder; break; default: throw new SmartException($"Unknown field name for facet group '{kind.ToString()}'"); } var descriptor = new FacetDescriptor(fieldName); descriptor.Label = _services.Localization.GetResource(FacetUtility.GetLabelResourceKey(kind) ?? kind.ToString()); descriptor.IsMultiSelect = isMultiSelect; descriptor.DisplayOrder = displayOrder; descriptor.OrderBy = sorting; descriptor.MinHitCount = _searchSettings.FilterMinHitCount; descriptor.MaxChoicesCount = _searchSettings.FilterMaxChoicesCount; addValues(descriptor); query.WithFacet(descriptor); }
public ForumSearchQuery CreateFromQuery() { var ctx = _httpContext; if (ctx.Request == null) { return(null); } var routeData = ctx.Request.RequestContext.RouteData; var area = routeData.GetAreaName(); var controller = routeData.GetRequiredString("controller"); var action = routeData.GetRequiredString("action"); var origin = "{0}{1}/{2}".FormatInvariant(area == null ? "" : area + "/", controller, action); var fields = new List <string> { "subject" }; var term = GetValueFor <string>("q"); var isInstantSearch = origin.IsCaseInsensitiveEqual("Boards/InstantSearch"); fields.AddRange(_searchSettings.SearchFields); var query = new ForumSearchQuery(fields.ToArray(), term, _searchSettings.SearchMode) .OriginatesFrom(origin) .WithLanguage(_services.WorkContext.WorkingLanguage) .WithCurrency(_services.WorkContext.WorkingCurrency) .BuildFacetMap(!isInstantSearch); // Visibility. query.VisibleOnly(_services.WorkContext.CurrentCustomer, !QuerySettings.IgnoreAcl); // Store. if (!QuerySettings.IgnoreMultiStore) { query.HasStoreId(_services.StoreContext.CurrentStore.Id); } // Instant-Search never uses these filter parameters. if (!isInstantSearch) { ConvertPagingSorting(query, routeData, origin); ConvertForum(query, routeData, origin); ConvertCustomer(query, routeData, origin); ConvertDate(query, routeData, origin); } OnConverted(query, routeData, origin); Current = query; return(query); }
protected virtual void ConvertPagingSorting(ForumSearchQuery query, RouteData routeData, string origin) { var index = Math.Max(1, GetValueFor <int?>("i") ?? 1); var size = GetPageSize(query, routeData, origin); query.Slice((index - 1) * size, size); if (_forumSettings.AllowSorting) { var orderBy = GetValueFor <ForumTopicSorting?>("o"); if (orderBy == null || orderBy == ForumTopicSorting.Initial) { orderBy = _searchSettings.DefaultSortOrder; } query.SortBy(orderBy.Value); query.CustomData["CurrentSortOrder"] = orderBy.Value; } }
protected virtual void ConvertCustomer(ForumSearchQuery query, RouteData routeData, string origin) { List <int> ids; if (GetValueFor(query, "c", FacetGroupKind.Customer, out ids) && ids != null && ids.Any()) { query.WithCustomerIds(ids.ToArray()); } AddFacet(query, FacetGroupKind.Customer, true, FacetSorting.HitsDesc, descriptor => { if (ids != null) { foreach (var id in ids) { descriptor.AddValue(new FacetValue(id, IndexTypeCode.Int32) { IsSelected = true }); } } }); }
public async void LoadPage(int page, bool decrement = false, bool force = false) { LoadingTopics = true; if (decrement) { page--; } try { Topics = new List <ForumTopicEntryViewModel>(); ForumBoardContent topics; int?arg; if (page != 0) { arg = _allPages; } else { arg = null; } switch (PrevArgs.WorkMode) { case ForumBoardPageWorkModes.Standard: topics = await new ForumBoardTopicsQuery(PrevArgs.TargetBoard, page).GetTopicPosts(arg, force); break; case ForumBoardPageWorkModes.AnimeBoard: case ForumBoardPageWorkModes.MangaBoard: topics = await new ForumBoardTopicsQuery(PrevArgs.AnimeId, page, PrevArgs.IsAnimeBoard).GetTopicPosts(arg, force); break; case ForumBoardPageWorkModes.Search: topics = await ForumSearchQuery.GetSearchResults(PrevArgs.Query, PrevArgs.Scope); break; case ForumBoardPageWorkModes.UserSearch: topics = await ForumSearchQuery.GetRecentTopics(PrevArgs.Query); break; case ForumBoardPageWorkModes.WatchedTopics: topics = await ForumSearchQuery.GetWatchedTopics(); break; default: throw new ArgumentOutOfRangeException(); } if (topics.ForumTopicEntries.Count != 0) { Topics = topics.ForumTopicEntries.Select(entry => new ForumTopicEntryViewModel(entry)).ToList(); _allPages = topics.Pages; CurrentPage = page; } EmptyNoticeVisibility = !Topics.Any(); } catch (Exception) { //no shuch page } _initizalizing = false; LoadingTopics = false; }
protected virtual bool GetValueFor <T>(ForumSearchQuery query, string key, FacetGroupKind kind, out T value) { return(GetValueFor(_forumSearchQueryAliasMapper.GetCommonFacetAliasByGroupKind(kind, query.LanguageId ?? 0) ?? key, out value)); }
protected virtual void OnConverted(ForumSearchQuery query, RouteData routeData, string origin) { }
protected virtual int GetPageSize(ForumSearchQuery query, RouteData routeData, string origin) { return(_forumSettings.SearchResultsPageSize); }
public ForumSearchResultModel(ForumSearchQuery query) { Query = query; }
public ForumSearchingEvent(ForumSearchQuery query) { Guard.NotNull(query, nameof(query)); Query = query; }