/// <summary> /// Creates a Friendly Url For the Item /// </summary> /// <param name="friendlyUrl">Object containing the relevant properties to create a friendly url from</param> /// <param name="provider">The active module provider</param> /// <param name="options">THe current friendly Url Options</param> /// <returns></returns> private static string MakeItemFriendlyUrl(FriendlyUrlInfo friendlyUrl, SocialUrlProvider provider, FriendlyUrlOptions options) { //calls back up the module provider to utilise the CleanNameForUrl method, which creates a safe Url using the current Friendly Url options. string friendlyUrlPath = provider.CleanNameForUrl(friendlyUrl.UrlFragment1, options); return(friendlyUrlPath); }
private static void BuildUrlIndexes(int portalId, SocialUrlProvider provider, FriendlyUrlOptions options, out Hashtable friendlyUrlIndex, out Hashtable queryStringIndex) { friendlyUrlIndex = new Hashtable(); queryStringIndex = new Hashtable(); //call database procedure to get list of FriendlyUrlInfoCol itemUrls = null; Data.DataProvider.Instance().GetSocialUrls(portalId, out itemUrls); List <TabInfo> childTabs = null; TabController tc = new TabController(); TabInfo groupParentTab = null; string groupParentTabPath = null; //get a list of child tabs for this request if (provider.GroupPagePathTabId > 0 && provider.HideGroupPagePath) { childTabs = DotNetNuke.Entities.Tabs.TabController.GetTabsByParent(provider.GroupPagePathTabId, portalId); groupParentTab = tc.GetTab(provider.GroupPagePathTabId, portalId, false); groupParentTabPath = provider.CleanNameForUrl(groupParentTab.TabName, options); } if (itemUrls != null) { //build up the dictionary foreach (FriendlyUrlInfo itemUrl in itemUrls) { //friendly url index - look up by entryid, find Url string furlKey = itemUrl.ItemKey; string furlValue = MakeItemFriendlyUrl(itemUrl, provider, options); if (friendlyUrlIndex.ContainsKey(furlKey) == false) { friendlyUrlIndex.Add(furlKey, furlValue); } //querystring index - look up by url, find querystring for the item string qsKey = furlValue.ToLower(); //the querystring lookup is the friendly Url value - but converted to lower case string itemQueryString = "&" + itemUrl.QueryStringKey + "=" + itemUrl.ItemId.ToString(); //the querystring that is rewritten for the url string qsValue = itemQueryString; //when not including the dnn page path into the friendly Url, then include the tabid in the querystring if (itemUrl.ItemType.ToLower() == "group" && provider.HideGroupPagePath == true && provider.GroupPagePathTabId > 0) { qsValue = "?TabId=" + provider.GroupPagePathTabId.ToString() + qsValue; } if (queryStringIndex.ContainsKey(qsKey) == false) { queryStringIndex.Add(qsKey, qsValue); } //if the options aren't standard, also add in some other versions that will identify the right entry but will get redirected if (options.PunctuationReplacement != "") { FriendlyUrlOptions altOptions = options.Clone(); altOptions.PunctuationReplacement = ""; //how the urls look with no replacement string altQsKey = MakeItemFriendlyUrl(itemUrl, provider, altOptions).ToLower(); //keys are always lowercase if (altQsKey != qsKey) { if (queryStringIndex.ContainsKey(altQsKey) == false) { queryStringIndex.Add(altQsKey, qsValue); } } } //now repeat for the child tabs if (childTabs != null && childTabs.Count > 0 && groupParentTab != null) { //derive the path of the child tabs in with the parent tab, and build up a set of urls that include the group name and the child tab name foreach (TabInfo childTab in childTabs) { string childPath = provider.CleanNameForUrl(childTab.TabName, options);//gets the cleaned tab name childPath = furlValue + "/" + provider.EnsureNotLeadingChar("/", childPath); //the child path is the user + the child tab path //add rewriting values string cpQsValue = "?TabId=" + childTab.TabID.ToString() + itemQueryString; string cpQsKey = childPath.ToLower(); if (queryStringIndex.ContainsKey(cpQsKey) == false) { queryStringIndex.Add(cpQsKey, cpQsValue); } //add friendly url paths string cpFurlKey = "t" + childTab.TabID.ToString() + furlKey; string cpFurlValue = childPath; if (friendlyUrlIndex.ContainsKey(cpFurlKey) == false) { friendlyUrlIndex.Add(cpFurlKey, cpFurlValue); } //add alternatives if (options.PunctuationReplacement != "") { FriendlyUrlOptions altOptions = options.Clone(); altOptions.PunctuationReplacement = ""; //how the urls look with no replacement string altQsKey = childPath + "/" + MakeItemFriendlyUrl(itemUrl, provider, altOptions).ToLower(); //keys are always lowercase if (altQsKey != qsKey) { if (queryStringIndex.ContainsKey(altQsKey) == false) { queryStringIndex.Add(altQsKey, cpQsValue); } } } } } } } }