public NavigationViewComponent( NavigationTreeBuilderService siteMapTreeBuilder, IEnumerable <INavigationNodePermissionResolver> permissionResolvers, IEnumerable <IFindCurrentNode> nodeFinders, IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionContextAccesor, INodeUrlPrefixProvider prefixProvider, ILogger <NavigationViewComponent> logger) { builder = siteMapTreeBuilder; this.permissionResolvers = permissionResolvers; this.nodeFinders = nodeFinders; this.urlHelperFactory = urlHelperFactory; this.actionContextAccesor = actionContextAccesor; if (prefixProvider == null) { this.prefixProvider = new DefaultNodeUrlPrefixProvider(); } else { this.prefixProvider = prefixProvider; } log = logger; }
private async Task <TreeNode <NavigationNode> > BuildTreeInternal(NavigationTreeBuilderService service) { NavigationNode rootNav; var project = await projectService.GetCurrentProjectSettings(); IPage homePage = null; if ( project != null && project.UseDefaultPageAsRootNode && !string.IsNullOrEmpty(project.DefaultPageSlug) ) { //make the home page the "root" which contains all the other pages homePage = await pageService.GetPageBySlug(project.Id, project.DefaultPageSlug); } var urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccesor.ActionContext); var folderPrefix = prefixProvider.GetPrefix(); if ((homePage != null) && project.UseDefaultPageAsRootNode) { rootNav = new NavigationNode(); rootNav.IsRootNode = true; rootNav.Key = homePage.Id; rootNav.Text = homePage.Title; rootNav.Url = pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix); // urlHelper.Content("~/" + folderPrefix); } else { rootNav = new NavigationNode(); rootNav.IsRootNode = true; rootNav.Key = "pagesRoot"; rootNav.Title = "Home"; rootNav.Text = "Home"; rootNav.Url = pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix); // rootNav.Url = urlHelper.Content("~/" + folderPrefix); //rootNav.ChildContainerOnly = true; } var treeRoot = new TreeNode <NavigationNode>(rootNav); var rootList = await pageService.GetRootPages().ConfigureAwait(false); var rootListCount = rootList.Count(); var blogPosition = project.BlogPagePosition; if (project.AddBlogToPagesTree) { if (blogPosition > rootListCount) { blogPosition = rootListCount; } } var didAddBlog = false; if (rootListCount <= 1) { // if there are no pages we won't hit the loop below so go ahead and add the blog page if (project.AddBlogToPagesTree) { var node = new NavigationNode(); node.Key = project.BlogPageText; node.ParentKey = "RootNode"; node.Text = project.BlogPageText; if (project.BlogMenuLinksToNewestPost) { node.Action = "MostRecent"; node.Controller = "Blog"; node.Url = urlHelper.Action("MostRecent", "Blog"); } else { node.Action = "Index"; node.Controller = "Blog"; node.Url = urlHelper.Action("Index", "Blog"); } node.ComponentVisibility = project.BlogPageNavComponentVisibility; var blogNode = treeRoot.AddChild(node); didAddBlog = true; } } //rootList.Insert() var rootPosition = 1; foreach (var page in rootList) { var node = new NavigationNode(); if (!didAddBlog && (project.AddBlogToPagesTree && rootPosition == blogPosition)) { node.Key = project.BlogPageText; node.ParentKey = "RootNode"; node.Text = project.BlogPageText; if (project.BlogMenuLinksToNewestPost) { node.Action = "MostRecent"; node.Controller = "Blog"; node.Url = urlHelper.Action("MostRecent", "Blog"); } else { node.Action = "Index"; node.Controller = "Blog"; node.Url = urlHelper.Action("Index", "Blog"); } node.ComponentVisibility = project.BlogPageNavComponentVisibility; var blogNode = treeRoot.AddChild(node); node = new NavigationNode(); // new it up again for use below } if (project.UseDefaultPageAsRootNode && (homePage != null && homePage.Id == page.Id)) { rootPosition += 1; await AddChildNodes(treeRoot, project, folderPrefix).ConfigureAwait(false); continue; } node.Key = page.Id; node.ParentKey = page.ParentId; node.Text = page.Title; node.ViewRoles = page.ViewRoles; if (string.IsNullOrEmpty(folderPrefix)) { node.Url = urlHelper.RouteUrl(pageRouteHelper.PageIndexRouteName, new { slug = page.Slug }); } else { node.Url = urlHelper.RouteUrl(pageRouteHelper.FolderPageIndexRouteName, new { slug = page.Slug }); } // for unpublished pages PagesNavigationNodePermissionResolver // will look for projectid in CustomData and if it exists // filter node from view unless user has edit permissions if (!page.IsPublished) { node.CustomData = project.Id; } var treeNode = treeRoot.AddChild(node); await AddChildNodes(treeNode, project, folderPrefix).ConfigureAwait(false); rootPosition += 1; } return(treeRoot); }
private async Task <TreeNode <NavigationNode> > BuildTreeInternal(NavigationTreeBuilderService service) { NavigationNode rootNav; var project = await _projectService.GetCurrentProjectSettings(); IPage homePage = null; if ( project != null && project.UseDefaultPageAsRootNode && !string.IsNullOrEmpty(project.DefaultPageSlug) ) { //make the home page the "root" which contains all the other pages homePage = await _pageService.GetPageBySlug(project.DefaultPageSlug); } var rootList = await _pageService.GetRootPages().ConfigureAwait(false); var rootListCount = rootList.Count(); var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccesor.ActionContext); //var folderPrefix = _prefixProvider.GetPrefix(); if ((homePage != null) && project.UseDefaultPageAsRootNode) { rootNav = new NavigationNode { Key = homePage.Id, Text = homePage.Title, CreatedUtc = homePage.CreatedUtc, LastModifiedUtc = homePage.LastModified, ComponentVisibility = homePage.MenuFilters, ViewRoles = homePage.ViewRoles, Url = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = "" }) //_pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix) // urlHelper.Content("~/" + folderPrefix); }; } else { rootNav = new NavigationNode { Key = "pagesRoot", Title = "Home", Text = "Home", Url = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = "" }) }; } var treeRoot = new TreeNode <NavigationNode>(rootNav); var blogPosition = project.BlogPagePosition; if (project.AddBlogToPagesTree) { if (blogPosition > rootListCount) { blogPosition = rootListCount; } } var didAddBlog = false; if (rootListCount <= 1) { // if there are no pages we won't hit the loop below so go ahead and add the blog page if (project.AddBlogToPagesTree) { var node = new NavigationNode { Key = project.BlogPageText, Text = project.BlogPageText }; if (project.BlogMenuLinksToNewestPost) { node.NamedRoute = _blogRoutes.MostRecentPostRouteName; node.Url = urlHelper.RouteUrl(_blogRoutes.MostRecentPostRouteName); } else { node.NamedRoute = _blogRoutes.BlogIndexRouteName; node.Url = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName); node.ExcludeFromSearchSiteMap = true; } node.ComponentVisibility = project.BlogPageNavComponentVisibility; var blogNode = treeRoot.AddChild(node); didAddBlog = true; } } var rootPosition = 1; foreach (var page in rootList) { var node = new NavigationNode(); if (!didAddBlog && (project.AddBlogToPagesTree && rootPosition == blogPosition)) { node.Key = project.BlogPageText; //node.ParentKey = "RootNode"; node.Text = project.BlogPageText; if (project.BlogMenuLinksToNewestPost) { node.NamedRoute = _blogRoutes.MostRecentPostRouteName; node.Url = urlHelper.RouteUrl(_blogRoutes.MostRecentPostRouteName); } else { node.NamedRoute = _blogRoutes.BlogIndexRouteName; node.Url = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName); node.ExcludeFromSearchSiteMap = true; } node.ComponentVisibility = project.BlogPageNavComponentVisibility; var blogNode = treeRoot.AddChild(node); node = new NavigationNode(); // new it up again for use below } if (project.UseDefaultPageAsRootNode && (homePage != null && homePage.Id == page.Id)) { rootPosition += 1; await AddChildNodes(treeRoot, project, urlHelper).ConfigureAwait(false); continue; } node.Key = page.Id; //node.ParentKey = page.ParentId; node.Text = page.Title; node.ViewRoles = page.ViewRoles; node.ComponentVisibility = page.MenuFilters; node.CreatedUtc = page.CreatedUtc; node.LastModifiedUtc = page.LastModified; SetUrl(node, page, urlHelper); // for unpublished pages PagesNavigationNodePermissionResolver // will look for projectid in CustomData and if it exists // filter node from view unless user has edit permissions if (!page.HasPublishedVersion()) { node.CustomData = project.Id; } var treeNode = treeRoot.AddChild(node); await AddChildNodes(treeNode, project, urlHelper).ConfigureAwait(false); rootPosition += 1; } return(treeRoot); }
public Breadcrumbs(IServiceProvider services, NavigationTreeBuilderService builderService) { _builderService = builderService; _factory = services.GetRequiredService <IUrlHelperFactory>(); }