📄 communityglobals.cs
字号:
namespace ASPNET.StarterKit.Communities {
using System;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.Caching;
using System.Configuration;
using System.Text;
using System.Collections.Specialized;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
//*********************************************************************
//
// CommunityGlobals Class
//
// This class contains common utility methods used throughout
// the Community Framework such as path manipulation and text
// formatting methods.
//
//*********************************************************************
public class CommunityGlobals {
//*********************************************************************
//
// CommunityID Property
//
// Represents the ID of the current community. This property
// is valid after the CommunitiesModule handles the
// BeginRequest event.
//
//*********************************************************************
public static int CommunityID {
get {
try {
return ((CommunityInfo)HttpContext.Current.Items[ "CommunityInfo" ]).ID;
} catch {
return 0;
}
}
}
//*********************************************************************
//
// CommunityName Property
//
// Represents the name of the current community. This property
// is valid after the CommunitiesModule handles the
// BeginRequest event.
//
//*********************************************************************
public static string CommunityName {
get { return ((CommunityInfo)HttpContext.Current.Items[ "CommunityInfo" ]).Name; }
}
// *********************************************************************
// Text Formatting Methods
// *********************************************************************
public static string FormatText(AllowHtml useHtml, int sectionID, string text) {
// Return when null
if (text == null)
return String.Empty;
// if no HTML allowed, HTML Encode
if (useHtml == AllowHtml.None)
{
text = FormatPlainText(text);
}
else
{
text = EnsureSafeAnchors(text);
}
text = ApplyTransformations(sectionID, text, useHtml);// Apply transformations
return text;
}
//*********************************************************************
//
// FormatPlainText Method
//
// This method is used for formatting all text that SHOULD NOT
// contain HTML. This method
// HtmlEncodes the text and adds line breaks.
//
//*********************************************************************
public static string FormatPlainText(string text) {
// HTML encode the text
text = HttpUtility.HtmlEncode(text);
// Add line breaks
text = Regex.Replace(text,"\n\n","<p>");
text = Regex.Replace(text,"\n","<br>");
return text;
}
//*********************************************************************
//
// ApplyTransformations Method
//
// This method applies each transformation to a string
// of text. The transformations are precalculated when
// the sections are first loaded in the SectionUtility
// class.
//
//*********************************************************************
// SMR - Enh - Begin: Uniform Translation.
// New overload that conditionally applies HTMLEncoding depending on the useHtml setting of the section
public static string ApplyTransformations(int sectionID, string text, AllowHtml useHtml)
{
if(useHtml == AllowHtml.None)
{
text = ApplyTransformations(sectionID, text);
}
else
{
// Get the section transformation
SectionInfo _sectionInfo = SectionUtility.GetSectionInfo(sectionID);
string[] splitTrans = Regex.Split(_sectionInfo.Transformations, "\n");
for (int i=0;i<splitTrans.Length;i+=2)
{
try
{
text = Regex.Replace(text, splitTrans[i], splitTrans[i+1], RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Multiline);
}
catch
{
// we don't do anything in the catch because we
// are just hiding errors in the transformations
}
}
}
return text;
}
// SMR - Enh - End: Uniform Translation.
public static string ApplyTransformations(int sectionID, string text)
{
// Get the section transformation
SectionInfo _sectionInfo = SectionUtility.GetSectionInfo(sectionID);
string[] splitTrans = Regex.Split(_sectionInfo.Transformations, "\n");
string TransString; // SMR - Enh - Uniform Translation.
for (int i=0;i<splitTrans.Length;i+=2)
{
try
{
// SMR - Enh - Begin: Uniform Translation.
// For case where HTML is disabled
TransString = splitTrans[i];
TransString = TransString.Replace("<", "<");
TransString = TransString.Replace(">", ">");
TransString = TransString.Replace("\"", """);
// SMR - Enh - Begin: Uniform Translation.
text = Regex.Replace(text, TransString, splitTrans[i+1], RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Multiline);
}
catch
{
// we don't do anything in the catch because we
// are just hiding errors in the transformations
}
}
return text;
}
private static string EnsureSafeAnchors(string stringToTransform) {
MatchCollection matchs;
// Ensure we have safe anchors
// SMR - BUG - Old string didn't match because the pattern looked for HTMLEncoded patterns.
// Also changed the pattern to allow whitespace in the tag to match, and also removed
// requirement that the URL include http:// so that it will match ftp and mailto requests.
matchs = Regex.Matches(stringToTransform, "<a\\s*href=(\")?(?<url>((.|\\n)*?))(\")?\\s*>(?<target>((.|\\n)*?))</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
foreach (Match m in matchs) {
// SMR - Enh - Changed the target from _NEW to _blank.
stringToTransform = stringToTransform.Replace(m.ToString(), "<a target=\"_blank\" href=\"" + m.Groups["url"].ToString() + "\">" + m.Groups["target"].ToString() + "</a>");
}
return stringToTransform;
}
//*********************************************************************
//
// TruncateWithEllipsis Method
//
// This method shortens a string to a certain length and
// adds ... when the string is longer than a specified
// maximum length.
//
//*********************************************************************
public static string TruncateWithEllipsis(string text, int length) {
if (text.Length > length)
text = text.Substring(0,length) + "...";
return text;
}
//*********************************************************************
//
// Truncate Method
//
// This method chops off the end of a string when the
// string is longer than a maximum length.
//
//*********************************************************************
public static string Truncate(string text, int length) {
if (text.Length > length)
text = text.Substring(0,length);
return text;
}
//*********************************************************************
//
// StripTags Method
//
// This method strips all tags from a string (good for removing all
// HTML.
//
//*********************************************************************
public static string StripTags(string text) {
text = Regex.Replace(text, @" ", "", RegexOptions.IgnoreCase);
return Regex.Replace(text, @"<.+?>", "", RegexOptions.Singleline);
}
// *********************************************************************
// Global Validation Methods
// *********************************************************************
//*********************************************************************
//
// ValidateLength Method
//
// This method associates a client-side and server-side
// function with a custom validator to check whether a
// string of text is less than 300 characters.
//
//*********************************************************************
public static void ValidateLength(CustomValidator validator, string scriptName) {
StringBuilder builder = new StringBuilder();
// Form the script that is to be registered at client side.
builder.Append("<script language=JavaScript>\n");
builder.AppendFormat("function {0}(s, e) {{\n", scriptName);
builder.AppendFormat("if (e.Value.length > 300)\n");
builder.Append(" e.IsValid = false;\n");
builder.Append("else\n");
builder.Append(" e.IsValid = true;\n");
builder.Append("}</script>");
if(!validator.Page.IsClientScriptBlockRegistered(scriptName))
validator.Page.RegisterClientScriptBlock(scriptName, builder.ToString());
// Associate client-side validation
validator.ClientValidationFunction = scriptName;
// Add server-side validation
validator.ServerValidate += new ServerValidateEventHandler(ServerValidateLength);
}
//*********************************************************************
//
// ServerValidateLength Method
//
// Server-side validation method used with a custom validator
// to check whether a string is less than a specified length.
//
//*********************************************************************
public static void ServerValidateLength(Object s, ServerValidateEventArgs e) {
if (e.Value.Length > 300)
e.IsValid = false;
else
e.IsValid = true;
}
// *********************************************************************
// Path Manipulation Methods
// *********************************************************************
//*********************************************************************
//
// ResolveAbsoluteUrl Method
//
// This method translates a relative path into an
// absolute path.
//
//*********************************************************************
public static string ResolveAbsoluteUrl(string Url) {
if (HttpContext.Current.Request.IsSecureConnection)
return "https://" + PrimaryDomain + Url;
else
return "http://" + PrimaryDomain + Url;
}
//*********************************************************************
//
// CacheKey Method
//
// Generates a community relative cache key so that
// cached data can be partitioned from different
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -