📄 siteurls.cs
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Caching;
using System.Xml;
using CommunityServer.Configuration;
namespace CommunityServer.Components {
public class SiteUrls
{
public static readonly string SiteUrlsProviderName = "SiteUrlsProvider";
#region Initializer
/// <summary>
/// Returns a intance of SiteUrls. We first check the cache and if not found
/// we parse the SiteUrls.config file and build it.
/// </summary>
/// <returns></returns>
public static SiteUrls Instance()
{
const string cacheKey = "SiteUrls";
SiteUrls siteUrls = CSCache.Get(cacheKey) as SiteUrls;
if(siteUrls == null)
{
try
{
HttpContext Context = HttpContext.Current;
CSConfiguration config = CSConfiguration.GetConfig();
Provider siteUrlProvider = config.Providers["SiteUrlsDataProvider"] as Provider;
if(siteUrlProvider == null)
{
if(Context != null)
{
Context.Response.Write("<h1>SiteUrl Provider was NOT found!</h1>");
Context.Response.Write("A provider named SiteUrlsDataProvider with the type or derived type of CommunityServer.Components.SiteUrlsData, CommunityServer.Components must be added to the provider list");
Context.Response.End();
}
else
{
throw new CSException(CSExceptionType.SiteUrlDataProvider,"Could not load SiteUrlsProvider");
}
}
string siteUrlsXmlFile = config.FilesPath + siteUrlProvider.Attributes["path"];
string file = CSContext.Current.PhysicalPath(siteUrlProvider.Attributes["path"]); // CSContext.Current.MapPath(Globals.ApplicationPath + siteUrlsXmlFile);
Type type = Type.GetType(siteUrlProvider.Type);
SiteUrlsData data = Activator.CreateInstance(type,new object[]{file}) as SiteUrlsData;
// Create the instance for the provider, or fall back on the builtin one
//
Provider urlProvider = (Provider) CSConfiguration.GetConfig().Providers[SiteUrlsProviderName];
if(urlProvider != null)
siteUrls = ApplicationUrls.CreateInstance(urlProvider, data) as SiteUrls;
else
siteUrls = new SiteUrls(data);
CacheDependency dep = new CacheDependency(file);
CSCache.Max(cacheKey, siteUrls, dep);
}
catch(Exception ex)
{
if (ex.InnerException != null && ex.InnerException is CSException)
{
throw ex.InnerException;
}
string message = "<p>" + ex.Message + "</p>";
Exception inner = ex.InnerException;
while(inner != null)
{
message = string.Format("{0}<p>{1}</p>", message, inner.Message);
inner = inner.InnerException;
}
CSException csex = new CSException(CSExceptionType.SiteUrlDataProvider,message,ex);
CatastrophicMessage.Write(HttpContext.Current,csex,"[SiteUrlData]","SiteUrlData.htm");
}
}
return siteUrls;
}
#endregion
#region Force Refresh
public static void ForceRefresh()
{
const string cacheKey = "SiteUrls";
CSCache.Remove(cacheKey);
}
#endregion
#region Member variables & constructor
//CSContext forumContext = CSContext.Current;
bool enableWaitPage = false;
private SiteUrlsData urlData = null;
// Constructor loads all the site urls from the SiteUrls.config file
// or returns from the cache
//
// Updated 8/17/2004 by ScottW >> Moved Initializate to Static instance method
// This should enable us to cache on instance of SiteUrls and not 3 unique collections
public SiteUrls(SiteUrlsData data)
{
urlData = data;
}
public virtual string RawPath(string rawpath)
{
return urlData.FormatUrl(rawpath);
}
#endregion
#region Who is online
// Who is online
//
public virtual string WhoIsOnline
{
get { return urlData.FormatUrl("whoIsOnline"); }
}
#endregion
#region Moderation
// Moderation
//
public virtual string Moderate
{
get { return urlData.FormatUrl("moderate"); }
}
public virtual string ModerationHome
{
get { return urlData.FormatUrl("moderate_home"); }
}
public virtual string ModerateViewPost (int postID)
{
return urlData.FormatUrl("moderate_ViewPost", postID.ToString() );
}
public virtual string ModeratePostDelete (int postID, string returnUrl)
{
return urlData.FormatUrl("moderate_Post_Delete", postID.ToString(), returnUrl );
}
public virtual string ModeratePostEdit (int postID, string returnUrl)
{
return urlData.FormatUrl("moderate_Post_Edit", postID.ToString(), returnUrl );
}
public virtual string ModerateViewUserProfile (int userID)
{
return urlData.FormatUrl("moderate_ViewUserProfile", userID.ToString() );
}
public virtual string ModeratePostMove (int postID, string returnUrl)
{
return urlData.FormatUrl("moderate_Post_Move", postID.ToString(), returnUrl );
}
public virtual string ModerateThreadSplit (int postID, string returnUrl)
{
return urlData.FormatUrl("moderate_Thread_Split", postID.ToString(), returnUrl );
}
public virtual string ModerateThreadJoin (int postID, string returnUrl)
{
return urlData.FormatUrl("moderate_Thread_Join", postID.ToString(), returnUrl );
}
public virtual string ModerationHistory (int postID) {
return ModerationHistory( postID, null );
}
public virtual string ModerationHistory (int postID, string returnUrl) {
string outString = "";
if (Globals.IsNullorEmpty( returnUrl )) {
outString = urlData.FormatUrl("moderation_History", postID.ToString(), "");
outString = outString.Replace( "&ReturnUrl=", "" );
}
else {
outString = urlData.FormatUrl("moderation_History", postID.ToString(), returnUrl);
}
return outString;
}
public virtual string ModerateForum (int forumID)
{
return urlData.FormatUrl("moderate_Forum", forumID.ToString()) ;
}
public virtual string UserModerationHistory (int userID) {
return UserModerationHistory( userID, -1 ) ;
}
public virtual string UserModerationHistory (int userID, int action) {
string outString = urlData.FormatUrl( "admin_User_ModerationHistory", userID.ToString(), action.ToString() );
if (action <= 0) {
outString = outString.Replace( "&Action=" + action.ToString(), "" );
}
return outString;
}
#endregion
#region Admin
// Admin
//
public virtual string Admin
{
get { return urlData.FormatUrl("admin"); }
}
public virtual string AdminConfiguration
{
get{ return urlData.FormatUrl("admin_Configuration"); }
}
public virtual string AdminManageForums
{
get{ return urlData.FormatUrl("admin_Forums");}
}
public virtual string AdminUserEdit ( int userID )
{
return urlData.FormatUrl("admin_User_Edit", userID.ToString()) ;
}
public virtual string AdminForumGroup( int forumID )
{
return urlData.FormatUrl("admin_ForumGroup", forumID.ToString() );
}
public virtual string AdminForumEdit ( int forumID )
{
return urlData.FormatUrl("admin_Forum_Edit", forumID.ToString() );
}
public virtual string AdminForumPermissions
{
get{ return urlData.FormatUrl("admin_Forum_Permissions"); }
}
public virtual string AdminDefaultForumPermissions
{
get{ return urlData.FormatUrl("admin_Forum_Default_Permissions"); }
}
public virtual string AdminForumModeratorsEdit( int forumId, int groupId )
{
return urlData.FormatUrl("admin_Forum_Moderators_Edit", forumId, groupId );
}
public virtual string AdminForumPermissionEdit( int forumId, Guid roleId )
{
if(forumId == -1)
return urlData.FormatUrl("admin_Forum_Default_Permissions_Edit",roleId);
else
return urlData.FormatUrl("admin_Forum_Permissions_Edit", forumId, roleId );
}
public virtual string AdminDefaultPermissions {
get{ return urlData.FormatUrl("admin_Default_Permissions"); }
}
public virtual string AdminDefaultPermissionsEdit {
get{ return urlData.FormatUrl("admin_Default_Permissions_Edit"); }
}
public virtual string AdminHome
{
get { return urlData.FormatUrl("admin_Home"); }
}
public virtual string AdminManageUsers
{
get { return urlData.FormatUrl("admin_User_List"); }
}
public virtual string AdminManageUsersFilter(UserAccountStatus statusFilter)
{
return urlData.FormatUrl("admin_User_List_Filter", (int)statusFilter);
}
public virtual string AdminManageRoles
{
get { return urlData.FormatUrl("admin_Roles"); }
}
public virtual string AdminUserRoles (int userID)
{
return urlData.FormatUrl("admin_User_UserRolesAdmin", userID.ToString()) ;
}
public virtual string AdminUserPasswordChange (int userID)
{
return urlData.FormatUrl("admin_User_ChangePassword", userID.ToString()) ;
}
public virtual string AdminUserPasswordAnswerChange (int userID)
{
return urlData.FormatUrl("admin_User_ChangePasswordAnswer", userID.ToString()) ;
}
public virtual string AdminUserConfiguration
{
get { return urlData.FormatUrl("admin_User_Configuration"); }
}
public virtual string AdminManageRanks
{
get{ return urlData.FormatUrl("admin_Ranks"); }
}
public virtual string AdminManageNames
{
get{ return urlData.FormatUrl("admin_Names"); }
}
public virtual string AdminManageCensorships
{
get{ return urlData.FormatUrl("admin_Censorships");}
}
public virtual string AdminManageSmilies
{
get{ return urlData.FormatUrl("admin_Smilies"); }
}
public virtual string AdminMassEmail
{
get{ return urlData.FormatUrl("admin_MassEmail"); }
}
public virtual string AdminRoleEdit( Guid roleID )
{
return urlData.FormatUrl("admin_Role_Edit", roleID.ToString() );
}
public virtual string AdminReportsBuiltIn
{
get { return urlData.FormatUrl("admin_Reports_BuiltIn"); }
}
#endregion
#region KnowledgeBase
public virtual string KbArticle (int articleID)
{
return KbArticle(articleID, CSContext.Current.SiteSettings.EnableSearchFriendlyURLs);
}
public virtual string KbArticle (int articleID, bool searchFriendly) {
return urlData.FormatUrl("kbArticle", articleID.ToString());
}
#endregion
#region Posts
// Post related properties
//
/// <summary>
/// If possible use Post (int postID, int forumID)
/// </summary>
public virtual string Post (int postID)
{
return Post(postID, CSContext.Current.SiteSettings.EnableSearchFriendlyURLs);
}
public virtual string Post (int postID, bool searchFriendly)
{
if (searchFriendly)
return urlData.FormatUrl("searchFriendlyPost", postID.ToString());
else
return urlData.FormatUrl("post", postID.ToString());
}
public virtual string PrintPost (int postID)
{
return urlData.FormatUrl("post_Print", postID.ToString());
}
public virtual string PostRating (int postID)
{
return urlData.FormatUrl("post_Rating", postID.ToString());
}
public virtual string PostCloseWindow (string url) {
return urlData.FormatUrl("post_CloseWindow", url);
}
public virtual string PostInPage (int postID, int postInPageID)
{
return urlData.FormatUrl("post_InPage", postID.ToString(), postInPageID.ToString());
}
public virtual string PostAttachment (int postID)
{
return urlData.FormatUrl("post_Attachment", postID.ToString());
}
public virtual string PostPaged (int postID, int page)
{
return urlData.FormatUrl("post_Paged", page.ToString(), postID.ToString(), postID.ToString());
}
public virtual string PostPagedFormat (int postID)
{
return urlData.FormatUrl("post_Paged", "{0}", postID.ToString(), postID.ToString());
}
public virtual string PostCreate (int forumID)
{
return urlData.FormatUrl("post_Create", forumID.ToString());
}
public virtual string PostReply (int postID)
{
return urlData.FormatUrl("post_Reply", postID.ToString());
}
public virtual string PostReply (int postID, bool isQuote)
{
return urlData.FormatUrl("post_Quote", postID.ToString(), isQuote.ToString());
}
public virtual string PostEdit (int postID, string returnUrl)
{
return urlData.FormatUrl("post_Edit", postID.ToString(), returnUrl);
}
public virtual string PostDelete (int postID, string returnUrl)
{
return urlData.FormatUrl("post_Delete", postID.ToString(), returnUrl);
}
public virtual string PostsUnanswered
{
get { return urlData.FormatUrl("post_Unanswered"); }
}
public virtual string PostsActive
{
get { return urlData.FormatUrl("post_Active"); }
}
public virtual string PostsNotRead {
get { return urlData.FormatUrl("post_NotRead"); }
}
#endregion
#region Help
public virtual string HelpThreadIcons
{
get { return urlData.FormatUrl("help_ThreadIcons", Globals.Language); }
}
#endregion
#region User
// User related properties
//
public virtual string UserBanned
{
get { return urlData.FormatUrl("user_Banned"); }
}
public virtual string UserProfile (string username) {
return urlData.FormatUrl("user_ByName", username);
}
public virtual string UserProfile (int userID)
{
return UserProfile (userID, CSContext.Current.SiteSettings.EnableSearchFriendlyURLs);
}
public virtual string UserProfile (int userID, bool searchFriendly)
{
if (searchFriendly)
return urlData.FormatUrl("searchFriendlyUser", userID.ToString());
else
return urlData.FormatUrl("user", userID.ToString());
}
public virtual string UserEditProfile
{
get
{
string currentPath = CSContext.Current.Context.Request.Url.PathAndQuery;
string returnUrl = null;
if (ExtractQueryParams(currentPath)["ReturnUrl"] != null)
returnUrl = ExtractQueryParams(currentPath)["ReturnUrl"];
if ((returnUrl == null) || (returnUrl == string.Empty))
return urlData.FormatUrl("user_EditProfile", currentPath);
else
return urlData.FormatUrl("user_EditProfile", returnUrl);
}
}
public virtual string CleanUserEditProfile
{
get { return urlData.FormatUrl("user_EditProfile_Clean");}
}
public virtual string UserMyForums
{
get { return urlData.FormatUrl("user_MyForums"); }
}
public virtual string UserChangePassword
{
get { return urlData.FormatUrl("user_ChangePassword"); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -