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