/// <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()); }
/// <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); }
/// <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); }
/// <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); }
/// <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(',')); }
/// <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()); }
/// <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(',')); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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()); }
/// <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 }
/// <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); }
/// <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; } } }
/// <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()); }