Exemple #1
0
        /// <summary>
        /// 获取访问过的版块信息
        /// </summary>
        /// <returns></returns>
        public static SimpleForumInfo[] GetVisitedForums()
        {
            string visitedForums = Utils.GetCookie("visitedforums");

            if (visitedForums == "")
            {
                return(new SimpleForumInfo[0]);
            }

            List <SimpleForumInfo> simpleForumList = new List <SimpleForumInfo>();

            foreach (string fid in visitedForums.Split(','))
            {
                foreach (ForumInfo forumInfo in Forums.GetForumList())
                {
                    if (forumInfo.Fid.ToString() == fid)
                    {
                        SimpleForumInfo simpleForumInfo = new SimpleForumInfo();
                        simpleForumInfo.Fid             = forumInfo.Fid;
                        simpleForumInfo.Name            = Utils.RemoveHtml(forumInfo.Name); //如果不过滤掉HTML代码,则如果版块名称中存在html代码,会出现js错误,并且快速发帖出显示也不正常
                        simpleForumInfo.Url             = Urls.ShowForumAspxRewrite(forumInfo.Fid, 1, forumInfo.Rewritename);
                        simpleForumInfo.Postbytopictype = forumInfo.Postbytopictype;
                        simpleForumInfo.Topictypes      = forumInfo.Topictypes;
                        simpleForumList.Add(simpleForumInfo);
                        break;
                    }
                }
            }
            return(simpleForumList.ToArray());
        }
Exemple #2
0
        /// <summary>
        /// 将主题置顶/解除置顶
        /// </summary>
        /// <param name="topiclist">要设置的主题列表</param>
        /// <param name="intValue">置顶级别( 0 为解除置顶)</param>
        /// <returns>更新主题个数</returns>
        public static int SetTopTopicList(int fid, string topiclist, short intValue)
        {
            //只有在应用memcached的情况下才可以使用主题缓存
            if ((mcci != null && mcci.ApplyMemCached) || (rci != null && rci.ApplyRedis))
            {
                //因为考虑到某些置顶主题是全局置顶所以这里一旦出现置顶操作,则清除所有置顶缓存信息
                foreach (ForumInfo forumInfo in Forums.GetForumList())
                {
                    if (forumInfo.Layer > 0)
                    {
                        Discuz.Cache.DNTCache.GetCacheService().RemoveObject("/Forum/ShowTopic/TopList/" + forumInfo.Fid + "/");
                    }
                }
            }

            if (SetTopicStatus(topiclist, "displayorder", intValue) > 0 && ResetTopTopicList() == 1)
            {
                return(1);
            }

            if (Utils.FileExists(Utils.GetMapPath(BaseConfigs.GetForumPath + "cache/topic/" + fid.ToString() + ".xml")))
            {
                File.Delete(Utils.GetMapPath(BaseConfigs.GetForumPath + "cache/topic/" + fid.ToString() + ".xml"));
            }

            return(-1);
        }
Exemple #3
0
        /// <summary>
        /// 获得最热论坛
        /// </summary>
        /// <returns></returns>
        public static ForumInfo GetHotForum()
        {
            ForumInfo forum = null;
            int       posts = 0;

            foreach (ForumInfo f in Forums.GetForumList())
            {
                if (f.Layer > 0 && f.Status > 0 && f.Posts > posts)
                {
                    posts = f.Posts;
                    forum = f;
                }
            }

            if (posts > 0)
            {
                return(forum);
            }

            foreach (ForumInfo f in Forums.GetForumList())
            {
                if (f.Layer > 0 && f.Status > 0)
                {
                    return(f);
                }
            }
            return(null);
        }
Exemple #4
0
        /// <summary>
        /// 获得论坛最新的20个主题的Rss描述
        /// </summary>
        /// <param name="ttl">TTL数值</param>
        /// <returns>Rss描述</returns>
        public static string GetRssXml(int ttl)
        {
            DNTCache cache      = DNTCache.GetCacheService();
            string   rssContent = cache.RetrieveObject("/Forum/RSS/Index") as string;

            if (rssContent == null)
            {
                UserGroupInfo guestinfo = UserGroups.GetUserGroupInfo(7);
                StringBuilder forumlist = new StringBuilder();//允许访问的板块Id列表

                foreach (ForumInfo f in Forums.GetForumList())
                {
                    //当前版块允许rss订阅
                    if (f.Allowrss == 1)
                    {
                        //板块有权限设置信息时
                        if (!Utils.StrIsNullOrEmpty(f.Viewperm))
                        {
                            if (Utils.InArray("7", f.Viewperm, ","))
                            {
                                forumlist.AppendFormat(",{0}", f.Fid);
                            }
                        }
                        else
                        {
                            if (guestinfo.Allowvisit == 1)
                            {
                                forumlist.AppendFormat(",{0}", f.Fid);
                            }
                        }
                    }

                    //if (f.Allowrss == 0)
                    //    forumlist.AppendFormat(",{0}", f.Fid);
                    //else
                    //{
                    //    //板块权限设置为空,按照用户组权限走,RSS仅检查游客权限
                    //    if (Utils.StrIsNullOrEmpty(f.Viewperm))
                    //    {
                    //        if (guestinfo.Allowvisit == 0)
                    //            forumlist.AppendFormat(",{0}", f.Fid);
                    //    }
                    //    else
                    //    {
                    //        if (!Utils.InArray("7", f.Viewperm, ","))
                    //            forumlist.AppendFormat(",{0}", f.Fid);
                    //    }
                    //}
                }
                rssContent = Discuz.Data.Feeds.BuildRssOutput(ttl, forumlist.ToString().Trim(','), "");
                cache.AddObject("/Forum/RSS/Index", rssContent, ttl * 60);
            }
            return(rssContent);
        }
Exemple #5
0
        /// <summary>
        /// 通过版主用户名获取其管理的版块列表
        /// </summary>
        /// <param name="moderatorUserName"></param>
        /// <returns></returns>
        public static string GetFidListByModerator(string moderatorUserName)
        {
            string fidList = "";

            foreach (ForumInfo forumInfo in Forums.GetForumList())
            {
                if (("," + forumInfo.Moderators + ",").Contains("," + moderatorUserName + ","))
                {
                    fidList += forumInfo.Fid + ",";
                }
            }
            return(fidList.TrimEnd(','));
        }
