public SyndicationFeedContext(SyndicationFeedPageType feedPageType, List <Category> categoriesFilter) { FeedPageType = feedPageType; CategoriesFilter = feedPageType.CategoryFilter ?? new CategoryList(); AddContextCategories(categoriesFilter); }
/// <summary> /// Gets a list of populated syndication items created from the dependent content references on the gived SyndicationFeedPage. /// </summary> /// <returns></returns> public IEnumerable<SyndicationItem> GetSyndicationItems(SyndicationFeedPageType feedPage) { FeedPage = feedPage; var contentReferences = FeedContentResolver.GetContentReferences(FeedPage); var contentItems = ContentLoader.GetItems(contentReferences, new LoaderOptions {LanguageLoaderOption.Fallback()}); var filteredItems = FeedFilterer.FilterSyndicationContent(contentItems, FeedPage); var syndicationItems = filteredItems.Select(CreateSyndicationItem).ToList(); return syndicationItems.OrderByDescending(c => c.LastUpdatedTime).Take(FeedPage.MaximumItems); }
public virtual IEnumerable<IContent> FilterSyndicationContent(IEnumerable<IContent> syndicationContentItems, SyndicationFeedPageType feedPage) { //filter editor set excluded types var excludedAllTypes = ParseExcludedIds(feedPage.ExcludedContentTypes); var filteredItems = syndicationContentItems.Where(c => !excludedAllTypes.Contains(c.ContentTypeID)).ToList(); //filter by category if (feedPage.CategoryFilter != null) { if (!feedPage.CategoryFilter.IsEmpty) { filteredItems = filteredItems .Where(c => c is ICategorizable) .Where(c => ((ICategorizable) c).Category.MemberOfAny(feedPage.CategoryFilter)).ToList(); } } //block types are alkways removed by filter for visitor. We want to see them and respect access rights var currentlyFiltered = new IContent[filteredItems.Count]; filteredItems.CopyTo(currentlyFiltered); //filter by published, access and template var published = ServiceLocator.Current.GetInstance<IPublishedStateAssessor>(); var access = (IContentFilter) new FilterAccess(); var template = (IContentFilter) new FilterTemplate(); foreach (var filteredItem in currentlyFiltered) { var shouldFilter = false; shouldFilter = access.ShouldFilter(filteredItem); shouldFilter = shouldFilter || !published.IsPublished(filteredItem); if (!(filteredItem is BlockData)) shouldFilter = shouldFilter || template.ShouldFilter(filteredItem); if (shouldFilter) filteredItems.Remove(filteredItem); } return filteredItems; }
public SyndicationFeedContext(SyndicationFeedPageType feedPageType) { FeedPageType = feedPageType; CategoriesFilter = feedPageType.CategoryFilter ?? new CategoryList(); }
public SyndicationItemFactory(IContentLoader contentLoader, IFeedContentResolver feedContentResolver, SyndicationFeedPageType feedPage) { ContentLoader = contentLoader; FeedContentResolver = feedContentResolver; FeedPage = feedPage; }