public PageContentProjection CreatePageContentProjection( bool canManageContent, PageContent pageContent, IChildContent childContent = null, Guid? previewPageContentId = null, bool retrieveCorrectVersion = true) { Models.Content contentToProject = null; var content = childContent == null ? pageContent.Content : (Models.Content)childContent.ChildContent; if (!retrieveCorrectVersion) { contentToProject = content; } else { if (childContent == null && previewPageContentId != null && previewPageContentId.Value == pageContent.Id) { // Looks for the preview content version first. if (content.Status == ContentStatus.Preview) { contentToProject = content; } else { contentToProject = content.History.FirstOrDefault(f => f.Status == ContentStatus.Preview); } } if (contentToProject == null && (canManageContent || previewPageContentId != null)) { // Look for the draft content version if we are in the edit or preview mode. if (content.Status == ContentStatus.Draft) { contentToProject = content; } else { contentToProject = content.History.FirstOrDefault(f => f.Status == ContentStatus.Draft); } } if (contentToProject == null && content.Status == ContentStatus.Published) { IHtmlContent htmlContent = content as IHtmlContent; if (!canManageContent && htmlContent != null && (DateTime.Now < htmlContent.ActivationDate || (htmlContent.ExpirationDate.HasValue && htmlContent.ExpirationDate.Value < DateTime.Now))) { // Invisible for user because of activation dates. return null; } // Otherwise take published version. contentToProject = content; } } if (contentToProject == null) { throw new CmsException(string.Format("A content version was not found to project on the page. PageContent={0}; CanManageContent={1}, PreviewPageContentId={2};", pageContent, canManageContent, previewPageContentId)); } // Create a collection of child contents (child widgets) projections var childContentsProjections = CreateListOfChildProjectionsRecursively(canManageContent, previewPageContentId, pageContent, contentToProject.ChildContents); Func<IPageContent, IContent, IContentAccessor, IEnumerable<ChildContentProjection>, PageContentProjection> createProjectionDelegate; if (childContent != null) { createProjectionDelegate = (pc, c, a, ccpl) => new ChildContentProjection(pc, childContent, a, ccpl); } else { createProjectionDelegate = (pc, c, a, ccpl) => new PageContentProjection(pc, c, a, ccpl); } var optionValues = childContent != null ? childContent.Options : pageContent.Options; var options = optionService.GetMergedOptionValues(contentToProject.ContentOptions, optionValues); return pageContentProjectionFactory.Create(pageContent, contentToProject, options, childContentsProjections, createProjectionDelegate); }
public ChildContentProjection(IPageContent pageContent, IChildContent content, IContentAccessor contentAccessor, IEnumerable<ChildContentProjection> childProjections = null, IEnumerable<PageContentProjection> childRegionContentProjections = null) : base(pageContent, content.ChildContent, contentAccessor, childProjections, childRegionContentProjections) { assignmentIdentifier = content.AssignmentIdentifier; }
public PageContentProjection CreatePageContentProjection( bool canManageContent, PageContent pageContent, List <PageContent> allPageContents, IChildContent childContent = null, Guid?previewPageContentId = null, Guid?languageId = null, bool retrieveCorrectVersion = true) { // Run logic of projection creation, because it's not created yet Models.Content contentToProject = null; var content = childContent == null ? pageContent.Content : (Models.Content)childContent.ChildContent; if (!retrieveCorrectVersion) { contentToProject = content; } else { if (childContent == null && previewPageContentId != null && previewPageContentId.Value == pageContent.Id) { // Looks for the preview content version first. if (content.Status == ContentStatus.Preview) { contentToProject = content; } else { contentToProject = content.History.FirstOrDefault(f => f.Status == ContentStatus.Preview); } } if (contentToProject == null && (canManageContent || previewPageContentId != null)) { // Look for the draft content version if we are in the edit or preview mode. if (content.Status == ContentStatus.Draft) { contentToProject = content; } else { contentToProject = content.History.FirstOrDefault(f => f.Status == ContentStatus.Draft); } } if (contentToProject == null && content.Status == ContentStatus.Published) { IHtmlContent htmlContent = content as IHtmlContent; if (!canManageContent && htmlContent != null && (DateTime.Now < htmlContent.ActivationDate || (htmlContent.ExpirationDate.HasValue && htmlContent.ExpirationDate.Value < DateTime.Now))) { // Invisible for user because of activation dates. return(null); } // Otherwise take published version. contentToProject = content; } } if (contentToProject == null) { throw new CmsException(string.Format("A content version was not found to project on the page. PageContent={0}; CanManageContent={1}, PreviewPageContentId={2};", pageContent, canManageContent, previewPageContentId)); } // Create a collection of child regions (dynamic regions) contents projections var childRegionContentProjections = CreateListOfChildRegionContentProjectionsRecursively(canManageContent, previewPageContentId, pageContent, allPageContents, contentToProject, languageId); // Create a collection of child contents (child widgets) projections var childContentsProjections = CreateListOfChildProjectionsRecursively(canManageContent, previewPageContentId, pageContent, allPageContents, contentToProject.ChildContents, languageId); Func <IPageContent, IContent, IContentAccessor, IEnumerable <ChildContentProjection>, IEnumerable <PageContentProjection>, PageContentProjection> createProjectionDelegate; if (childContent != null) { createProjectionDelegate = (pc, c, a, ccpl, pcpl) => { if (childContent.ChildContent is IProxy) { childContent.ChildContent = (IContent)unitOfWork.Session.GetSessionImplementation().PersistenceContext.Unproxy(childContent.ChildContent); } return(new ChildContentProjection(pc, childContent, a, ccpl, pcpl)); }; } else { createProjectionDelegate = (pc, c, a, ccpl, pcpl) => new PageContentProjection(pc, c, a, ccpl, pcpl); } var optionValues = childContent != null ? childContent.Options : pageContent.Options; var options = optionService.GetMergedOptionValues(contentToProject.ContentOptions, optionValues, languageId); var contentProjection = pageContentProjectionFactory.Create(pageContent, contentToProject, options, childContentsProjections, childRegionContentProjections, createProjectionDelegate); return(contentProjection); }
public ChildContentProjection(IPageContent pageContent, IChildContent content, IContentAccessor contentAccessor, IEnumerable <ChildContentProjection> childProjections = null, IEnumerable <PageContentProjection> childRegionContentProjections = null) : base(pageContent, content.ChildContent, contentAccessor, childProjections, childRegionContentProjections) { assignmentIdentifier = content.AssignmentIdentifier; }