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); }
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); }
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); }
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(); }
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())); }
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; }
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); }
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)); }