Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }