private UrlRule GetCategoryLinkRule(DNNArticleInfo article, CategoryInfo category, ModuleInfo module, List <UrlRule> rules) { object selectedArticleList = ModuleSetting(MySettings.SelectedArticleList, module, -1); //List module to use to show the results if (selectedArticleList.ToString() == "-1") { return(null); } object selectedModule = ModuleSetting(MySettings.SelectedModule, module, -1); //base DNNArticle module string param = string.Format("cid={0}&smid={1}&tmid={2}", category.ItemID, selectedArticleList, selectedModule); bool duplicate = rules.Any(urlRule => (urlRule.Parameters.StartsWith(param)) && urlRule.TabId == module.TabID); UrlRule rule = null; if (!duplicate) { rule = new UrlRule { CultureCode = module.CultureCode, TabId = module.TabID, RuleType = UrlRuleType.Module, Parameters = param, Action = UrlRuleAction.Rewrite, Url = CleanupUrl(category.Title), RemoveTab = !_includePageName }; rule.Url = FullCategoryTitleAsPath(category, module.ModuleID); } return(rule); }
private SitemapUrl GetBlogUrl(DNNArticleInfo article) { if (!_modulePriority.ContainsKey(article.ModuleId)) { var settings = new ModuleController().GetModuleSettings(article.ModuleId); if (!string.IsNullOrEmpty(Convert.ToString(settings[MySettings.SiteMapPriority]))) { try { _modulePriority.Add(article.ModuleId, Convert.ToSingle(settings[MySettings.SiteMapPriority])); } catch (Exception) { _modulePriority.Add(article.ModuleId, 0.5f); } } else { _modulePriority.Add(article.ModuleId, 0.5f); } if (!string.IsNullOrEmpty(Convert.ToString(settings[MySettings.SiteMapPriorityFieldId]))) { _modulePriorityFieldId.Add(article.ModuleId, Convert.ToInt32(settings[MySettings.SiteMapPriorityFieldId])); } else { _modulePriorityFieldId.Add(article.ModuleId, -1); } } float priority = _modulePriority[article.ModuleId]; int fieldid = _modulePriorityFieldId[article.ModuleId]; if (!Null.IsNull(fieldid)) { var o = new FieldValueController().GetFieldValue(fieldid, article.ItemId); if (o != null) { var prio = o.GetValue(); if (!string.IsNullOrEmpty(prio)) { priority = Convert.ToSingle(prio); } } } var pageUrl = new SitemapUrl { Url = Modules.DNNArticle.TokenProcessor.GetViewURL(article, Null.NullInteger, Null.NullInteger), Priority = priority, LastModified = article.PublishDate, ChangeFrequency = SitemapChangeFrequency.Weekly }; return(pageUrl); }
private UrlRule GetArticleRule(DNNArticleInfo article, ModuleInfo sourcemodule, List <string> urlTemplates, List <UrlRule> rules) { var viewmoduleTabid = int.Parse(sourcemodule.ModuleSettings["ViewTab"].ToString()); var urlcandidate = ""; ////do we already have a rule for this article on this tab? if (rules.Any(urlRule => (urlRule.TabId == viewmoduleTabid && urlRule.Parameters == "ArticleId=" + article.ItemId))) { return(null); } var a = ""; if (article.ItemId == 1379 || article.ItemId == 1480) { a = "stop"; } Dictionary <string, string> fieldlist = LoadTokenValues(urlTemplates, article); //try different template suggestions to find a valid and unique friendlyUrl foreach (string urlTemplate in urlTemplates) { if (MakeUrl(out urlcandidate, viewmoduleTabid, urlTemplate, fieldlist, rules)) { break; } } //if no unique Url can be created then we don't make a new rule if (string.IsNullOrEmpty(urlcandidate)) { return(null); } var rule = new UrlRule { CultureCode = sourcemodule.CultureCode, TabId = viewmoduleTabid, // module.TabID, RuleType = UrlRuleType.Module, Parameters = "ArticleId=" + article.ItemId, Action = UrlRuleAction.Rewrite, Url = urlcandidate, RemoveTab = !_includePageName }; return(rule); }
private Dictionary <string, string> LoadTokenValues(List <string> urlTemplates, DNNArticleInfo article) { var fieldlist = new Dictionary <string, string>(); const string pattern = @"\[(.*?)\]"; var query = String.Join("", urlTemplates.ToArray()); var matches = Regex.Matches(query, pattern); foreach (Match m in matches) { var token = m.Groups[1].ToString(); switch (token) { case "ITEMID": AddRegularFieldValue("ITEMID", article.ItemId.ToString(CultureInfo.InvariantCulture), fieldlist, urlTemplates); break; case "TITLE": AddRegularFieldValue("TITLE", article.Title, fieldlist, urlTemplates); break; case "SEOTITLE": AddRegularFieldValue("SEOTITLE", article.SEOTitle, fieldlist, urlTemplates); break; case "PUBLISHDATE": AddRegularFieldValue("PUBLISHDATE", article.PublishDate.ToShortDateString(), fieldlist, urlTemplates); break; case "PUBLISHYEAR": AddRegularFieldValue("PUBLISHYEAR", article.PublishDate.Year.ToString(CultureInfo.InvariantCulture), fieldlist, urlTemplates); break; case "USERNAME": AddRegularFieldValue("USERNAME", article.CreatedByUserName, fieldlist, urlTemplates); break; default: //non-regular field. Maybe a ExtraField AddRegularFieldValue(token, GetExtraFieldValue(article.ItemId, article.ModuleId, token), fieldlist, urlTemplates); //if (!fieldlist.ContainsKey(token)) //{ // var value = GetExtraFieldValue(article.ItemId, moduleId, token); // fieldlist.Add(token, value); //} break; } } return(fieldlist); }