Exemple #6
0
        /// <summary>
        /// 获得版主所见下拉列表选项
        /// </summary>
        /// <param name="username">版主用户名</param>
        /// <returns></returns>
        public static string GetModerDropdownOptions(string username)
        {
            StringBuilder stringbuilder = new StringBuilder();

            foreach (ForumInfo f in Forums.GetForumList())
            {
                if (Utils.InArray(username, f.Moderators))
                {
                    stringbuilder.AppendFormat("<option value=\"{0}\">{1}</option>", f.Fid, f.Name.Trim());
                }
            }
            return(stringbuilder.ToString());
        }
Exemple #7
0
        /// <summary>
        /// 获取当前版块及子版块fid列表
        /// </summary>
        /// <param name="fid">版块ID</param>
        private static string SubForumList(int fid)
        {
            string subfidList = fid.ToString() + ",";

            foreach (ForumInfo forumInfo in Forums.GetForumList())
            {
                if (("," + forumInfo.Parentidlist + ",").IndexOf("," + fid + ",") >= 0)
                {
                    subfidList += forumInfo.Fid + ",";
                }
            }
            return(subfidList.TrimEnd(','));
        }
Exemple #8
0
        /// <summary>
        /// 前台版块列表弹出菜单
        /// </summary>
        /// <param name="usergroupid">用户组id</param>
        /// <param name="userid">当前用户id</param>
        /// <param name="extname">扩展名称</param>
        /// <returns>版块列表弹出菜单</returns>
        public static string GetForumListMenuDivCache(int usergroupid, int userid, string extname)
        {
            DNTCache cache = DNTCache.GetCacheService();
            string   str   = cache.RetrieveObject("/Forum/ForumListMenuDiv") as string;

            if (Utils.StrIsNullOrEmpty(str))
            {
                StringBuilder    sb        = new StringBuilder();
                List <ForumInfo> forumList = Forums.GetForumList();

                if (forumList.Count > 0)
                {
                    sb.Append("<div class=\"popupmenu_popup\" id=\"forumlist_menu\" style=\"overflow-y: auto; display:none\">");

                    foreach (ForumInfo info in forumList)
                    {
                        if (info.Layer >= 0 && info.Layer <= 1 && info.Status == 1)
                        {
                            //判断是否为私密论坛
                            //if (info.Viewperm != "" && !Utils.InArray(usergroupid.ToString(), info.Viewperm))
                            //如果对当前执行该程序的用户组权限进行判断,则会将整站的导航下拉缓存都以当前用户组权限去设置,
                            //这样会出现用户有时能看到自己并没有权限访问的论坛板块
                            if (info.Viewperm.Trim() == string.Empty || Utils.InArray("7", info.Viewperm))
                            {
                                if (info.Layer == 0)
                                {
                                    sb.AppendFormat("<dl><dt><a href=\"{0}\">{1}</a></dt><dd><ul>",
                                                    BaseConfigs.GetForumPath + Urls.ShowForumAspxRewrite(info.Fid, 0, info.Rewritename),
                                                    info.Name);

                                    foreach (ForumInfo forum in forumList)
                                    {
                                        if (Utils.StrToInt(forum.Parentidlist.Split(',')[0], 0) == info.Fid && forum.Layer == 1 && forum.Status == 1)
                                        {
                                            sb.AppendFormat("<li><a href=\"{0}\">{1}</a></li>",
                                                            BaseConfigs.GetForumPath + Urls.ShowForumAspxRewrite(forum.Fid, 0, forum.Rewritename),
                                                            forum.Name.Trim());
                                        }
                                    }
                                    sb.Append("</ul></dd></dl>");
                                }
                            }
                        }
                    }
                }
                sb.Append("</div>");
                str = sb.ToString().Replace("<dd><ul></ul></dd>", "");
                cache.AddObject("/Forum/ForumListMenuDiv", str);
            }
            return(str);
        }
Exemple #9
0
        /// <summary>
        /// 获得百度论坛收录协议xml
        /// </summary>
        /// <param name="ttl">TTL数值</param>
        /// <returns></returns>
        public static string GetBaiduSitemap(int ttl)
        {
            DNTCache cache   = DNTCache.GetCacheService();
            string   sitemap = cache.RetrieveObject("/Forum/Sitemap/Baidu") as string;

            if (sitemap == null)
            {
                UserGroupInfo guestinfo   = UserGroups.GetUserGroupInfo(7);
                StringBuilder sbforumlist = new StringBuilder();//不允许游客访问的板块Id列表

                foreach (ForumInfo f in Forums.GetForumList())
                {
                    if (f.Allowrss == 0)
                    {
                        sbforumlist.AppendFormat(",{0}", f.Fid);
                    }
                    else
                    {
                        //板块权限设置为空,按照用户组权限走,RSS仅检查游客权限
                        //if (Utils.StrIsNullOrEmpty(f.Viewperm) && guestinfo.Allowvisit == 0)
                        //    sbforumlist.AppendFormat(",{0}", f.Fid);
                        //else
                        //{
                        //    if (!Utils.InArray("7", f.Viewperm, ","))
                        //        sbforumlist.AppendFormat(",{0}", f.Fid);
                        //}
                        if (string.IsNullOrEmpty(f.Viewperm))
                        {
                            if (guestinfo.Allowvisit == 0)
                            {
                                sbforumlist.AppendFormat(",{0}", f.Fid);
                            }
                        }
                        else if (!Utils.InArray("7", f.Viewperm, ","))
                        {
                            sbforumlist.AppendFormat(",{0}", f.Fid);
                        }
                    }
                }
                sbforumlist = sbforumlist.Length > 0 ? sbforumlist.Remove(0, 1) : sbforumlist;
                sitemap     = Discuz.Data.Feeds.GetBaiduSitemap(sbforumlist.ToString(), Users.GetShortUserInfo(BaseConfigs.GetFounderUid));

                cache.AddObject("/Forum/Sitemap/Baidu", sitemap, ttl * 60);
            }
            return(sitemap);
        }
