예제 #1
0
        protected virtual void AddMyAccountMenu(CommerceHomePage homePage, CommerceHeaderViewModel viewModel)
        {
            if (HttpContext.Current != null && !HttpContext.Current.Request.IsAuthenticated)
            {
                viewModel.UserLinks = new LinkItemCollection();
                return;
            }

            var menuItems = new LinkItemCollection();
            var filter    = new FilterContentForVisitor();
            var contact   = _customerService.GetCurrentContact();

            if (contact != null && contact.FoundationOrganization != null)
            {
                var orgLink = new LinkItem
                {
                    Href  = _urlResolver.GetUrl(homePage.OrganizationMainPage),
                    Text  = _localizationService.GetString("My Organization", "My Organization"),
                    Title = _localizationService.GetString("My Organization", "My Organization")
                };
                //orgLink.Attributes.Add("css", "fa-sign-out");
                menuItems.Add(orgLink);
            }

            foreach (var linkItem in homePage.MyAccountCommerceMenu ?? new LinkItemCollection())
            {
                if (!UrlResolver.Current.TryToPermanent(linkItem.Href, out var linkUrl))
                {
                    continue;
                }

                if (linkUrl.IsNullOrEmpty())
                {
                    continue;
                }

                var urlBuilder = new UrlBuilder(linkUrl);
                var content    = _urlResolver.Route(urlBuilder);
                if (content == null || filter.ShouldFilter(content))
                {
                    continue;
                }

                linkItem.Title = linkItem.Text;
                menuItems.Add(linkItem);
            }

            var signoutText = _localizationService.GetString("/Header/Account/SignOut", "Sign Out");
            var link        = new LinkItem
            {
                Href  = "/publicapi/signout",
                Text  = signoutText,
                Title = signoutText
            };

            link.Attributes.Add("css", "fa-sign-out");
            menuItems.Add(link);

            viewModel.UserLinks.AddRange(menuItems);
        }
예제 #2
0
 public SiteMapBuilder(IContentLoader pageRepo, ILanguageBranchRepository langRepo, UrlResolver urlResolver)
 {
     _pageRepo    = pageRepo;
     _langRepo    = langRepo;
     _urlResolver = urlResolver;
     _filter      = new FilterContentForVisitor();
     _host        = SiteDefinition.Current.SiteUrl.Host;
     _namespace   = "http://www.sitemaps.org/schemas/sitemap/0.9";
 }
        public virtual void AddMyAccountMenu <THomePage, THeaderViewModel>(THomePage homePage,
                                                                           THeaderViewModel viewModel)
            where THeaderViewModel : HeaderViewModel, new()
            where THomePage : CmsHomePage
        {
            if (HttpContext.Current != null && !HttpContext.Current.Request.IsAuthenticated)
            {
                viewModel.UserLinks = new LinkItemCollection();
                return;
            }

            var menuItems = new LinkItemCollection();
            var filter    = new FilterContentForVisitor();

            foreach (var linkItem in homePage.MyAccountCmsMenu ?? new LinkItemCollection())
            {
                if (!UrlResolver.Current.TryToPermanent(linkItem.Href, out var linkUrl))
                {
                    continue;
                }

                if (linkUrl.IsNullOrEmpty())
                {
                    continue;
                }

                var urlBuilder = new UrlBuilder(linkUrl);
                var content    = _urlResolver.Route(urlBuilder);
                if (content == null || filter.ShouldFilter(content))
                {
                    continue;
                }

                linkItem.Title = linkItem.Text;
                menuItems.Add(linkItem);
            }

            var signoutText = _localizationService.GetString("/Header/Account/SignOut", "Sign Out");
            var link        = new LinkItem
            {
                Href  = "/publicapi/signout",
                Text  = signoutText,
                Title = signoutText
            };

            link.Attributes.Add("css", "fa-sign-out");
            menuItems.Add(link);

            viewModel.UserLinks.AddRange(menuItems);
        }
예제 #4
0
        public void AddMyAccountMenu(HomePage homePage, HeaderViewModel viewModel)
        {
            if (_httpContextAccessor.HttpContext != null && !_httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)
            {
                viewModel.UserLinks = new LinkItemCollection();
                return;
            }

            var menuItems      = new LinkItemCollection();
            var filter         = new FilterContentForVisitor();
            var layoutSettings = _settingsService.GetSiteSettings <LayoutSettings>();

            foreach (var linkItem in layoutSettings.MyAccountCmsMenu ?? new LinkItemCollection())
            {
                if (!UrlResolver.Current.TryToPermanent(linkItem.Href, out var linkUrl))
                {
                    continue;
                }

                if (linkUrl.IsNullOrEmpty())
                {
                    continue;
                }

                var urlBuilder = new UrlBuilder(linkUrl);
                var content    = _urlResolver.Route(urlBuilder);
                if (content == null || filter.ShouldFilter(content))
                {
                    continue;
                }

                linkItem.Title = linkItem.Text;
                menuItems.Add(linkItem);
            }

            var signoutText = _localizationService.GetString("/Header/Account/SignOut", "Sign Out");
            var link        = new LinkItem
            {
                Href  = "/publicapi/signout",
                Text  = signoutText,
                Title = signoutText
            };

            link.Attributes.Add("css", "fa-sign-out");
            menuItems.Add(link);

            viewModel.UserLinks.AddRange(menuItems);
        }
예제 #5
0
		public ActionResult Get(int reference, HomePage currentPage)
		{
			currentPage = currentPage ?? _contentLoader.Get<HomePage>(ContentReference.StartPage);

			IContent page = _contentLoader.Get<IContent>(new ContentReference(reference));
            
            // Filter away stuff you're not allowed to see
            FilterContentForVisitor filter = new FilterContentForVisitor();
		    if(filter.ShouldFilter(page) == true)
                return new HttpNotFoundResult();

			if (page is ArticlePage)
			{
				var model = new PageViewModel<ArticlePage>((ArticlePage)page);
				return View("~/Views/ArticlePage/Index.cshtml", model);
			}
            return new HttpNotFoundResult();
		}
예제 #6
0
        public static IHtmlString MenuList(
            this HtmlHelper helper,
            ContentReference rootLink,
            Func <MenuItem, HelperResult> itemTemplate)
        {
            var currentContentLink = helper.ViewContext.RequestContext.GetContentLink();
            var contentLoader      = ServiceLocator.Current.GetInstance <IContentLoader>();
            var filterForVisitor   = new FilterContentForVisitor();

            var pagePath = contentLoader.GetAncestors(currentContentLink)
                           .Reverse()
                           .Select(x => x.ContentLink)
                           .SkipWhile(x => !x.CompareToIgnoreWorkID(rootLink))
                           .ToList();

            var menuItems = contentLoader.GetChildren <PageData>(rootLink)
                            .Where(page => !filterForVisitor.ShouldFilter(page) && page.VisibleInMenu)
                            .Select(page => new MenuItem
            {
                Page     = page,
                Selected = page.ContentLink.CompareToIgnoreWorkID(currentContentLink) ||
                           pagePath.Contains(page.ContentLink)
            }
                                    )
                            .ToList();

            var buffer = new StringBuilder();
            var writer = new StringWriter(buffer);

            foreach (var menuItem in menuItems)
            {
                itemTemplate(menuItem).WriteTo(writer);
            }

            return(new MvcHtmlString(buffer.ToString()));
        }
