Beispiel #1
0
        /// <summary>
        /// Gets the list with historical content entities.
        /// </summary>
        /// <param name="contentId">The content id.</param>
        /// <param name="gridOptions">The grid options.</param>
        /// <returns>
        /// Historical content entities
        /// </returns>
        public IList <Root.Models.Content> GetContentHistory(Guid contentId, Root.Mvc.Grids.GridOptions.SearchableGridOptions gridOptions)
        {
            var searchQuery = (gridOptions.SearchQuery ?? string.Empty).ToLower();

            var history = new List <Root.Models.Content>();

            var contentsList = repository
                               .AsQueryable <Root.Models.Content>()
                               .Where(f => f.Id == contentId &&
                                      !f.IsDeleted &&
                                      (f.Status == ContentStatus.Published || f.Status == ContentStatus.Draft || f.Status == ContentStatus.Archived))
                               .FetchMany(f => f.History)
                               // Load list, because query has FetchMany
                               .ToList();

            var content = contentsList.FirstOrDefault();

            if (content != null)
            {
                // Fix for draft: loading it's original content
                if (content.Status == ContentStatus.Draft)
                {
                    var publishedContent = repository
                                           .AsQueryable <Root.Models.Content>()
                                           .Where(f => f == content.Original &&
                                                  !f.IsDeleted &&
                                                  (f.Status == ContentStatus.Published || f.Status == ContentStatus.Draft || f.Status == ContentStatus.Archived))
                                           .FetchMany(f => f.History)
                                           .ToList().FirstOrDefault();

                    if (publishedContent != null)
                    {
                        content = publishedContent;
                    }
                    else
                    {
                        // If draft has no original content, adding itself to history
                        history.Add(content);
                    }
                }

                if (content.Status == ContentStatus.Published && ContainsSearchQuery(content, searchQuery))
                {
                    history.Add(content);
                }

                history.AddRange(content.History.Where(c => IsValidHistoricalContent(c) && ContainsSearchQuery(c, searchQuery)));
            }

            // Order
            history = AddSortAndPaging(history, gridOptions);

            return(history);
        }
        /// <summary>
        /// Adds the sort and paging.
        /// </summary>
        /// <param name="history">The history.</param>
        /// <param name="gridOptions">The grid options.</param>
        /// <returns>Sorted list.</returns>
        private static List <SitemapHistoryItem> AddSortAndPaging(List <SitemapHistoryItem> history, Root.Mvc.Grids.GridOptions.SearchableGridOptions gridOptions)
        {
            if (string.IsNullOrWhiteSpace(gridOptions.Column))
            {
                history = history.AsQueryable().OrderBy(o => o.CanCurrentUserRestoreIt).ThenByDescending(o => o.ArchivedOn).AddPaging(gridOptions).ToList();
            }
            else
            {
                history = history.AsQueryable().AddSortingAndPaging(gridOptions).ToList();
            }

            return(history);
        }
Beispiel #3
0
        /// <summary>
        /// Adds the sort and paging.
        /// </summary>
        /// <param name="history">The history.</param>
        /// <param name="gridOptions">The grid options.</param>
        /// <returns></returns>
        private List <Root.Models.Content> AddSortAndPaging(List <Root.Models.Content> history, Root.Mvc.Grids.GridOptions.SearchableGridOptions gridOptions)
        {
            if (string.IsNullOrWhiteSpace(gridOptions.Column))
            {
                history = history.AsQueryable().OrderBy(o => o.Status).ThenByDescending(o => o.CreatedOn).AddPaging(gridOptions).ToList();
            }
            else if (gridOptions.Column == "StatusName")
            {
                history = (gridOptions.Direction == SortDirection.Ascending)
                              ? history.AsQueryable().OrderBy(o => GetStatusName(o.Status)).AddPaging(gridOptions).ToList()
                              : history.AsQueryable().OrderByDescending(o => GetStatusName(o.Status)).AddPaging(gridOptions).ToList();
            }
            else if (gridOptions.Column == "DisplayedFor")
            {
                System.Linq.Expressions.Expression <Func <Root.Models.Content, TimeSpan?> > orderExpression =
                    (c) => c.Status == ContentStatus.Archived && c.PublishedOn != null
                        ? c.CreatedOn - c.PublishedOn.Value
                        : (TimeSpan?)null;

                history = (gridOptions.Direction == SortDirection.Ascending)
                              ? history.AsQueryable().OrderBy(orderExpression).AddPaging(gridOptions).ToList()
                              : history.AsQueryable().OrderByDescending(orderExpression).AddPaging(gridOptions).ToList();
            }
            else if (gridOptions.Column == "ArchivedOn")
            {
                System.Linq.Expressions.Expression <Func <Root.Models.Content, DateTime?> > orderExpression =
                    (c) => c.Status == ContentStatus.Archived
                        ? c.CreatedOn
                        : (DateTime?)null;

                history = (gridOptions.Direction == SortDirection.Ascending)
                              ? history.AsQueryable().OrderBy(orderExpression).AddPaging(gridOptions).ToList()
                              : history.AsQueryable().OrderByDescending(orderExpression).AddPaging(gridOptions).ToList();
            }
            else
            {
                history = history.AsQueryable().AddSortingAndPaging(gridOptions).ToList();
            }

            return(history);
        }