/// <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); }
/// <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); }