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 BasePage1 : System.Web.UI.Page, IHttpHandler, IRequiresSessionState { /// /// 系统版本号 /// protected static string version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); /// /// 当前页面的模板文档对象 /// protected TemplateDocument Document { get; set; } /// /// 当前页面所在模板库 /// protected WeiSha.Common.Templates.TemplateBank TmBank { get; set; } /// /// 当前页面的模板文档的配置参数 /// protected virtual TemplateDocumentConfig DocumentConfig { get { return TemplateDocumentConfig.Default; } } /// /// 初始化当前页面模板数据 /// protected abstract void InitPageTemplate(HttpContext context); /// /// 装载当前页面的模板文档 /// public virtual void LoadCurrentTemplate() { //是否是手机端网页 string filePath = this.Request.Url.AbsolutePath; bool isMobi = isMobilePage(out filePath); //处理后filePath为文件名(不含扩展名) if (isMobi && LoginState.Accounts.IsLogin) LoginState.Accounts.Refresh(LoginState.Accounts.CurrentUser); //取模板对象 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("没有任何模板库可用!"); //是否是公共页面 if (TmBank.Config.Public == null) throw new Exception("未找到公共模板库!"); bool isPublic = TmBank.Config.Public.PageExists(filePath); if (isPublic) TmBank = TmBank.Config.Public; //当前模板的所在路径 string tmFile = TmBank.Path.Physics + filePath + ".htm"; //装载模板 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); //不采用缓存 } /// /// 是否是手机端 /// /// /// 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; } //如果是手机端页面,则去除/mobile/路径 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("/", "\\"); //自定义配置项 WeiSha.Common.CustomConfig config = CustomConfig.Load(this.Organ.Org_Config); bool isNoaccess = false; //是否禁止访问 //如果是手机端 if (ismobi) { //如果禁止微信中使用,且又处于微信中时 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; } //如果被限制访问 if (isNoaccess) path = "Noaccess"; return ismobi; } #region 初始化的操作 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; } //当前所在机构 protected Song.Entities.Organization Organ { get; private set; } //学生,教师,管理员 protected Song.Entities.Accounts Account { get; private set; } protected Song.Entities.Teacher Teacher { get; private set; } protected Song.Entities.EmpAccount Admin { get; private set; } /// /// 初始化上下文数据 /// /// private void InitContext(HttpContext context) { //初始化参数 this.Context = context; this.Application = context.Application; this.Request = context.Request; this.Response = context.Response; this.Server = context.Server; this.Session = context.Session; //机构信息 try { this.Organ = Business.Do().OrganCurrent(); if (this.Organ == null) throw new Exception("机构不存在!"); } catch (Exception ex) { throw new Exception(ex.Message); } //登录的信息 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(); //跳转 if (!string.IsNullOrWhiteSpace(gourl)) { context.Response.Redirect(gourl); return; } ////计算树形的运算时间 //DateTime beforDT = System.DateTime.Now; this.InitContext(context); //初始化页面参数 //输出数据 this.LoadCurrentTemplate(); //装载当前页面的模板文档 try { //一些公共对象 this.Document.SetValue("org", this.Organ); this.Document.SetValue("orgpath", Upload.Get["Org"].Virtual); //学生、教师、管理员是否登录 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); //各种路径 this.Document.SetValue("stpath", Upload.Get["Accounts"].Virtual); this.Document.SetValue("thpath", Upload.Get["Teacher"].Virtual); this.Document.SetValue("adminpath", Upload.Get["Employee"].Virtual); //当前模板的路径 this.Document.SetValue("TempPath", this.TmBank.Path.Virtual); //自定义配置项 WeiSha.Common.CustomConfig config = CustomConfig.Load(this.Organ.Org_Config); //手机端隐藏关于“充值收费”等资费相关信息 bool IsMobileRemoveMoney = config["IsMobileRemoveMoney"].Value.Boolean ?? false; this.Document.SetValue("mremove", IsMobileRemoveMoney); //电脑端隐藏资费 bool IsWebRemoveMoney = config["IsWebRemoveMoney"].Value.Boolean ?? false; this.Document.SetValue("wremove", IsWebRemoveMoney); } catch { } //时间 string WeekStr = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-cn")); this.Document.SetValue("week", WeekStr); this.Document.SetValue("tick", DateTime.Now.Ticks); //系统版本号 this.Document.SetValue("version", version); //导航菜单 this.Document.RegisterGlobalFunction(this.Navi); this.Document.RegisterGlobalFunction(this.NaviDrop); //版权信息 this.Document.SetValue("copyright", WeiSha.Common.Request.Copyright); //用本地模板引擎处理标签 Song.Template.Handler.Start(this.Document); // //开始输出 //DateTime afterDT = System.DateTime.Now; //TimeSpan ts = afterDT.Subtract(beforDT); //if (ts.TotalMilliseconds >= 100) //{ // WeiSha.Common.Log.Debug(this.GetType().FullName, string.Format("页面输出,耗时:{0}ms", ts.TotalMilliseconds)); //} } #endregion #region 导航菜单 /// /// 获取导航菜单 /// /// 只用一个参数,为菜单类型 /// 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); //是否是手机端网页 string filePath = this.Request.Url.AbsolutePath; bool isMobi = isMobilePage(out filePath); string device = isMobi ? "mobi" : "web"; //设备 Song.Entities.Navigation[] navi = Business.Do().NaviAll(true, device, type, Organ.Org_ID, pid); if (navi.Length < 1) { Song.Entities.Organization o = Business.Do().OrganDefault(); navi = Business.Do().NaviAll(true, device, type, o.Org_ID, pid); } return navi; } /// /// 获取导航菜单的下拉代码 /// /// 只用一个参数,为菜单类型 /// protected string NaviDrop(object[] p) { string type = null; if (p.Length > 0) type = p[0].ToString(); //是否是手机端网页 string filePath = this.Request.Url.AbsolutePath; bool isMobi = isMobilePage(out filePath); string device = isMobi ? "mobi" : "web"; //设备 Song.Entities.Navigation[] navi = Business.Do().NaviAll(true, device, type, Organ.Org_ID, 0); if (navi.Length < 1) { Song.Entities.Organization o = Business.Do().OrganDefault(); navi = Business.Do().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().NaviChildren(nid, true); if (navi.Length > 0) { html += string.Format("
", nid); foreach (Song.Entities.Navigation n in navi) { html += string.Format("", 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 += "
"; foreach (Song.Entities.Navigation n in navi) html += _NaviDropHtml(n.Nav_ID, type); } return html; } #endregion } }