Example #1
0
        /// <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);
        }
Example #2
0
        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
            });
        }
Example #3
0
        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
            });
        }