/// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 7
0
 /// <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;
 }