예제 #7
0
 public static IEnumerable<PageData> GetSiblings(this PageData pageData, IContentLoader contentLoader)
 {
     var filter = new FilterContentForVisitor();
     return contentLoader.GetChildren<PageData>(pageData.ParentLink).Where(page => !filter.ShouldFilter(page));
 }
        public RatingListDto GetRatings([FromUri]RatingFilterDto filterParams)
        {
            var ratingDataList = new RatingListDto();
            var filter = new FilterContentForVisitor();
            var pages = GetChildPages(ContentReference.StartPage).ToList();
            filter.Filter(pages);
            var ratingTableDataList = new List<RatingTableDataDto>();

            var ratingInterfacePages = filterParams != null && filterParams.RatingEnabled ?
                pages.OfType<IRatingPage>().Where(p => p.RatingEnabled == filterParams.RatingEnabled).ToList() : pages.OfType<IRatingPage>().ToList();


            //var reviews = GetReviews(ratingInterfacePages);


            foreach (var ratingPage in ratingInterfacePages)
            {
                var ratingContent = (IContent)ratingPage;
                var ratings = _reviewService.GetReviews(ratingContent.ContentLink);

                if (ratings == null)
                {
                    continue;
                }

                var ratingsList = ratings.ToList();

                var ratingTableData = new RatingTableDataDto
                {
                    PageName = ratingContent.Name,
                    RatingEnabled = ratingPage.RatingEnabled,
                    ContentId = ratingContent.ContentLink.ID.ToString(),
                    ContentUrl = PageEditing.GetEditUrl(ratingContent.ContentLink),
                    PageFriendlyUrl = _urlResolver.GetUrl(ratingContent.ContentLink)
                };

                if (ratingsList.Any())
                {
                    if (filterParams != null)
                    {
                        ratingsList = ratingsList.Where(r => !filterParams.DateFrom.HasValue || r.Created.Date >= filterParams.DateFrom.Value.Date &&
                                                             (!filterParams.DateTo.HasValue || r.Created.Date <= filterParams.DateTo.Value.Date)).ToList();
                    }

                    var allCommentsDto = ratingsList.Where(r => !string.IsNullOrEmpty(r.Text))
                                   .Select(r => new RatingCommentDto { CommentText = r.Text, CommentDate = r.Created }).ToList();

                    ratingTableData.ShortComments = new List<RatingCommentDto>(allCommentsDto.OrderByDescending(c => c.CommentDate).Take(5)
                        .Select(c => new RatingCommentDto
                        {
                            CommentText = c.CommentText.Length > 500 ? c.CommentText.Substring(0, 500) + "..." : c.CommentText,
                            CommentDate = c.CommentDate
                        }));

                    ratingTableData.Comments = new List<RatingCommentDto>(allCommentsDto.Select(comment => new RatingCommentDto
                    {
                        CommentText = comment.CommentText + "{nl}",
                        CommentDate = comment.CommentDate
                    }));

                    ratingTableData.Rating = (int)ratingsList.Select(r => r.Rating).Sum();
                    ratingTableData.LastCommentDate = allCommentsDto.OrderByDescending(c => c.CommentDate).First().CommentDate;
                    ratingTableData.RatingCount = ratingsList.Count;
                    ratingTableData.PositiveRatingCount = ratingsList.Count(r => r.Rating > 0);
                    ratingTableData.NegativeRatingCount = ratingsList.Count(r => r.Rating < 0);
                }

                if (filterParams == null || !filterParams.OnlyRatedPages || (filterParams.OnlyRatedPages && ratingsList.Any()))
                {
                    ratingTableDataList.Add(ratingTableData);
                }
            }
            ratingDataList.RatingData = ratingTableDataList;

            return ratingDataList;
        }
