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); }
protected virtual void AddDates(FacetDescriptor descriptor, DateTime?selectedFrom, DateTime?selectedTo) { var store = _services.StoreContext.CurrentStore; var customer = _services.WorkContext.CurrentCustomer; var count = 0; var utcNow = DateTime.UtcNow; utcNow = new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, 0, 0, 0); foreach (ForumDateFilter filter in Enum.GetValues(typeof(ForumDateFilter))) { var dt = utcNow.AddDays(-((int)filter)); if (filter == ForumDateFilter.LastVisit) { var lastVisit = _genericAttributeService.GetAttribute <DateTime?>(nameof(Customer), customer.Id, SystemCustomerAttributeNames.LastForumVisit, store.Id); if (!lastVisit.HasValue) { continue; } dt = lastVisit.Value; } var value = selectedTo.HasValue ? new FacetValue(null, dt, IndexTypeCode.DateTime, false, true) : new FacetValue(dt, null, IndexTypeCode.DateTime, true, false); value.DisplayOrder = ++count; value.Label = T("Enums.SmartStore.Core.Domain.Forums.ForumDateFilter." + filter.ToString()); if (selectedFrom.HasValue) { value.IsSelected = dt == selectedFrom.Value; } else if (selectedTo.HasValue) { value.IsSelected = dt == selectedTo.Value; } descriptor.AddValue(value); } }
private void AddFacet( CatalogSearchQuery query, FacetGroupKind kind, bool isMultiSelect, FacetSorting sorting, Action <FacetDescriptor> addValues) { string fieldName; var displayOrder = 0; switch (kind) { case FacetGroupKind.Category: fieldName = _catalogSettings.IncludeFeaturedProductsInNormalLists ? "categoryid" : "notfeaturedcategoryid"; break; case FacetGroupKind.Brand: if (_searchSettings.BrandDisabled) { return; } fieldName = "manufacturerid"; displayOrder = _searchSettings.BrandDisplayOrder; break; case FacetGroupKind.Price: if (_searchSettings.PriceDisabled || !_services.Permissions.Authorize(StandardPermissionProvider.DisplayPrices)) { return; } fieldName = "price"; displayOrder = _searchSettings.PriceDisplayOrder; break; case FacetGroupKind.Rating: if (_searchSettings.RatingDisabled) { return; } fieldName = "rating"; displayOrder = _searchSettings.RatingDisplayOrder; break; case FacetGroupKind.DeliveryTime: if (_searchSettings.DeliveryTimeDisabled) { return; } fieldName = "deliveryid"; displayOrder = _searchSettings.DeliveryTimeDisplayOrder; break; case FacetGroupKind.Availability: if (_searchSettings.AvailabilityDisabled) { return; } fieldName = "available"; displayOrder = _searchSettings.AvailabilityDisplayOrder; break; case FacetGroupKind.NewArrivals: if (_searchSettings.NewArrivalsDisabled) { return; } fieldName = "createdon"; displayOrder = _searchSettings.NewArrivalsDisplayOrder; 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); }