Exemple #10
0
        /// <summary>
        /// 设置版块列表中层数(layer)和父列表(parentidlist)字段
        /// </summary>
        public static void SetForumslayer()
        {
            foreach (ForumInfo singleForumInfo in Forums.GetForumList())
            {
                int    layer        = 0;
                string parentidlist = "";
                int    parentid     = singleForumInfo.Parentid;

                //如果是(分类)顶层则直接更新数据库
                if (parentid == 0)
                {
                    ForumInfo forumInfo = Forums.GetForumInfo(singleForumInfo.Fid);
                    if (forumInfo.Layer != layer)
                    {
                        forumInfo.Layer        = layer;
                        forumInfo.Parentidlist = "0";
                        UpdateForumInfo(forumInfo);
                    }
                    continue;
                }

                do
                { //更新子版块的层数(layer)和父列表(parentidlist)字段
                    int temp = parentid;

                    parentid = Forums.GetForumInfo(parentid).Parentid;
                    layer++;
                    if (parentid != 0)
                    {
                        parentidlist = temp + "," + parentidlist;
                    }
                    else
                    {
                        parentidlist = (temp + "," + parentidlist).TrimEnd(',');
                        ForumInfo forumInfo = Forums.GetForumInfo(singleForumInfo.Fid);
                        if (forumInfo.Layer != layer || forumInfo.Parentidlist != parentidlist)
                        {
                            forumInfo.Layer        = layer;
                            forumInfo.Parentidlist = parentidlist;
                            UpdateForumInfo(forumInfo);
                        }
                        break;
                    }
                } while (true);
            }
        }
Exemple #11
0
        /// <summary>
        /// 获取最后发帖版块信息
        /// </summary>
        /// <returns></returns>
        public static SimpleForumInfo GetLastPostedForum()
        {
            string lastPostedForum = Utils.GetCookie("lastpostedforum");

            if (lastPostedForum == "")
            {
                return(null);
            }
            foreach (ForumInfo forumInfo in Forums.GetForumList())
            {
                if (forumInfo.Fid.ToString() == lastPostedForum)
                {
                    SimpleForumInfo simpleForumInfo = new SimpleForumInfo();
                    simpleForumInfo.Fid             = forumInfo.Fid;
                    simpleForumInfo.Name            = Utils.RemoveHtml(forumInfo.Name); //如果不过滤掉HTML代码,则如果版块名称中存在html代码,会出现js错误,并且快速发帖出显示也不正常
                    simpleForumInfo.Url             = Urls.ShowForumAspxRewrite(forumInfo.Fid, 1, forumInfo.Rewritename);
                    simpleForumInfo.Postbytopictype = forumInfo.Postbytopictype;
                    simpleForumInfo.Topictypes      = forumInfo.Topictypes;
                    return(simpleForumInfo);
                }
            }
            return(null);
        }
Exemple #12
0
        /// <summary>
        /// 更新主题
        /// </summary>
        /// <param name="originalTopicInfo">主题信息</param>
        /// <returns>成功返回1,否则返回0</returns>
        public static int UpdateTopic(TopicInfo topicinfo)
        {
            //只有在应用memcached或redis的情况下才可以使用置顶主题缓存
            if (((mcci != null && mcci.ApplyMemCached) || (rci != null && rci.ApplyRedis)) && topicinfo.Displayorder > 0)
            {
                if (topicinfo.Displayorder == 1)
                {
                    Discuz.Cache.DNTCache.GetCacheService().RemoveObject("/Forum/ShowTopic/TopList/" + topicinfo.Fid + "/");
                }
                else
                {
                    //因为考虑到某些置顶主题是全局置顶所以这里一旦出现修改操作,则清除所有置顶缓存信息
                    foreach (ForumInfo forumInfo in Forums.GetForumList())
                    {
                        if (forumInfo.Layer > 0)
                        {
                            Discuz.Cache.DNTCache.GetCacheService().RemoveObject("/Forum/ShowTopic/TopList/" + forumInfo.Fid + "/");
                        }
                    }
                }
            }

            return(topicinfo != null?Data.Topics.UpdateTopic(topicinfo) : 0);
        }
