/// <summary> /// Gets the content items that are referenced in the passed SyndicationFeedPage. /// </summary> /// <param name="currentPage">The current page.</param> /// <returns></returns> public IEnumerable <ContentReference> GetContentReferences(SyndicationFeedPageType currentPage) { var dependentContentItems = new List <ContentReference>(); if (!ContentReference.IsNullOrEmpty(currentPage.PageFolder)) { dependentContentItems.AddRange(GetDescendentsOfType <PageData>(currentPage.PageFolder)); } if (!ContentReference.IsNullOrEmpty(currentPage.BlockFolder)) { dependentContentItems.AddRange(GetDescendentsOfType <BlockData>(currentPage.BlockFolder)); } if (!ContentReference.IsNullOrEmpty(currentPage.MediaFolder)) { dependentContentItems.AddRange(GetDescendentsOfType <MediaData>(currentPage.MediaFolder)); } if (currentPage.ContentItems == null) { return(dependentContentItems); } var itemsInContentArea = currentPage.ContentItems.Items.Select(contentItem => contentItem.ContentLink); dependentContentItems.AddRange(itemsInContentArea); return(dependentContentItems.Distinct()); }
/// <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 SyndicationFactory(SyndicationFeedPageType feedPage) { _feedPage = feedPage; }
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 SyndicationItemFactory(IContentLoader contentLoader, IFeedContentResolver feedContentResolver, SyndicationFeedPageType feedPage) { ContentLoader = contentLoader; FeedContentResolver = feedContentResolver; FeedPage = feedPage; }