Пример #1
0
        /// <summary>
        /// Gets the view model for rendering widget preview.
        /// </summary>
        /// <param name="contentId">The content id.</param>
        /// <param name="user">The user.</param>
        /// <returns>
        /// View model for rendering widget preview
        /// </returns>
        public RenderPageViewModel GetContentPreviewViewModel(Guid contentId, IPrincipal user, bool allowJavaScript)
        {
            // Creating fake region.
            var regionGuid = new Guid(regionId);
            var region     = new Region {
                Id = regionGuid, RegionIdentifier = regionIdentifier
            };
            var regionViewModel = new PageRegionViewModel {
                RegionId = regionGuid, RegionIdentifier = regionIdentifier
            };

            // Creating fake page content and loading it's children.
            var pageContent = new PageContent
            {
                Options = new List <PageContentOption>(),
                Region  = region
            };

            pageContent.Content = repository
                                  .AsQueryable <ContentEntity>(c => c.Id == contentId)
                                  .FetchMany(f => f.ContentOptions)
                                  .FetchMany(f => f.ChildContents)
                                  .ThenFetch(f => f.Child)
                                  .FetchMany(f => f.ChildContents)
                                  .ThenFetchMany(f => f.Options)
                                  .ToList()
                                  .FirstOrDefault();

            if (pageContent.Content != null)
            {
                DemandAccess(user, RootModuleConstants.UserRoles.EditContent, RootModuleConstants.UserRoles.PublishContent);
            }

            childContentService.RetrieveChildrenContentsRecursively(true, new[] { pageContent.Content });

            var contentProjection = contentProjectionService.CreatePageContentProjection(true, pageContent, retrieveCorrectVersion: false);

            var pageViewModel = new RenderPageViewModel
            {
                Contents = new List <PageContentProjection> {
                    contentProjection
                },
                Stylesheets = new List <IStylesheetAccessor> {
                    contentProjection
                },
                Regions = new List <PageRegionViewModel> {
                    regionViewModel
                },
                AreRegionsEditable = true
            };

            if (allowJavaScript)
            {
                pageViewModel.JavaScripts = new List <IJavaScriptAccessor> {
                    contentProjection
                };
            }

            return(pageViewModel);
        }
Пример #2
0
        /// <summary>
        /// Gets the view model for rendering widget preview.
        /// </summary>
        /// <param name="contentId">The content id.</param>
        /// <param name="user">The user.</param>
        /// <returns>
        /// View model for rendering widget preview
        /// </returns>
        public RenderPageViewModel GetContentPreviewViewModel(Guid contentId, IPrincipal user, bool allowJavaScript)
        {
            // Creating fake region.
            var regionGuid = new Guid(regionId);
            var region     = new Region {
                Id = regionGuid, RegionIdentifier = regionIdentifier
            };
            var regionViewModel = new PageRegionViewModel {
                RegionId = regionGuid, RegionIdentifier = regionIdentifier
            };

            // Creating fake page content and loading it's children.
            var pageContent = new PageContent
            {
                Options = new List <PageContentOption>(),
                Region  = region
            };

            pageContent.Content = repository
                                  .AsQueryable <ContentEntity>(c => c.Id == contentId)
                                  .FetchMany(f => f.ContentOptions)
                                  .ToList()
                                  .FirstOrDefault();

            if (pageContent.Content != null)
            {
                DemandAccess(user, RootModuleConstants.UserRoles.EditContent, RootModuleConstants.UserRoles.PublishContent);
            }

            var options = optionService.GetMergedOptionValues(pageContent.Content.ContentOptions, pageContent.Options);

            var contentProjection = pageContentProjectionFactory.Create(pageContent, pageContent.Content, options);

            var pageViewModel = new RenderPageViewModel
            {
                Contents = new List <PageContentProjection> {
                    contentProjection
                },
                Stylesheets = new List <IStylesheetAccessor> {
                    contentProjection
                },
                Regions = new List <PageRegionViewModel> {
                    regionViewModel
                },
                AreRegionsEditable = true
            };

            if (allowJavaScript)
            {
                pageViewModel.JavaScripts = new List <IJavaScriptAccessor> {
                    contentProjection
                };
            }

            return(pageViewModel);
        }