Exemple #13
0
        /// <summary>
        /// 获得百度论坛收录协议xml
        /// </summary>
        /// <param name="ttl"></param>
        /// <returns></returns>
        public static string GetBaiduSitemap(int ttl)
        {
            Discuz.Cache.DNTCache cache = Discuz.Cache.DNTCache.GetCacheService();

            string str = cache.RetrieveObject("/Sitemap/Baidu") as string;

            if (str != null)
            {
                return(str);
            }
            ForumInfo[]   forumlist      = Forums.GetForumList();
            UserGroupInfo guestinfo      = UserGroups.GetUserGroupInfo(7);
            StringBuilder sbforumlist    = new StringBuilder();//不允许游客访问的板块Id列表
            StringBuilder sitemapBuilder = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");

            foreach (ForumInfo f in forumlist)
            {
                if (f.Allowrss == 0)
                {
                    sbforumlist.AppendFormat(",{0}", f.Fid);
                }
                else
                {
                    if (f.Viewperm == null || f.Viewperm == string.Empty)
                    {
                        //板块权限设置为空,按照用户组权限走,RSS仅检查游客权限
                        if (guestinfo.Allowvisit == 0)
                        {
                            sbforumlist.AppendFormat(",{0}", f.Fid);
                        }
                    }
                    else
                    {
                        if (!Utils.InArray("7", f.Viewperm, ","))
                        {
                            sbforumlist.AppendFormat(",{0}", f.Fid);
                        }
                    }
                }
            }

            if (sbforumlist.Length > 0)
            {
                sbforumlist.Remove(0, 1);
            }

            string        forumurl    = "http://" + DNTRequest.GetCurrentFullHost() + ("/").ToLower();
            ShortUserInfo master      = Users.GetShortUserInfo(BaseConfigs.GetFounderUid);
            string        masteremail = "";

            if (master != null)
            {
                masteremail = master.Email;
            }

            sitemapBuilder.Append("<document xmlns:bbs=\"http://www.baidu.com/search/bbs_sitemap.xsd\">\r\n");
            sitemapBuilder.Append("  <webSite>");
            sitemapBuilder.Append(forumurl);
            sitemapBuilder.Append("</webSite>\r\n");
            sitemapBuilder.Append("  <webMaster>");
            sitemapBuilder.Append(masteremail);
            sitemapBuilder.Append("</webMaster>\r\n");
            sitemapBuilder.Append("  <updatePeri>");
            sitemapBuilder.Append(config.Sitemapttl);
            sitemapBuilder.Append("</updatePeri>\r\n");
            sitemapBuilder.Append("  <updatetime>");
            sitemapBuilder.Append(DateTime.Now.ToString("r"));
            sitemapBuilder.Append("</updatetime>\r\n");
            sitemapBuilder.Append("  <version>");
            sitemapBuilder.Append("Discuz!NT " + Utils.GetAssemblyVersion());
            sitemapBuilder.Append("</version>\r\n");

            IDataReader reader = DatabaseProvider.GetInstance().GetSitemapNewTopics(sbforumlist.ToString());

            if (reader != null)
            {
                while (reader.Read())
                {
                    sitemapBuilder.Append("    <item>\r\n");
                    sitemapBuilder.Append("      <link>");
                    sitemapBuilder.Append(Utils.HtmlEncode(forumurl));
                    if (config.Aspxrewrite == 1)
                    {
                        sitemapBuilder.Append("showtopic-");
                        sitemapBuilder.Append(reader["tid"].ToString());
                        sitemapBuilder.Append(config.Extname);
                    }
                    else
                    {
                        sitemapBuilder.Append("showtopic-");
                        sitemapBuilder.Append(reader["tid"].ToString());
                    }

                    sitemapBuilder.Append("</link>\r\n");
                    sitemapBuilder.Append("      <title>");
                    sitemapBuilder.Append(Utils.HtmlEncode(reader["title"].ToString().Trim()));
                    sitemapBuilder.Append("</title>\r\n");
                    sitemapBuilder.Append("      <pubDate>");
                    sitemapBuilder.Append(Utils.HtmlEncode(reader["postdatetime"].ToString().Trim()));
                    sitemapBuilder.Append("</pubDate>\r\n");
                    sitemapBuilder.Append("      <bbs:lastDate>");
                    sitemapBuilder.Append(reader["lastpost"].ToString());
                    sitemapBuilder.Append("</bbs:lastDate>\r\n");
                    sitemapBuilder.Append("      <bbs:reply>");
                    sitemapBuilder.Append(reader["replies"].ToString().Trim());
                    sitemapBuilder.Append("</bbs:reply>\r\n");
                    sitemapBuilder.Append("      <bbs:hit>");
                    sitemapBuilder.Append(reader["views"].ToString().Trim());
                    sitemapBuilder.Append("</bbs:hit>\r\n");
                    sitemapBuilder.Append("      <bbs:boardid>");
                    sitemapBuilder.Append(reader["fid"].ToString().Trim());
                    sitemapBuilder.Append("</bbs:boardid>\r\n");
                    sitemapBuilder.Append("      <bbs:pick>");
                    sitemapBuilder.Append(reader["digest"].ToString().Trim());
                    sitemapBuilder.Append("</bbs:pick>\r\n");
                    sitemapBuilder.Append("    </item>\r\n");
                }
                reader.Close();
            }
            else
            {
                sitemapBuilder.Length = 0;
                sitemapBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
                sitemapBuilder.Append("<document>Error</document>\r\n");

                //声明新的缓存策略接口
                Discuz.Cache.ICacheStrategy ics = new SitemapCacheStrategy();
                ics.TimeOut = ttl * 60;
                cache.LoadCacheStrategy(ics);
                cache.AddObject("/Sitemap/Baidu", sitemapBuilder.ToString());
                cache.LoadDefaultCacheStrategy();
                return(sitemapBuilder.ToString());
            }


            sitemapBuilder.Append("</document>");

            cache.AddObject("/Sitemap/Baidu", sitemapBuilder.ToString());
            cache.LoadDefaultCacheStrategy();

            return(sitemapBuilder.ToString());
        }
