/// <summary> /// TODO: This method should be deprecated - it is only needed to support older websites where this page list functionality is required. /// Older websites should be updated, so that this method can be removed. Once removed: /// long pageListPageId = await GetPageListPageId(settings, context); /// Can be replaced with: /// long pageListPageId = settings.PageId ?? context.PageId; /// </summary> /// <param name="settings">Element settings.</param> /// <param name="context">Page context.</param> /// <returns>ID of page whose child pages are enumerated.</returns> private async Task <long> GetPageListPageId(PageListElementSettings settings, IPageContext context) { // If page list page ID is not specified in settings (i.e. is determined by page context) and the page is a document, then return document's parent folder if (settings.PageId == null) { Page pageListPage = await _pageService.ReadPageAsync(settings.TenantId, context.PageId); MasterPage masterPage = await _masterPageService.ReadMasterPageAsync(settings.TenantId, pageListPage.MasterPageId); if (masterPage.PageType == PageType.Document) { return(pageListPage.ParentPageId.Value); } return(pageListPage.PageId); } // Otherwise, return specified page return(settings.PageId.Value); }
private PageListPager GetPager(int pageIndex, PageListResult result, PageListElementSettings elementSettings) { if (!elementSettings.ShowPager) { return(null); } int pageCount = ((result.Total - 1) / elementSettings.PageSize) + 1; if (pageCount < 2) { return(null); } return(new PageListPager { PageCount = pageCount, PageIndex = pageIndex, PageSize = elementSettings.PageSize, Total = result.Total }); }
public async Task <IElementView <PageListElementSettings, PageListElementContent> > ReadElementViewAsync(long tenantId, long elementId, IPageContext context) { PageListElementSettings settings = await _elementRepository.ReadElementSettingsAsync(tenantId, elementId); if (settings == null) { return(null); } int pageIndex = 1; if (context.Parameters != null && context.Parameters.ContainsKey("page")) { Int32.TryParse(context.Parameters["page"], out pageIndex); } pageIndex = pageIndex - 1; IEnumerable <Tag> tags = null; if (context.TagIds != null) { tags = await _tagService.ListTagsAsync(tenantId, context.TagIds); } PageListPageLink currentPageLink = null; if (settings.ShowTags) { currentPageLink = await GetPageListPageLinkAsync(tenantId, context.PageId); } PageListPageLink morePageLink = null; long pageListPageId = await GetPageListPageId(settings, context); bool displayMorePageLink = settings.MoreMessage != null && context.PageId != pageListPageId; if (displayMorePageLink) { morePageLink = await GetPageListPageLinkAsync(tenantId, pageListPageId); } PageListResult result = await _pageService.ListPagesAsync(tenantId, pageListPageId, settings.Recursive, settings.PageType, context.TagIds, settings.SortBy, settings.SortAsc, pageIndex, settings.PageSize); IDictionary <long, BlobImage> blobsById = null; if (settings.ShowImage || settings.ShowBackgroundImage) { IEnumerable <long> blobIds = result.Pages.Where(p => p.ThumbnailImageBlobId.HasValue).Select(p => p.ThumbnailImageBlobId.Value); IEnumerable <Blob> blobs = await _storageService.ListBlobsAsync(tenantId, blobIds); blobsById = blobs.ToDictionary(b => b.BlobId, b => (BlobImage)b); } PageListElementContent content = new PageListElementContent { CurrentPage = currentPageLink, MorePage = morePageLink, DisplayName = GetContentDisplayName(settings.DisplayName, tags), MoreMessage = displayMorePageLink ? settings.MoreMessage : null, NoPagesMessage = settings.NoPagesMessage != null && !result.Pages.Any() ? settings.NoPagesMessage : null, Pages = result.Pages.Select(p => new PageListPage { Name = p.Name, PageId = p.PageId, Home = !p.ParentPageId.HasValue, Description = settings.ShowDescription ? p.Description : null, Created = settings.ShowCreated ? (DateTime?)p.Created : null, Updated = settings.ShowUpdated && !(settings.ShowCreated && (p.Created.Date == p.Updated.Date)) ? (DateTime?)p.Updated : null, Occurred = settings.ShowOccurred && p.Occurred.HasValue ? p.Occurred : null, OccursInFuture = settings.ShowOccurred && p.Occurred.HasValue ? p.Occurred.Value.Date > DateTime.UtcNow.Date : false, BackgroundImage = settings.ShowBackgroundImage ? GetImage(p, blobsById) : null, Image = settings.ShowImage ? GetImage(p, blobsById) : null, Tags = settings.ShowTags ? p.Tags : new List <Tag>() }), Pager = GetPager(pageIndex, result, settings), Tags = tags }; return(new ElementView <PageListElementSettings, PageListElementContent> { Settings = settings, Content = content }); }