Пример #3
0
        /// <summary>
        /// Executes the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Render page view model.</returns>
        public RenderPageViewModel Execute(Guid request)
        {
            // Creating fake region.
            var regionGuid = new Guid(regionId);
            var region     = new Region {
                Id = regionGuid, RegionIdentifier = regionIdentifier
            };
            var regionViewModel = new PageRegionViewModel {
                RegionId = regionGuid, RegionIdentifier = regionIdentifier
            };

            // Creating fake page content and loading it's children.
            var pageContent = new PageContent
            {
                Options = new List <PageContentOption>(),
                Region  = region
            };

            pageContent.Content = Repository
                                  .AsQueryable <ContentEntity>(c => c.Id == request)
                                  .FetchMany(f => f.ContentOptions)
                                  .FirstOrDefault();

            if (pageContent.Content != null)
            {
                var contentType = pageContent.Content.GetType();
                if (contentType == typeof(HtmlContentWidget) || contentType == typeof(ServerControlWidget))
                {
                    DemandAccess(RootModuleConstants.UserRoles.Administration);
                }
                else
                {
                    DemandAccess(RootModuleConstants.UserRoles.EditContent, RootModuleConstants.UserRoles.PublishContent);
                }
            }

            var options = OptionService.GetMergedOptionValues(pageContent.Options, pageContent.Content.ContentOptions);

            var contentProjection = PageContentProjectionFactory.Create(pageContent, pageContent.Content, options);

            return(new RenderPageViewModel
            {
                Contents = new List <PageContentProjection> {
                    contentProjection
                },
                Stylesheets = new List <IStylesheetAccessor> {
                    contentProjection
                },
                JavaScripts = new List <IJavaScriptAccessor> {
                    contentProjection
                },
                Regions = new List <PageRegionViewModel> {
                    regionViewModel
                }
            });
        }
Пример #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LayoutRegionWrapper" /> class.
        /// </summary>
        /// <param name="sb">The string builder.</param>
        /// <param name="region">The region.</param>
        /// <param name="allowContentManagement">if set to <c>true</c> allows content management.</param>
        public LayoutRegionWrapper(StringBuilder sb, PageRegionViewModel region, bool allowContentManagement)
        {
            this.sb     = sb;
            this.region = region;
            this.allowContentManagement = allowContentManagement;

            if (allowContentManagement)
            {
                RenderOpeningTags();
            }
        }
Пример #5
0
        private string AppendHtmlWithChildRegionContens(string html, PageContentProjection projection, RenderPageViewModel pageModel)
        {
            // Render contents from children regions
            var childRegionContents = projection.GetChildRegionContentProjections() ?? new List <PageContentProjection>();

            if (projection.Content is IChildRegionContainer &&
                projection.Content.ContentRegions != null &&
                projection.Content.ContentRegions.Any())
            {
                var stringBuilder  = new StringBuilder(html);
                var pageHtmlHelper = new PageHtmlRenderer(stringBuilder, pageModel);

                foreach (var region in projection.Content.ContentRegions.Distinct())
                {
                    var contentsBuilder = new StringBuilder();
                    var regionModel     = new PageRegionViewModel
                    {
                        RegionId         = region.Region.Id,
                        RegionIdentifier = region.Region.RegionIdentifier
                    };
                    var childRegionContentProjections = childRegionContents.Where(c => c.RegionId == regionModel.RegionId).OrderBy(c => c.Order).ToList();

                    var canEditRegion = projection.PageId == pageModel.Id && pageModel.AreRegionsEditable;
                    using (new LayoutRegionWrapper(contentsBuilder, regionModel, canEditRegion))
                    {
                        foreach (var childRegionContentProjection in childRegionContentProjections)
                        {
                            // Add Html
                            using (new RegionContentWrapper(contentsBuilder, childRegionContentProjection, pageModel.CanManageContent && canEditRegion))
                            {
                                // Pass current model as view data model
                                var modelBefore = htmlHelper.ViewData.Model;
                                htmlHelper.ViewData.Model = pageModel;

                                contentsBuilder = AppendHtml(contentsBuilder, childRegionContentProjection, pageModel);

                                // Restore model, which was before changes
                                htmlHelper.ViewData.Model = modelBefore;
                            }
                        }
                    }

                    // Insert region to master page
                    var regionHtml = contentsBuilder.ToString();
                    pageHtmlHelper.ReplaceRegionHtml(regionModel.RegionIdentifier, regionHtml);
                }

                return(pageHtmlHelper.GetReplacedHtml().ToString());
            }

            return(html);
        }
        private StringBuilder RenderInvisibleRegionsRecursively(StringBuilder contentsBuilder,
                                                                IEnumerable <InvisibleContentProjection> invisibleContentProjections, InvisibleContentProjection parent = null)
        {
            foreach (var group in invisibleContentProjections.Where(i => i.Parent == parent).GroupBy(i => i.ContentProjection.RegionId))
            {
                var regionModel = new PageRegionViewModel {
                    RegionId = group.Key, RegionIdentifier = group.First().ContentProjection.RegionIdentifier
                };
                using (new LayoutRegionWrapper(contentsBuilder, regionModel, true, true))
                {
                    foreach (var projection in group)
                    {
                        using (new RegionContentWrapper(contentsBuilder, projection.ContentProjection, true, true))
                        {
                            RenderInvisibleRegionsRecursively(contentsBuilder, invisibleContentProjections, projection);
                        }
                    }
                }
            }

            return(contentsBuilder);
        }