public override SiteMapNode FindSiteMapNode(string rawUrl)
        {
            TraceInfo("FindSiteMapNode({0})", rawUrl);

            var portal         = PortalContext;
            var serviceContext = portal.ServiceContext;
            var website        = portal.Website.ToEntityReference();

            var applicationPath = ApplicationPath.Parse(rawUrl);
            var path            = new UrlBuilder(applicationPath.PartialPath).Path;

            CrmSiteMapNode node;

            if (TryGetAuthorArchiveNode(serviceContext, website, path, out node) ||
                TryGetMonthArchiveNode(serviceContext, website, path, out node))
            {
                return(ReturnNodeIfAccessible(node, GetAccessDeniedNode));
            }

            if (TryGetBlogPostNodeById(serviceContext, website, path, out node) ||
                TryGetBlogNodeByPartialUrl(serviceContext, website, path, out node) ||
                TryGetBlogPostNodeByPartialUrl(serviceContext, website, path, out node))
            {
                return(node);
            }

            if (TryGetTagArchiveNode(serviceContext, website, path, out node) ||
                TryGetWebFileNode(serviceContext, website, path, out node))
            {
                return(ReturnNodeIfAccessible(node, GetAccessDeniedNode));
            }

            return(null);
        }
        private static IHtmlString Breadcrumb(Func <IEnumerable <Tuple <SiteMapNode, SiteMapNodeType> > > getSiteMapPath)
        {
            var path = getSiteMapPath().ToList();

            if (!path.Any())
            {
                return(null);
            }

            var items = new StringBuilder();

            foreach (var node in path)
            {
                var li = new TagBuilder("li");

                if (node.Item2 == SiteMapNodeType.Current)
                {
                    li.AddCssClass("active");
                    li.SetInnerText(node.Item1.Title);
                }
                else
                {
                    var breadCrumbUrl = node.Item1.Url;

                    if (ContextLanguageInfo.IsCrmMultiLanguageEnabledInWebsite(PortalContext.Current.Website) &&
                        ContextLanguageInfo.DisplayLanguageCodeInUrl)
                    {
                        breadCrumbUrl = ContextLanguageInfo
                                        .PrependLanguageCode(ApplicationPath.Parse(node.Item1.Url))
                                        .AbsolutePath;
                    }

                    var a = new TagBuilder("a");

                    a.Attributes["href"] = breadCrumbUrl;
                    a.SetInnerText(node.Item1.Title);

                    li.InnerHtml += a.ToString();
                }

                items.AppendLine(li.ToString());
            }

            var ul = new TagBuilder("ul");

            ul.AddCssClass("breadcrumb");
            ul.InnerHtml += items.ToString();

            return(new HtmlString(ul.ToString()));
        }
        public override SiteMapNode FindSiteMapNode(string rawUrl)
        {
            TraceInfo("FindSiteMapNode({0})", rawUrl);

            var portal  = PortalContext;
            var context = portal.ServiceContext;
            var website = portal.Website;

            var applicationPath = ApplicationPath.Parse(rawUrl);
            var path            = new UrlBuilder(applicationPath.PartialPath).Path;

            var foundEvent = FindEvent(context, website, path);

            return(foundEvent != null?GetAccessibleNodeOrAccessDeniedNode(context, foundEvent) : null);
        }
Beispiel #4
0
        public override SiteMapNode FindSiteMapNode(string rawUrl)
        {
            TraceInfo("FindSiteMapNode({0})", rawUrl);

            var portal  = PortalContext;
            var context = portal.ServiceContext;
            var website = portal.Website;

            var applicationPath = ApplicationPath.Parse(rawUrl);
            var path            = new UrlBuilder(applicationPath.PartialPath).Path;

            // match on a regular webpage path followed by a thread Id segment

            const string pattern     = @"(.+)/(\{?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}?)";
            var          match       = Regex.Match(path, pattern, RegexOptions.IgnoreCase);
            var          isThreadUrl = match.Success && match.Groups.Count == 3;

            var forumPath = isThreadUrl
                                ? match.Groups[1].Value
                                : path;

            var forum = FindForum(context, website, forumPath);

            if (forum == null)
            {
                return(null);
            }

            Entity foundThread = null;

            if (isThreadUrl)
            {
                var threadId = new Guid(match.Groups[2].Value);

                var forumThreads = context.CreateQuery("adx_communityforumthread")
                                   .Where(e => e.GetAttributeValue <EntityReference>("adx_forumid") == forum.ToEntityReference())
                                   .Where(e => e.GetAttributeValue <Guid>("adx_communityforumthreadid") == threadId);

                foundThread = forumThreads.FirstOrDefault();
            }

            if (foundThread == null)
            {
                return(GetAccessibleNodeOrAccessDeniedNode(context, forum));
            }

            return(GetAccessibleNodeOrAccessDeniedNode(context, foundThread));
        }