/// <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));
        }
Beispiel #3
0
 public SyndicationFactory(SyndicationFeedPageType feedPage)
 {
     _feedPage = feedPage;
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public SyndicationItemFactory(IContentLoader contentLoader, IFeedContentResolver feedContentResolver, SyndicationFeedPageType feedPage)
 {
     ContentLoader       = contentLoader;
     FeedContentResolver = feedContentResolver;
     FeedPage            = feedPage;
 }