예제 #9
0
        protected virtual HeaderViewModel CreateViewModel(IContent currentContent, HomePage homePage)
        {
            var menuItems      = new List <MenuItemViewModel>();
            var homeLanguage   = homePage.Language.DisplayName;
            var layoutSettings = _settingsService.GetSiteSettings <LayoutSettings>();
            var filter         = new FilterContentForVisitor();

            menuItems = layoutSettings?.MainMenu?.FilteredItems.Where(x =>
            {
                var _menuItem = _contentLoader.Get <IContent>(x.ContentLink);
                MenuItemBlock _menuItemBlock;
                if (_menuItem is MenuItemBlock)
                {
                    _menuItemBlock = _menuItem as MenuItemBlock;
                    if (_menuItemBlock.Link == null)
                    {
                        return(true);
                    }
                    var linkedItem = UrlResolver.Current.Route(new UrlBuilder(_menuItemBlock.Link));
                    if (filter.ShouldFilter(linkedItem))
                    {
                        return(false);
                    }
                    return(true);
                }
                return(true);
            }).Select(x =>
            {
                var content = _contentLoader.Get <IContent>(x.ContentLink);
                MenuItemBlock _;
                MenuItemViewModel menuItem;
                if (content is MenuItemBlock)
                {
                    _        = content as MenuItemBlock;
                    menuItem = new MenuItemViewModel
                    {
                        Name       = _.Name,
                        ButtonText = _.ButtonText,
                        //TeaserText = _.TeaserText,
                        Uri = _.Link == null ? string.Empty : _urlResolver.GetUrl(new UrlBuilder(_.Link.ToString()), new UrlResolverArguments()
                        {
                            ContextMode = ContextMode.Default
                        }),
                        ImageUrl   = !ContentReference.IsNullOrEmpty(_.MenuImage) ? _urlResolver.GetUrl(_.MenuImage) : "",
                        ButtonLink = _.ButtonLink?.Host + _.ButtonLink?.PathAndQuery,
                        ChildLinks = _.ChildItems?.ToList() ?? new List <GroupLinkCollection>()
                    };
                }
                else
                {
                    menuItem = new MenuItemViewModel
                    {
                        Name = content.Name,
                        Uri  = _urlResolver.GetUrl(content.ContentLink),
                        //ChildLinks = new List<GroupLinkCollection>()
                    };
                }

                if (!_contextModeResolver.CurrentMode.EditOrPreview())
                {
                    var keyDependency = new List <string>
                    {
                        _contentCacheKeyCreator.CreateCommonCacheKey(homePage.ContentLink), // If The HomePage updates menu (remove MenuItems)
                        _contentCacheKeyCreator.CreateCommonCacheKey(x.ContentLink)
                    };
                }

                return(menuItem);
            }).ToList();

            return(new HeaderViewModel
            {
                HomePage = homePage,
                CurrentContentLink = currentContent?.ContentLink,
                CurrentContentGuid = currentContent?.ContentGuid ?? Guid.Empty,
                UserLinks = new LinkItemCollection(),
                IsReadonlyMode = _databaseMode.DatabaseMode == DatabaseMode.ReadOnly,
                MenuItems = menuItems ?? new List <MenuItemViewModel>(),
                IsInEditMode = _contextModeResolver.CurrentMode.EditOrPreview()
            });
        }
        public RatingListDto GetRatings([FromUri] RatingFilterDto filterParams)
        {
            var ratingDataList = new RatingListDto();
            var filter         = new FilterContentForVisitor();
            var pages          = GetChildPages(ContentReference.StartPage).ToList();

            filter.Filter(pages);
            var ratingTableDataList = new List <RatingTableDataDto>();

            var ratingInterfacePages = filterParams != null && filterParams.RatingEnabled
                ? pages.OfType <IRatingPage>().Where(p => p.RatingEnabled == filterParams.RatingEnabled).ToList()
                : pages.OfType <IRatingPage>().ToList();


            //var reviews = GetReviews(ratingInterfacePages);


            foreach (var ratingPage in ratingInterfacePages)
            {
                var ratingContent = (IContent)ratingPage;
                var ratings       = _reviewService.GetReviews(ratingContent.ContentLink);

                if (ratings == null)
                {
                    continue;
                }

                var ratingsList = ratings.ToList();

                var ratingTableData = new RatingTableDataDto
                {
                    PageName        = ratingContent.Name,
                    RatingEnabled   = ratingPage.RatingEnabled,
                    ContentId       = ratingContent.ContentLink.ID.ToString(),
                    ContentUrl      = PageEditing.GetEditUrl(ratingContent.ContentLink),
                    PageFriendlyUrl = _urlResolver.GetUrl(ratingContent.ContentLink)
                };

                if (ratingsList.Any())
                {
                    if (filterParams != null)
                    {
                        ratingsList = ratingsList.Where(r =>
                                                        !filterParams.DateFrom.HasValue || r.Created.Date >= filterParams.DateFrom.Value.Date &&
                                                        (!filterParams.DateTo.HasValue || r.Created.Date <= filterParams.DateTo.Value.Date))
                                      .ToList();
                    }

                    var allCommentsDto = ratingsList.Where(r => !string.IsNullOrEmpty(r.Text))
                                         .Select(r => new RatingCommentDto {
                        CommentText = r.Text, CommentDate = r.Created
                    }).ToList();

                    ratingTableData.ShortComments = new List <RatingCommentDto>(allCommentsDto
                                                                                .OrderByDescending(c => c.CommentDate).Take(5)
                                                                                .Select(c => new RatingCommentDto
                    {
                        CommentText =
                            c.CommentText.Length > 500 ? c.CommentText.Substring(0, 500) + "..." : c.CommentText,
                        CommentDate = c.CommentDate
                    }));

                    ratingTableData.Comments = new List <RatingCommentDto>(allCommentsDto.Select(comment =>
                                                                                                 new RatingCommentDto
                    {
                        CommentText = comment.CommentText + "{nl}",
                        CommentDate = comment.CommentDate
                    }));

                    ratingTableData.Rating          = (int)ratingsList.Select(r => r.Rating).Sum();
                    ratingTableData.LastCommentDate =
                        allCommentsDto.OrderByDescending(c => c.CommentDate).First().CommentDate;
                    ratingTableData.RatingCount         = ratingsList.Count;
                    ratingTableData.PositiveRatingCount = ratingsList.Count(r => r.Rating > 0);
                    ratingTableData.NegativeRatingCount = ratingsList.Count(r => r.Rating < 0);
                }

                if (filterParams == null || !filterParams.OnlyRatedPages ||
                    (filterParams.OnlyRatedPages && ratingsList.Any()))
                {
                    ratingTableDataList.Add(ratingTableData);
                }
            }

            ratingDataList.RatingData = ratingTableDataList;

            return(ratingDataList);
        }
