ZhiYeJianKang_PeiXun/Song.Site/BasePage.cs

322 lines
14 KiB
C#
Raw Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Song.Extend;
using System.IO;
using System.Text;
using VTemplate.Engine;
using WeiSha.Common;
using Song.ServiceInterfaces;
using Song.Entities;
using WeiSha.WebControl;
using System.Web.SessionState;
namespace Song.Site
{
public abstract class BasePage : System.Web.UI.Page, IHttpHandler, IRequiresSessionState
{
/// <summary>
/// ϵͳ<CFB5><EFBFBD><E6B1BE>
/// </summary>
protected static string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
/// <summary>
/// <20><>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
protected TemplateDocument Document { get; set; }
/// <summary>
/// <20><>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
/// </summary>
protected WeiSha.Common.Templates.TemplateBank TmBank{ get; set; }
/// <summary>
/// <20><>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
/// </summary>
protected virtual TemplateDocumentConfig DocumentConfig
{
get { return TemplateDocumentConfig.Default; }
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰҳ<C7B0><D2B3>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
protected abstract void InitPageTemplate(HttpContext context);
/// <summary>
/// װ<>ص<EFBFBD>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĵ<EFBFBD>
/// </summary>
public virtual void LoadCurrentTemplate()
{
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ҳ
string filePath = this.Request.Url.AbsolutePath;
bool isMobi = isMobilePage(out filePath); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>filePathΪ<68>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
if (isMobi && LoginState.Accounts.IsLogin)
LoginState.Accounts.Refresh(LoginState.Accounts.CurrentUser);
//ȡģ<C8A1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this.TmBank = isMobi ?
WeiSha.Common.Template.ForMobile.SetCurrent(this.Organ.Org_TemplateMobi)
: WeiSha.Common.Template.ForWeb.SetCurrent(this.Organ.Org_Template);
if (TmBank == null) throw new Exception(<><C3BB><EFBFBD>κ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>");
//<2F>Ƿ<EFBFBD><C7B7>ǹ<EFBFBD><C7B9><EFBFBD>ҳ<EFBFBD><D2B3>
if (TmBank.Config.Public == null) throw new Exception(<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>⣡");
bool isPublic = TmBank.Config.Public.PageExists(filePath);
if (isPublic) TmBank = TmBank.Config.Public;
//<2F><>ǰģ<C7B0><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
string tmFile = TmBank.Path.Physics + filePath + ".htm";
//װ<><D7B0>ģ<EFBFBD><C4A3>
this.Document = null;
if (!System.IO.File.Exists(tmFile))
{
tmFile = TmBank.Config.Default.Path.Physics + filePath + ".htm";
if (!System.IO.File.Exists(tmFile)) tmFile = TmBank.Config.Public.Path.Physics + "Notfound.htm";
}
this.Document = TemplateDocument.FromFileCache(tmFile, Encoding.UTF8, this.DocumentConfig);
//this.Document = new TemplateDocument(tmFile, Encoding.UTF8, this.DocumentConfig); //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
}
/// <summary>
/// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
protected bool isMobilePage(out string path)
{
bool ismobi = false;
string prefix = "/mobile";
path = this.Request.Url.AbsolutePath;
if (path.Length >= prefix.Length)
{
string pre = path.Substring(0, prefix.Length);
if (pre.ToLower() == prefix.ToLower()) ismobi = true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ҳ<EFBFBD><EFBFBD><E6A3AC>ȥ<EFBFBD><C8A5>/mobile/·<><C2B7>
if (ismobi) path = path.Substring(prefix.Length);
if (path.IndexOf(".") > -1)
path = path.Substring(path.IndexOf("/") + 1, path.LastIndexOf(".") - 1);
else
path = path.Substring(path.IndexOf("/") + 1);
path = path.Replace("/", "\\");
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WeiSha.Common.CustomConfig config = CustomConfig.Load(this.Organ.Org_Config);
bool isNoaccess = false; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
if (ismobi)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ΢<D6B9><CEA2><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>ʱ
if ((config["DisenableWeixin"].Value.Boolean ?? false) && WeiSha.Common.Browser.IsWeixin) isNoaccess = true;
if ((config["DisenableMini"].Value.Boolean ?? false) && WeiSha.Common.Browser.IsWeixinApp) isNoaccess = true;
if ((config["DisenableMweb"].Value.Boolean ?? false) && (!WeiSha.Common.Browser.IsAPICloud && !WeiSha.Common.Browser.IsWeixin))
isNoaccess = true;
if ((config["DisenableAPP"].Value.Boolean ?? false) && WeiSha.Common.Browser.IsAPICloud) isNoaccess = true;
}
else
{
if ((config["WebForDeskapp"].Value.Boolean ?? false) && !WeiSha.Common.Browser.IsDestopApp) isNoaccess = true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
if (isNoaccess) path = "Noaccess";
return ismobi;
}
#region <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
protected new HttpContext Context { get; private set; }
protected new HttpApplicationState Application { get; private set; }
protected new HttpRequest Request { get; private set; }
protected new HttpResponse Response { get; private set; }
protected new HttpServerUtility Server { get; private set; }
protected new HttpSessionState Session { get; private set; }
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>
protected Song.Entities.Organization Organ { get; private set; }
//ѧ<><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʦ<EFBFBD><CAA6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
protected Song.Entities.Accounts Account { get; private set; }
protected Song.Entities.Teacher Teacher { get; private set; }
protected Song.Entities.EmpAccount Admin { get; private set; }
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="context"></param>
private void InitContext(HttpContext context)
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this.Context = context;
this.Application = context.Application;
this.Request = context.Request;
this.Response = context.Response;
this.Server = context.Server;
this.Session = context.Session;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
try
{
this.Organ = Business.Do<IOrganization>().OrganCurrent();
if (this.Organ == null) throw new Exception("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Ϣ
if (Extend.LoginState.Accounts.IsLogin)
{
this.Account = Song.Extend.LoginState.Accounts.CurrentUser;
this.Teacher = Song.Extend.LoginState.Accounts.Teacher;
}
if (Extend.LoginState.Admin.IsLogin)
this.Admin = Song.Extend.LoginState.Admin.CurrentUser;
}
public new bool IsReusable
{
get { return false; }
}
public new void ProcessRequest(HttpContext context)
{
string gourl = WeiSha.Common.Skip.GetUrl(); //<2F><>ת
if (!string.IsNullOrWhiteSpace(gourl))
{
context.Response.Redirect(gourl);
return;
}
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//DateTime beforDT = System.DateTime.Now;
this.InitContext(context); //<2F><>ʼ<EFBFBD><CABC>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this.LoadCurrentTemplate(); //װ<>ص<EFBFBD>ǰҳ<C7B0><D2B3><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĵ<EFBFBD>
try
{
//һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
this.Document.SetValue("org", this.Organ);
this.Document.SetValue("orgpath", Upload.Get["Org"].Virtual);
//ѧ<><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʦ<EFBFBD><CAA6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>¼
if (Extend.LoginState.Accounts.IsLogin)
{
this.Document.SetValue("Account", this.Account);
this.Document.SetValue("stuid", Extend.LoginState.Accounts.UID);
}
if (Extend.LoginState.Accounts.IsLogin) this.Document.SetValue("Teacher", this.Teacher);
if (Extend.LoginState.Admin.IsLogin) this.Document.SetValue("Admin", this.Admin);
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
this.Document.SetValue("stpath", Upload.Get["Accounts"].Virtual);
this.Document.SetValue("thpath", Upload.Get["Teacher"].Virtual);
this.Document.SetValue("adminpath", Upload.Get["Employee"].Virtual);
//<2F><>ǰģ<C7B0><C4A3><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
this.Document.SetValue("TempPath", this.TmBank.Path.Virtual);
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WeiSha.Common.CustomConfig config = CustomConfig.Load(this.Organ.Org_Config);
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9>ڡ<EFBFBD><DAA1><EFBFBD>ֵ<EFBFBD>շѡ<D5B7><D1A1><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool IsMobileRemoveMoney = config["IsMobileRemoveMoney"].Value.Boolean ?? false;
this.Document.SetValue("mremove", IsMobileRemoveMoney);
//<2F><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD>
bool IsWebRemoveMoney = config["IsWebRemoveMoney"].Value.Boolean ?? false;
this.Document.SetValue("wremove", IsWebRemoveMoney);
}
catch { }
//ʱ<><CAB1>
string WeekStr = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-cn"));
this.Document.SetValue("week", WeekStr);
this.Document.SetValue("tick", DateTime.Now.Ticks);
//ϵͳ<CFB5><EFBFBD><E6B1BE>
this.Document.SetValue("version", version);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
this.Document.RegisterGlobalFunction(this.Navi);
this.Document.RegisterGlobalFunction(this.NaviDrop);
//<2F><>Ȩ<EFBFBD><C8A8>Ϣ
this.Document.SetValue("copyright", WeiSha.Common.Request.Copyright);
//<2F>ñ<EFBFBD><C3B1><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A6><EFBFBD><EFBFBD>ǩ
Song.Template.Handler.Start(this.Document);
//
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
this.InitPageTemplate(context);
this.Document.Render(this.Response.Output);
//DateTime afterDT = System.DateTime.Now;
//TimeSpan ts = afterDT.Subtract(beforDT);
//if (ts.TotalMilliseconds >= 100)
//{
// WeiSha.Common.Log.Debug(this.GetType().FullName, string.Format("ҳ<><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʱ<EFBFBD><CAB1>{0}ms", ts.TotalMilliseconds));
//}
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
/// </summary>
/// <param name="p">ֻ<><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns></returns>
protected Song.Entities.Navigation[] Navi(object[] p)
{
string type = null;
if (p.Length > 0) type = p[0].ToString();
int pid = 0;
if (p.Length > 1) int.TryParse(p[1].ToString(), out pid);
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ҳ
string filePath = this.Request.Url.AbsolutePath;
bool isMobi = isMobilePage(out filePath);
string device = isMobi ? "mobi" : "web"; //<2F>
Song.Entities.Navigation[] navi = Business.Do<IStyle>().NaviAll(true, device, type, Organ.Org_ID, pid);
if (navi.Length < 1)
{
Song.Entities.Organization o = Business.Do<IOrganization>().OrganDefault();
navi = Business.Do<IStyle>().NaviAll(true, device, type, o.Org_ID, pid);
}
return navi;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="p">ֻ<><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns></returns>
protected string NaviDrop(object[] p)
{
string type = null;
if (p.Length > 0) type = p[0].ToString();
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ҳ
string filePath = this.Request.Url.AbsolutePath;
bool isMobi = isMobilePage(out filePath);
string device = isMobi ? "mobi" : "web"; //<2F>
Song.Entities.Navigation[] navi = Business.Do<IStyle>().NaviAll(true, device, type, Organ.Org_ID, 0);
if (navi.Length < 1)
{
Song.Entities.Organization o = Business.Do<IOrganization>().OrganDefault();
navi = Business.Do<IStyle>().NaviAll(true, device, type, o.Org_ID, -1);
}
string html = "";
if (navi.Length > 0)
{
foreach (Song.Entities.Navigation n in navi)
{
html += _NaviDropHtml(n.Nav_ID, type);
}
}
return html;
}
private string _NaviDropHtml(int nid, string type)
{
string html = "";
Song.Entities.Navigation[] navi = Business.Do<IStyle>().NaviChildren(nid, true);
if (navi.Length > 0)
{
html += string.Format("<div pid=\"{0}\" class=\"naviBox\" style=\"display:none;\">", nid);
foreach (Song.Entities.Navigation n in navi)
{
html += string.Format("<div nid=\"{1}\" class=\"naviItem\"><a href=\"{3}\" target=\"{4}\" title=\"{5}\" style=\"{6}{7}{8}\">{2}</a></div>",
n.Nav_PID, n.Nav_ID, n.Nav_Name, n.Nav_Url, n.Nav_Target, n.Nav_Title,
string.IsNullOrEmpty(n.Nav_Color) ? "" : "color: " + n.Nav_Color + ";",
string.IsNullOrEmpty(n.Nav_Font) ? "" : "font-family: " + n.Nav_Font + ";",
!n.Nav_IsBold ? "" : "font-weight:bold;");
}
html += "</div>";
foreach (Song.Entities.Navigation n in navi)
html += _NaviDropHtml(n.Nav_ID, type);
}
return html;
}
#endregion
}
}