Exemple #14
0
        /// <summary>
        /// 重写Url
        /// </summary>
        /// <param name="sender">事件的源</param>
        /// <param name="e">包含事件数据的 EventArgs</param>
        private void ReUrl_BeginRequest(object sender, EventArgs e)
        {
            BaseConfigInfo baseconfig = BaseConfigProvider.Instance();

            if (baseconfig == null)
            {
                return;
            }

            GeneralConfigInfo config    = GeneralConfigs.GetConfig();
            HttpContext       context   = ((HttpApplication)sender).Context;
            string            forumPath = baseconfig.Forumpath.ToLower();

            string requestPath = context.Request.Path.ToLower();

            //非论坛目录下的请求,非aspx页面和系统指定的目录不在重写范围
            if (!requestPath.StartsWith(forumPath) || !requestPath.EndsWith(".aspx") || IgnorePathContains(requestPath, forumPath))
            {
                return;
            }

            //判断是否是版块重写名称的请求
            if ((config.Iisurlrewrite == 1 || config.Aspxrewrite == 1) && requestPath.EndsWith("/list.aspx"))
            {
                requestPath = requestPath.StartsWith("/") ? requestPath : "/" + requestPath;
                // 当前模板样式id
                string strTemplateid = config.Templateid.ToString();
                if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
                {
                    strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
                }

                string[] path = requestPath.Replace(forumPath, "/").Split('/');

                //当使用伪aspx, 如:/版块别名/1(分页)等.
                if (path.Length > 1 && !Utils.StrIsNullOrEmpty(path[1]))
                {
                    int fid = 0;
                    foreach (Discuz.Entity.ForumInfo forumInfo in Forums.GetForumList())
                    {
                        if (path[1].ToLower() == forumInfo.Rewritename.ToLower())
                        {
                            fid = forumInfo.Fid;
                            break;
                        }
                    }
                    if (fid > 0)
                    {
                        string newUrl = "forumid=" + fid;
                        //如果数组长度大于2,且path[2]是个数字,则证明它是合法的索引
                        if (path.Length > 2 && Utils.IsNumeric(path[2]))
                        {
                            newUrl += "&page=" + path[2];
                        }

                        //通过参数设置指定模板
                        if (config.Specifytemplate > 0)
                        {
                            strTemplateid = SelectTemplate(strTemplateid, "showforum.aspx", newUrl);
                        }
                        CreatePage("showforum.aspx", forumPath, TypeConverter.StrToInt(strTemplateid));

                        context.RewritePath(forumPath + "aspx/" + strTemplateid + "/showforum.aspx", string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid);
                        return;
                    }
                    context.RewritePath(requestPath.Replace("list.aspx", string.Empty), string.Empty, string.Empty);
                    return;
                }
            }

            //如果去除了forumpath之后请求中没有目录符号“/”
            if (requestPath.Substring(forumPath.Length).IndexOf("/") == -1)
            {
                // 当前样式id
                string strTemplateid = config.Templateid.ToString();
                if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
                {
                    strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
                }

                //如果请求首页
                if (requestPath.EndsWith("/index.aspx"))
                {
                    //确定index.aspx定位至论坛首页还是聚合首页
                    string target = config.Indexpage == 0 ? "forumindex.aspx" : "website.aspx";
                    CreatePage(target, forumPath, TypeConverter.StrToInt(strTemplateid));
                    context.RewritePath(forumPath + "aspx/" + strTemplateid + "/" + target);
                    return;
                }

                //当使用伪aspx, 如:showforum-1.aspx等.
                if (config.Aspxrewrite == 1)
                {
                    foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                    {
                        if (Regex.IsMatch(requestPath, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                        {
                            string newUrl = Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")), url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);
                            CreatePage(url.Page.Replace("/", ""), forumPath, TypeConverter.StrToInt(strTemplateid));
                            //通过参数设置指定模板
                            if (config.Specifytemplate > 0)
                            {
                                strTemplateid = SelectTemplate(strTemplateid, url.Page, newUrl);
                            }

                            string queryString = context.Request.QueryString.ToString();
                            context.RewritePath(forumPath + "aspx/" + strTemplateid + url.Page, string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid +
                                                (queryString == "" ? "" : "&" + queryString));
                            return;
                        }
                    }
                }

                CreatePage(requestPath.Substring(context.Request.Path.LastIndexOf("/")).Replace("/", ""),
                           forumPath, TypeConverter.StrToInt(strTemplateid));

                //通过参数设置指定模板
                if (config.Specifytemplate > 0)
                {
                    strTemplateid = SelectTemplate(strTemplateid, requestPath, context.Request.QueryString.ToString());
                }
                context.RewritePath(forumPath + "aspx/" + strTemplateid + requestPath.Substring(context.Request.Path.LastIndexOf("/")), string.Empty, context.Request.QueryString.ToString() + "&selectedtemplateid=" + strTemplateid);
                return;
            }

            //如果开启了伪静态
            if (config.Aspxrewrite == 1)
            {
                //如果是简洁版页面的请求
                if (requestPath.StartsWith(forumPath + "archiver/"))
                {
                    string path = requestPath.Substring(forumPath.Length + 8);
                    foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                    {
                        if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                        {
                            string newUrl = Regex.Replace(path, url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);
                            context.RewritePath(forumPath + "archiver" + url.Page, string.Empty, newUrl);
                            return;
                        }
                    }
                }

                //如果是请求tools目录的页面请求,如rss-1.aspx
                if (requestPath.StartsWith(forumPath + "tools/"))
                {
                    string path = requestPath.Substring(forumPath.Length + 5);
                    foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                    {
                        if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                        {
                            string newUrl = Regex.Replace(path, url.Pattern, Utils.UrlDecode(url.QueryString), Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);
                            context.RewritePath(forumPath + "tools" + url.Page, string.Empty, newUrl);
                            return;
                        }
                    }
                }
            }

            //如果是请求upload目录下的aspx文件
            if (requestPath.StartsWith(forumPath + "upload/") || requestPath.StartsWith(forumPath + "space/upload/") || requestPath.StartsWith(forumPath + "avatars/upload/"))
            {
                context.RewritePath(forumPath + "index.aspx");
                return;
            }

            #region comment out

            ////使用版块
            //if (requestPath.IndexOf("/install/") < 0 && requestPath.IndexOf("/upgrade/") < 0 && (config.Iisurlrewrite == 1 || config.Aspxrewrite == 1) &&
            //    requestPath.EndsWith("/list.aspx") && requestPath.IndexOf("/archiver/") < 0 && requestPath.IndexOf("/admin/") < 0 && requestPath.IndexOf("/aspx/") < 0 &&
            //    requestPath.IndexOf("/tools/") < 0 && requestPath.IndexOf("/space/") < 0)
            //{
            //    requestPath = requestPath.StartsWith("/") ? requestPath : "/" + requestPath;
            //    // 当前样式id
            //    string strTemplateid = config.Templateid.ToString();
            //    if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
            //    {
            //        strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
            //    }

            //    string[] path = requestPath.Replace(BaseConfigs.GetForumPath, "/").Split('/');

            //    //当使用伪aspx, 如:/版块别名/1(分页)等.
            //    if (path.Length > 1 && !Utils.StrIsNullOrEmpty(path[1]))
            //    {
            //        int forumid = 0;
            //        foreach (Discuz.Entity.ForumInfo foruminfo in Forums.GetForumList())
            //        {
            //            if (path[1].ToLower() == foruminfo.Rewritename.ToLower())
            //            {
            //                forumid = foruminfo.Fid;
            //                break;
            //            }
            //        }
            //        if (forumid > 0)
            //        {
            //            string newUrl = "forumid=" + forumid;
            //            if (path.Length > 2 && !Utils.StrIsNullOrEmpty(path[2]) && path[2] != "list.aspx")
            //            {
            //                newUrl += "&page=" + path[2];
            //            }

            //            //通过参数设置指定模板
            //            if (config.Specifytemplate > 0)
            //            {
            //                strTemplateid = SelectTemplate(strTemplateid, "showforum.aspx", newUrl);
            //            }
            //            context.RewritePath(forumPath + "aspx/" + strTemplateid + "/showforum.aspx", string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid);
            //            return;
            //        }
            //    }
            //    context.Response.Redirect(baseconfig.Forumpath + "tools/error.htm?forumpath=" + BaseConfigs.GetForumPath + "&templatepath=" + Templates.GetTemplateItem(Utils.StrToInt(strTemplateid, 0)).Directory + "&msg=" + Utils.UrlEncode("您请求的版块信息无效!"));
            //    return;
            //}
            //if (requestPath.StartsWith(forumPath))
            //{
            //    if (requestPath.Substring(forumPath.Length).IndexOf("/") == -1)
            //    {
            //        // 当前样式id
            //        string strTemplateid = config.Templateid.ToString();
            //        if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
            //        {
            //            strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
            //        }

            //        if (requestPath.EndsWith("/index.aspx"))
            //        {
            //            if (config.Indexpage == 0)
            //            {
            //                if (config.BrowseCreateTemplate == 1)
            //                {
            //                    CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "forumindex.aspx", int.Parse(strTemplateid));
            //                }
            //                context.RewritePath(forumPath + "aspx/" + strTemplateid + "/forumindex.aspx");
            //            }
            //            else
            //            {
            //                if (config.BrowseCreateTemplate == 1)
            //                {
            //                    CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "website.aspx", int.Parse(strTemplateid));
            //                }
            //                context.RewritePath(forumPath + "aspx/" + strTemplateid + "/website.aspx");
            //            }

            //            return;
            //        }


            //        //当使用伪aspx, 如:showforum-1.aspx等.
            //        if (config.Aspxrewrite == 1)
            //        {
            //            foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
            //            {
            //                if (Regex.IsMatch(requestPath, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
            //                {
            //                    string newUrl = Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")), url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);
            //                    if (config.BrowseCreateTemplate == 1)
            //                    {
            //                        CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, url.Page.Replace("/", ""), int.Parse(strTemplateid));
            //                    }
            //                    //通过参数设置指定模板
            //                    if (config.Specifytemplate > 0)
            //                    {
            //                        strTemplateid = SelectTemplate(strTemplateid, url.Page, newUrl);
            //                    }
            //                    string queryString = context.Request.QueryString.ToString();
            //                    context.RewritePath(forumPath + "aspx/" + strTemplateid + url.Page, string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid +
            //                        (queryString == "" ? "" : "&" + queryString));

            //                    return;
            //                }
            //            }
            //        }

            //        if (config.BrowseCreateTemplate == 1)
            //        {
            //            if (requestPath.IndexOf("showtemplate.aspx") != -1)
            //            {
            //                CreateTemplate(forumPath,
            //                    Templates.GetTemplateItem(DNTRequest.GetInt("templateid", 1)).Directory,
            //                    config.Indexpage == 0 ? "forumindex.aspx" : "website.aspx",
            //                    DNTRequest.GetInt("templateid", 1)); //当跳转模板页时,生成目标文件
            //            }
            //            CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, requestPath.Substring(context.Request.Path.LastIndexOf("/")).Replace("/", ""), int.Parse(strTemplateid));

            //        }

            //        //通过参数设置指定模板
            //        if (config.Specifytemplate > 0)
            //        {
            //            strTemplateid = SelectTemplate(strTemplateid, requestPath, context.Request.QueryString.ToString());
            //        }
            //        context.RewritePath(forumPath + "aspx/" + strTemplateid + requestPath.Substring(context.Request.Path.LastIndexOf("/")), string.Empty, context.Request.QueryString.ToString() + "&selectedtemplateid=" + strTemplateid);
            //    }

            //    else if (requestPath.StartsWith(forumPath + "archiver/"))
            //    {
            //        //当使用伪aspx, 如:showforum-1.aspx等.
            //        if (config.Aspxrewrite == 1)
            //        {
            //            string path = requestPath.Substring(forumPath.Length + 8);
            //            foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
            //            {
            //                if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
            //                {
            //                    string newUrl = Regex.Replace(path, url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);

            //                    context.RewritePath(forumPath + "archiver" + url.Page, string.Empty, newUrl);
            //                    return;
            //                }
            //            }

            //        }
            //        return;
            //    }
            //    else if (requestPath.StartsWith(forumPath + "tools/"))
            //    {
            //        //当使用伪aspx, 如:showforum-1.aspx等.
            //        if (config.Aspxrewrite == 1)
            //        {
            //            string path = requestPath.Substring(forumPath.Length + 5);
            //            foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
            //            {
            //                if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
            //                {
            //                    string newUrl = Regex.Replace(path, url.Pattern, Utils.UrlDecode(url.QueryString), Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);

            //                    context.RewritePath(forumPath + "tools" + url.Page, string.Empty, newUrl);
            //                    return;
            //                }
            //            }
            //        }
            //        return;
            //    }
            //    else if (requestPath.StartsWith(forumPath + "upload/") || requestPath.StartsWith(forumPath + "space/upload/") || requestPath.StartsWith(forumPath + "avatars/upload/"))
            //    {
            //        context.RewritePath(forumPath + "index.aspx");
            //        return;
            //    }

            //}

            #endregion
        }
Exemple #15
0
        /// <summary>
        /// 前台版块列表弹出菜单
        /// </summary>
        /// <param name="usergroupid">用户组id</param>
        /// <param name="userid">当前用户id</param>
        /// <param name="extname">扩展名称</param>
        /// <returns>版块列表弹出菜单</returns>
        public static string GetForumListMenuDivCache(int usergroupid, int userid, string extname)
        {
            Discuz.Cache.DNTCache cache = Discuz.Cache.DNTCache.GetCacheService();
            string str = cache.RetrieveObject("/ForumListMenuDiv") as string;

            if (str != null)
            {
                return(str);
            }

            StringBuilder sb = new StringBuilder();

            ForumInfo[] foruminfoarray = Forums.GetForumList();

            if (foruminfoarray.Length > 0)
            {
                sb.Append("<div class=\"popupmenu_popup\" id=\"forumlist_menu\" style=\"overflow-y: auto; display:none\">");

                foreach (ForumInfo info in foruminfoarray)
                {
                    if (info.Layer >= 0 && info.Layer <= 1 && info.Status == 1)
                    {
                        //判断是否为私密论坛
                        if (info.Viewperm != "" && !Utils.InArray(usergroupid.ToString(), info.Viewperm))
                        {
                            //
                        }
                        else
                        {
                            if (info.Layer == 0)
                            {
                                sb.Append("<dl>");
                                sb.Append("<dt>");
                                sb.Append("<a href=\"");
                                sb.Append(Urls.ShowForumAspxRewrite(info.Fid, 0));
                                sb.Append("\">");

                                sb.Append(info.Name);
                                sb.Append("</a></dt>");

                                sb.Append("<dd><ul>");
                                foreach (ForumInfo forum in foruminfoarray)
                                {
                                    if (int.Parse(forum.Parentidlist.Split(',')[0]) == info.Fid && forum.Layer == 1)
                                    {
                                        sb.Append("<li><a href=\"");
                                        sb.Append(Urls.ShowForumAspxRewrite(forum.Fid, 0));
                                        sb.Append("\">");
                                        sb.Append(forum.Name);
                                        sb.Append("</a></li>");
                                    }
                                }
                                sb.Append("</ul></dd>");
                                sb.Append("</dl>");
                            }
                        }
                    }
                }
            }
            sb.Append("</div>");
            str = sb.ToString().Replace("<dd><ul></ul></dd>", "");
            cache.AddObject("/ForumListMenuDiv", str);

            return(str);
        }
Exemple #16
0
        /// <summary>
        /// 重写Url
        /// </summary>
        /// <param name="sender">事件的源</param>
        /// <param name="e">包含事件数据的 EventArgs</param>
        private void ReUrl_BeginRequest(object sender, EventArgs e)
        {
            BaseConfigInfo baseconfig = BaseConfigProvider.Instance();

            if (baseconfig == null)
            {
                return;
            }

            GeneralConfigInfo config    = GeneralConfigs.GetConfig();
            HttpContext       context   = ((HttpApplication)sender).Context;
            string            forumPath = baseconfig.Forumpath.ToLower();

            string requestPath = context.Request.Path.ToLower();

            //使用版块
            if ((config.Iisurlrewrite == 1 || config.Aspxrewrite == 1) && requestPath.EndsWith("/list.aspx") &&
                requestPath.IndexOf("/archiver/") < 0 && requestPath.IndexOf("/install/") < 0 && requestPath.IndexOf("/upgrade/") < 0 &&
                requestPath.IndexOf("/admin/") < 0 && requestPath.IndexOf("/aspx/") < 0 && requestPath.IndexOf("/tools/") < 0 &&
                requestPath.IndexOf("/space/") < 0)
            {
                requestPath = requestPath.StartsWith("/") ? requestPath : "/" + requestPath;
                // 当前样式id
                string strTemplateid = config.Templateid.ToString();
                if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
                {
                    strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
                }

                string[] path = requestPath.Replace(BaseConfigs.GetForumPath, "/").Split('/');

                //当使用伪aspx, 如:/版块别名/1(分页)等.
                if (path.Length > 1 && !Utils.StrIsNullOrEmpty(path[1]))
                {
                    int forumid = 0;
                    foreach (Discuz.Entity.ForumInfo foruminfo in Forums.GetForumList())
                    {
                        if (path[1].ToLower() == foruminfo.Rewritename.ToLower())
                        {
                            forumid = foruminfo.Fid;
                            break;
                        }
                    }
                    if (forumid > 0)
                    {
                        string newUrl = "forumid=" + forumid;
                        if (path.Length > 2 && !Utils.StrIsNullOrEmpty(path[2]) && path[2] != "list.aspx")
                        {
                            newUrl += "&page=" + path[2];
                        }

                        //通过参数设置指定模板
                        if (config.Specifytemplate > 0)
                        {
                            strTemplateid = SelectTemplate(strTemplateid, "showforum.aspx", newUrl);
                        }
                        context.RewritePath(forumPath + "aspx/" + strTemplateid + "/showforum.aspx", string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid);
                        return;
                    }
                }
                context.Response.Redirect(baseconfig.Forumpath + "tools/error.htm?forumpath=" + BaseConfigs.GetForumPath + "&templatepath=" + Templates.GetTemplateItem(Utils.StrToInt(strTemplateid, 0)).Directory + "&msg=" + Utils.UrlEncode("您请求的版块信息无效!"));
                return;
            }

            if (requestPath.StartsWith(forumPath))
            {
                if (requestPath.Substring(forumPath.Length).IndexOf("/") == -1)
                {
                    // 当前样式id
                    string strTemplateid = config.Templateid.ToString();
                    if (Utils.InArray(Utils.GetCookie(Utils.GetTemplateCookieName()), Templates.GetValidTemplateIDList()))
                    {
                        strTemplateid = Utils.GetCookie(Utils.GetTemplateCookieName());
                    }

                    if (requestPath.EndsWith("/index.aspx"))
                    {
                        if (config.Indexpage == 0)
                        {
                            if (config.BrowseCreateTemplate == 1)
                            {
                                CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "forumindex.aspx", int.Parse(strTemplateid));
                            }
                            context.RewritePath(forumPath + "aspx/" + strTemplateid + "/forumindex.aspx");
                        }
                        else
                        {
                            if (config.BrowseCreateTemplate == 1)
                            {
                                CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, "website.aspx", int.Parse(strTemplateid));
                            }
                            context.RewritePath(forumPath + "aspx/" + strTemplateid + "/website.aspx");
                        }

                        return;
                    }


                    //当使用伪aspx, 如:showforum-1.aspx等.
                    if (config.Aspxrewrite == 1)
                    {
                        foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                        {
                            if (Regex.IsMatch(requestPath, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                            {
                                string newUrl = Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")), url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);
                                if (config.BrowseCreateTemplate == 1)
                                {
                                    CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, url.Page.Replace("/", ""), int.Parse(strTemplateid));
                                }
                                //通过参数设置指定模板
                                if (config.Specifytemplate > 0)
                                {
                                    strTemplateid = SelectTemplate(strTemplateid, url.Page, newUrl);
                                }
                                context.RewritePath(forumPath + "aspx/" + strTemplateid + url.Page, string.Empty, newUrl + "&selectedtemplateid=" + strTemplateid);

                                return;
                            }
                        }
                    }

                    if (config.BrowseCreateTemplate == 1)
                    {
                        if (requestPath.IndexOf("showtemplate.aspx") != -1)
                        {
                            CreateTemplate(forumPath,
                                           Templates.GetTemplateItem(DNTRequest.GetInt("templateid", 1)).Directory,
                                           config.Indexpage == 0 ? "forumindex.aspx" : "website.aspx",
                                           DNTRequest.GetInt("templateid", 1)); //当跳转模板页时,生成目标文件
                        }
                        CreateTemplate(forumPath, Templates.GetTemplateItem(int.Parse(strTemplateid)).Directory, requestPath.Substring(context.Request.Path.LastIndexOf("/")).Replace("/", ""), int.Parse(strTemplateid));
                    }

                    //通过参数设置指定模板
                    if (config.Specifytemplate > 0)
                    {
                        strTemplateid = SelectTemplate(strTemplateid, requestPath, context.Request.QueryString.ToString());
                    }
                    context.RewritePath(forumPath + "aspx/" + strTemplateid + requestPath.Substring(context.Request.Path.LastIndexOf("/")), string.Empty, context.Request.QueryString.ToString() + "&selectedtemplateid=" + strTemplateid);
                }

                else if (requestPath.StartsWith(forumPath + "archiver/"))
                {
                    //当使用伪aspx, 如:showforum-1.aspx等.
                    if (config.Aspxrewrite == 1)
                    {
                        string path = requestPath.Substring(forumPath.Length + 8);
                        foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                        {
                            if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                            {
                                string newUrl = Regex.Replace(path, url.Pattern, url.QueryString, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);

                                context.RewritePath(forumPath + "archiver" + url.Page, string.Empty, newUrl);
                                return;
                            }
                        }
                    }
                    return;
                }
                else if (requestPath.StartsWith(forumPath + "tools/"))
                {
                    //当使用伪aspx, 如:showforum-1.aspx等.
                    if (config.Aspxrewrite == 1)
                    {
                        string path = requestPath.Substring(forumPath.Length + 5);
                        foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
                        {
                            if (Regex.IsMatch(path, url.Pattern, Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase))
                            {
                                string newUrl = Regex.Replace(path, url.Pattern, Utils.UrlDecode(url.QueryString), Utils.GetRegexCompiledOptions() | RegexOptions.IgnoreCase);

                                context.RewritePath(forumPath + "tools" + url.Page, string.Empty, newUrl);
                                return;
                            }
                        }
                    }
                    return;
                }
                else if (requestPath.StartsWith(forumPath + "upload/") || requestPath.StartsWith(forumPath + "space/upload/") || requestPath.StartsWith(forumPath + "avatars/upload/"))
                {
                    context.RewritePath(forumPath + "index.aspx");
                    return;
                }
            }
        }
Exemple #17
0
        /// <summary>
        /// 获得论坛最新的20个主题的Rss描述
        /// </summary>
        /// <param name="ttl">TTL数值</param>
        /// <returns>Rss描述</returns>
        public static string GetRssXml(int ttl)
        {
            Discuz.Cache.DNTCache cache = Discuz.Cache.DNTCache.GetCacheService();

            string str = cache.RetrieveObject("/RSS/Index") as string;

            if (str != null)
            {
                return(str);
            }
            ForumInfo[]   forumlist   = Forums.GetForumList();
            UserGroupInfo guestinfo   = UserGroups.GetUserGroupInfo(7);
            StringBuilder sbforumlist = new StringBuilder();            //不允许游客访问的板块Id列表
            StringBuilder sbRss       = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n");

            foreach (ForumInfo f in forumlist)
            {
                if (f.Allowrss == 0)
                {
                    sbforumlist.AppendFormat(",{0}", f.Fid);
                }
                else
                {
                    if (f.Viewperm == null || f.Viewperm == string.Empty)
                    {
                        //板块权限设置为空,按照用户组权限走,RSS仅检查游客权限
                        if (guestinfo.Allowvisit == 0)
                        {
                            sbforumlist.AppendFormat(",{0}", f.Fid);
                        }
                    }
                    else
                    {
                        if (!Utils.InArray("7", f.Viewperm, ","))
                        {
                            sbforumlist.AppendFormat(",{0}", f.Fid);
                        }
                    }
                }
            }

            if (sbforumlist.Length > 0)
            {
                sbforumlist.Remove(0, 1);
            }
            string forumurl = "http://" + DNTRequest.GetCurrentFullHost() + ("/").ToLower();

            sbRss.Append("<?xml-stylesheet type=\"text/xsl\" href=\"rss.xsl\" media=\"screen\"?>\r\n");
            sbRss.Append("<rss version=\"2.0\">\r\n");
            sbRss.Append("  <channel>\r\n");
            sbRss.Append("    <title>");
            sbRss.Append(Utils.HtmlEncode(config.Forumtitle));
            sbRss.Append("</title>\r\n");
            sbRss.Append("    <link>");
            sbRss.Append(forumurl);
            sbRss.Append("</link>\r\n");
            sbRss.Append("    <description>Latest 20 threads</description>\r\n");
            sbRss.Append("    <copyright>Copyright (c) ");
            sbRss.Append(Utils.HtmlEncode(config.Forumtitle));
            sbRss.Append("</copyright>\r\n");
            sbRss.Append("    <generator>");
            sbRss.Append("Discuz!NT");
            sbRss.Append("</generator>\r\n");
            sbRss.Append("    <pubDate>");
            //sbRss.Append(DateTime.Now.ToUniversalTime().ToString("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'"));
            sbRss.Append(DateTime.Now.ToString("r"));
            sbRss.Append("</pubDate>\r\n");
            sbRss.AppendFormat("    <ttl>{0}</ttl>\r\n", ttl.ToString());


            //声明新的缓存策略接口
            Discuz.Cache.ICacheStrategy ics = new RssCacheStrategy();
            ics.TimeOut = ttl;
            cache.LoadCacheStrategy(ics);

            IDataReader reader = DatabaseProvider.GetInstance().GetNewTopics(sbforumlist.ToString());

            if (reader != null)
            {
                while (reader.Read())
                {
                    sbRss.Append("    <item>\r\n");
                    sbRss.Append("      <title>");
                    sbRss.Append(Utils.HtmlEncode(reader["title"].ToString().Trim()));
                    sbRss.Append("</title>\r\n");
                    sbRss.Append("    <description><![CDATA[");
                    if (reader["message"].ToString().IndexOf("[hide]") > -1)
                    {
                        sbRss.Append("***内容隐藏***");
                    }
                    else
                    {
                        sbRss.Append(Utils.HtmlEncode(Utils.GetSubString(UBB.ClearUBB(reader["message"].ToString()), 200, "......")));
                    }
                    sbRss.Append("]]></description>\r\n");
                    sbRss.Append("      <link>");
                    sbRss.Append(Utils.HtmlEncode(forumurl));

                    if (config.Aspxrewrite == 1)
                    {
                        sbRss.Append("showtopic-");
                        sbRss.Append(reader["tid"].ToString());
                        sbRss.Append(config.Extname);
                    }
                    else
                    {
                        sbRss.Append("showtopic.aspx?topicid=");
                        sbRss.Append(reader["tid"].ToString());
                    }

                    sbRss.Append("</link>\r\n");
                    sbRss.Append("      <category>");
                    sbRss.Append(Utils.HtmlEncode(reader["name"].ToString().Trim()));
                    sbRss.Append("</category>\r\n");
                    sbRss.Append("      <author>");
                    sbRss.Append(Utils.HtmlEncode(reader["poster"].ToString().Trim()));
                    sbRss.Append("</author>\r\n");
                    sbRss.Append("      <pubDate>");
                    sbRss.Append(Utils.HtmlEncode(Convert.ToDateTime(reader["postdatetime"]).ToString("r").Trim()));
                    sbRss.Append("</pubDate>\r\n");
                    sbRss.Append("    </item>\r\n");
                }
                reader.Close();
            }
            else
            {
                sbRss.Length = 0;
                sbRss.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
                sbRss.Append("<Rss>Error</Rss>\r\n");
                cache.AddObject("/RSS/Index", sbRss.ToString());
                cache.LoadDefaultCacheStrategy();
                return(sbRss.ToString());
            }


            sbRss.Append("  </channel>\r\n");
            sbRss.Append("</rss>");

            cache.AddObject("/RSS/Index", sbRss.ToString());
            cache.LoadDefaultCacheStrategy();

            return(sbRss.ToString());
        }