예제 #11
0
        public static IEnumerable <PageData> GetSiblings(this PageData pageData, IContentLoader contentLoader)
        {
            var filter = new FilterContentForVisitor();

            return(contentLoader.GetChildren <PageData>(pageData.ParentLink).Where(page => !filter.ShouldFilter(page)));
        }
        protected virtual HeaderViewModel CreateViewModel(IContent currentContent, HomePage homePage, FoundationContact contact, bool isBookmarked)
        {
            var menuItems         = new List <MenuItemViewModel>();
            var homeLanguage      = homePage.Language.DisplayName;
            var layoutSettings    = _settingsService.GetSiteSettings <LayoutSettings>();
            var referenceSettings = _settingsService.GetSiteSettings <ReferencePageSettings>();
            var filter            = new FilterContentForVisitor();

            menuItems = layoutSettings?.MainMenu?.FilteredItems.Where(x =>
            {
                var _menuItem = _contentLoader.Get <IContent>(x.ContentLink);
                MenuItemBlock _menuItemBlock;
                if (_menuItem is MenuItemBlock)
                {
                    _menuItemBlock = _menuItem as MenuItemBlock;
                    if (_menuItemBlock.Link == null)
                    {
                        return(true);
                    }
                    var linkedItem = UrlResolver.Current.Route(new UrlBuilder(_menuItemBlock.Link));
                    if (filter.ShouldFilter(linkedItem))
                    {
                        return(false);
                    }
                    return(true);
                }
                return(true);
            }).Select(x =>
            {
                var itemCached = CacheManager.Get(x.ContentLink.ID + homeLanguage + ":" + Constant.CacheKeys.MenuItems) as MenuItemViewModel;
                if (itemCached != null && !PageEditing.PageIsInEditMode)
                {
                    return(itemCached);
                }
                else
                {
                    var content = _contentLoader.Get <IContent>(x.ContentLink);
                    MenuItemBlock _;
                    MenuItemViewModel menuItem;
                    if (content is MenuItemBlock)
                    {
                        _        = content as MenuItemBlock;
                        menuItem = new MenuItemViewModel
                        {
                            Name       = _.Name,
                            ButtonText = _.ButtonText,
                            TeaserText = _.TeaserText,
                            Uri        = _.Link == null ? string.Empty : _urlResolver.GetUrl(new UrlBuilder(_.Link.ToString()), new UrlResolverArguments()
                            {
                                ContextMode = ContextMode.Default
                            }),
                            ImageUrl   = !ContentReference.IsNullOrEmpty(_.MenuImage) ? _urlResolver.GetUrl(_.MenuImage) : "",
                            ButtonLink = _.ButtonLink?.Host + _.ButtonLink?.PathAndQuery,
                            ChildLinks = _.ChildItems?.ToList() ?? new List <GroupLinkCollection>()
                        };
                    }
                    else
                    {
                        menuItem = new MenuItemViewModel
                        {
                            Name       = content.Name,
                            Uri        = _urlResolver.GetUrl(content.ContentLink),
                            ChildLinks = new List <GroupLinkCollection>()
                        };
                    }

                    if (!PageEditing.PageIsInEditMode)
                    {
                        var keyDependency = new List <string>
                        {
                            _contentCacheKeyCreator.CreateCommonCacheKey(homePage.ContentLink), // If The HomePage updates menu (remove MenuItems)
                            _contentCacheKeyCreator.CreateCommonCacheKey(x.ContentLink)
                        };

                        var eviction = new CacheEvictionPolicy(TimeSpan.FromDays(1), CacheTimeoutType.Sliding, keyDependency);
                        CacheManager.Insert(x.ContentLink.ID + homeLanguage + ":" + Constant.CacheKeys.MenuItems, menuItem, eviction);
                    }

                    return(menuItem);
                }
            }).ToList();

            return(new HeaderViewModel
            {
                HomePage = homePage,
                CurrentContentLink = currentContent?.ContentLink,
                CurrentContentGuid = currentContent?.ContentGuid ?? Guid.Empty,
                UserLinks = new LinkItemCollection(),
                Name = contact?.FirstName ?? "",
                IsBookmarked = isBookmarked,
                IsReadonlyMode = _databaseMode.DatabaseMode == DatabaseMode.ReadOnly,
                MenuItems = menuItems ?? new List <MenuItemViewModel>(),
                LoginViewModel = new LoginViewModel
                {
                    ResetPasswordPage = referenceSettings?.ResetPasswordPage ?? ContentReference.StartPage
                },
                RegisterAccountViewModel = new RegisterAccountViewModel
                {
                    Address = new AddressModel()
                },
            });
        }
        public ViewResult Index(SitePageData currentPage, string orderBy = "ASC")
        {
            IPageViewModel <SitePageData> model = CreateModel(currentPage);

            if (currentPage is IContentWithComments)
            {
                var commentsModel = new CommentsPageViewModel(currentPage);

                // get (or create if necessary) the start page's comments folder
                var start = repo.Get <StartPage>(ContentReference.StartPage);

                ContentReference siteCommentsFolderReference;
                if (!ContentReference.IsNullOrEmpty(start.CommentFolder))
                {
                    siteCommentsFolderReference = start.CommentFolder;
                }
                else
                {
                    // create the site comments folder inside the "For This Site" block folder
                    ContentFolder siteCommentsFolder = repo.GetDefault <ContentFolder>(ContentReference.SiteBlockFolder);
                    siteCommentsFolder.Name     = "Comments";
                    siteCommentsFolderReference = repo.Save(siteCommentsFolder,
                                                            EPiServer.DataAccess.SaveAction.Publish,
                                                            EPiServer.Security.AccessLevel.NoAccess);

                    // set reference to the site comments folder on the start page
                    start = start.CreateWritableClone() as StartPage;
                    start.CommentFolder = siteCommentsFolderReference;
                    repo.Save(start,
                              EPiServer.DataAccess.SaveAction.Publish,
                              EPiServer.Security.AccessLevel.NoAccess);
                }

                // check if the Start page has its CommentFolder set
                commentsModel.StartPageHasCommentsFolder = (!ContentReference.IsNullOrEmpty(start.CommentFolder));

                bool publishToStartComments = false;

                if (commentsModel.StartPageHasCommentsFolder)
                {
                    // check if the current user has Publish rights to the Start page's CommentFolder
                    ContentFolder startCommentsFolder = repo.Get <ContentFolder>(start.CommentFolder);
                    publishToStartComments = (startCommentsFolder.QueryDistinctAccess(EPiServer.Security.AccessLevel.Publish));
                }

                bool publishToThisPagesComments = false;

                if (!ContentReference.IsNullOrEmpty(currentPage.CommentFolder))
                {
                    // if current page has CommentFolder, get the comments
                    IEnumerable <CommentBlock> blocks = repo.GetChildren <CommentBlock>(currentPage.CommentFolder);

                    // filter comments to only show those:
                    // 1) with a partial view
                    // 2) the current user can access
                    // 3) are published
                    var filter       = new FilterContentForVisitor(TemplateTypeCategories.MvcPartialView, string.Empty);
                    var listOfBlocks = blocks.OfType <IContent>().ToList();
                    filter.Filter(listOfBlocks);
                    var listOfComments = listOfBlocks.OfType <CommentBlock>();

                    // sort the comments by publish date
                    if (orderBy == "ASC")
                    {
                        commentsModel.Comments = listOfComments.OrderBy(c => c.When);
                    }
                    else
                    {
                        commentsModel.Comments = listOfComments.OrderByDescending(c => c.When);
                    }

                    commentsModel.ThisPageHasAtLeastOneComment = (commentsModel.Comments.Count() > 0);

                    // check if the current user has Publish rights to the current page's CommentFolder
                    ContentFolder commentsFolder = repo.Get <ContentFolder>(currentPage.CommentFolder);
                    publishToThisPagesComments = (commentsFolder.QueryDistinctAccess(EPiServer.Security.AccessLevel.Publish));
                }

                // set flag to indicate the current user can add comments because either:
                // 1) they have Publish rights to Start's CommentFolder
                // 2) they have Publish rights to current page's CommentFolder
                commentsModel.CurrentUserCanAddComments = (publishToStartComments || publishToThisPagesComments);

                model = commentsModel;
            }

            return(View(string.Format("~/Views/{0}/Index.cshtml", currentPage.GetOriginalType().Name), model));
        }