/// <summary> /// Gets the children for specific a specific page /// </summary> /// <param name="session">The session.</param> /// <param name="page">The page.</param> /// <returns></returns> /// <exception cref="System.NullReferenceException">StructureInfo</exception> public static IEnumerable <IPage> GetChildrenFor(this ISyncAdvancedSessionOperation session, IPage page) { try { var context = new BrickPileContext(HttpContext.Current.Request.RequestContext); if (context.NavigationContext != null && context.NavigationContext.OpenPages != null) { return(context.NavigationContext.OpenPages.Where(x => x.Parent != null && x.Parent.Id == page.Id)); } Trie trie = context.Trie; if (trie == null) { throw new NullReferenceException("The RouteData DataToken does not contains the Trie object"); } IEnumerable <TrieNode> nodes = trie.RootNode.Flatten(n => n.Children); TrieNode node = nodes.SingleOrDefault(n => n.PageId.CompareToIgnoreDraftId(page.Id)); return(node != null ? ((DocumentSession)session).Load <IPage>(node.Children.Select(n => n.PageId).ToArray()) .OrderBy(p => p.Metadata.SortOrder) : Enumerable.Empty <IPage>()); } catch (ArgumentNullException exception) {} return(null); }
/// <summary> /// Actions the specified URL helper. /// </summary> /// <param name="urlHelper">The URL helper.</param> /// <param name="pageReference">The page reference.</param> /// <returns></returns> public static string Action(this UrlHelper urlHelper, PageReference pageReference) { if (pageReference == null || string.IsNullOrEmpty(pageReference.Id)) { return(string.Empty); } var context = new BrickPileContext(urlHelper.RequestContext); var node = context.Trie.Get(pageReference.Id); return(node.Url); }
/// <summary> /// Creates the brick pile context. /// </summary> /// <param name="requestContext">The request context.</param> private void CreateContext(RequestContext requestContext) { var currentPage = requestContext.RouteData.GetCurrentPage <IPage>(); if (currentPage == null) { return; } BrickPileContext context = this.contextFactory.Create(requestContext); requestContext.RouteData.ApplyTrie(context.Trie); requestContext.RouteData.ApplyCurrentContext(context); requestContext.RouteData.ApplyPages(context.NavigationContext.OpenPages); }
/// <summary> /// Gets the ancestors for a specific page /// </summary> /// <param name="session">The session.</param> /// <param name="page">The page.</param> /// <param name="includeStartPage">if set to <c>true</c> [include start page].</param> /// <returns></returns> /// <exception cref="System.NullReferenceException">StructureInfo</exception> public static IEnumerable <IPage> GetAncestorsFor(this ISyncAdvancedSessionOperation session, IPage page, bool includeStartPage = false) { try { var context = new BrickPileContext(HttpContext.Current.Request.RequestContext); if (context.Trie == null) { throw new NullReferenceException("The RouteData DataToken does not contains the Trie object"); } IEnumerable <TrieNode> nodes = context.Trie.GetAncestors(page.Id, includeStartPage); return(((DocumentSession)session).Load <IPage>(nodes.Select(n => n.PageId))); } catch (ArgumentNullException exception) {} return(null); }
/// <summary> /// Gets the parent for a specific page /// </summary> /// <typeparam name="T"></typeparam> /// <param name="session">The session.</param> /// <param name="page">The page.</param> /// <returns></returns> public static T GetParentFor <T>(this ISyncAdvancedSessionOperation session, IPage page) where T : IPage { if (page.Parent == null) { return(default(T)); } try { var context = new BrickPileContext(HttpContext.Current.Request.RequestContext); if (context.NavigationContext.OpenPages.Any(x => x.Id == page.Parent.Id)) { return((T)context.NavigationContext.OpenPages.Single(x => x.Id == page.Parent.Id)); } } catch (ArgumentNullException exception) {} return(page.Parent == null ? default(T) : ((DocumentSession)session).Load <T>(page.Parent.Id)); }
/// <summary> /// Gets the start page for BrickPile /// </summary> /// <param name="session">The session.</param> /// <returns></returns> /// <exception cref="System.NullReferenceException">StructureInfo</exception> public static IPage GetStartPage(this ISyncAdvancedSessionOperation session) { try { var context = new BrickPileContext(HttpContext.Current.Request.RequestContext); if (context.NavigationContext.StartPage != null) { return(context.NavigationContext.StartPage); } Trie trie = context.Trie; if (trie == null) { throw new NullReferenceException("The RouteData DataToken does not contains the Trie object."); } return(((DocumentSession)session).Load <Page>(trie.RootNode.PageId)); } catch (ArgumentNullException exception) {} return(null); }
/// <summary> /// Applies the current context. /// </summary> /// <param name="routeData">The route data.</param> /// <param name="context">The context.</param> internal static void ApplyCurrentContext(this RouteData routeData, BrickPileContext context) { routeData.DataTokens["brickpile:context"] = context; }