using System;
using System.Data.SqlClient;

namespace DTable_App
{
	/// <summary>
	/// sharecode 的摘要说明。
	/// </summary>
	public class sharecode
	{
		
		//
		// TODO: 在此处添加构造函数逻辑
		//
	    public static string strBBSName="<a href=../DTableBBS/>www.DTable.com论坛</a>";//定义论坛的名称
		public static string strUserQxSName="DTable_qx";//定义用户的权限session名称
		public static string strUserSName="DTable_user";//定义用户登录后的session名称
		public static string strAdminQxSName="DTable_AdminQX";//定义管理员权限session名称
		public static string strAdminSName="DTable_Admin";//定义管理员登录后session名称
		public static string strAdminLoginUrl="admin_Login.aspx";//定义管理员用户登录的页面
		public static string strUserLoginUrl="/Register/Login.aspx";//定义用户登录的页面
		public static string strSuperAdminSName="DTable_SAdmin";//超级管理员登录后的session名称
		public static string strAdminFrame_LeftName="leftFrame";//定义管理界面左边的框架名
		public static string strAdminFrame_RightName="mainFrame";//定义管理界面右边的框架名
		public static string strFromUrlSName="fromurl";//定义纪录本页的url的sessionName
		public static string strUserNameCookieName="DTable_UserName";
		public static string strPassWordCookieName="DTable_Password";
		public static string DataconnectString="data source=localhost;integrated security=sspi;initial catalog=northwind_test";
        public static string ConnStr="data source=localhost;integrated security=sspi;initial catalog=DTable_App";


		public static string GetApplicationValue(string appname)
		{
			string strapp="";
			System.Web.HttpContext.Current.Application.Lock(); 
		
			if(System.Web.HttpContext.Current.Application[appname]!=null)
			{
				strapp=System.Web.HttpContext.Current.Application[appname].ToString();
			}
			return strapp;
		}

		public static string GetCookie_IdList(string CookieName,string ADDID,string DelID,bool clAll)
		{
			

			string tmpidlist="";
			System.Web.HttpCookie tmpck;
			if(System.Web.HttpContext.Current.Request.Cookies[CookieName]!=null)//获取现有的
			{
				tmpck=System.Web.HttpContext.Current.Request.Cookies[CookieName];
				
			}
			else
			{
				
				tmpck=new System.Web.HttpCookie("");		
				tmpck.Value ="";
				
			}


			tmpidlist=tmpck.Value.ToString();
			if (ADDID!="")
			{
				tmpidlist=tmpidlist.Replace("," + ADDID + ",","") + "," + ADDID + ",";
			}
			else if (DelID!="")
			{
				tmpidlist=tmpidlist.Replace("," + DelID + ",","");
			}
			else if(clAll==true)
			{
				tmpidlist="";
				
			}


			System.Web.HttpContext.Current.Response.Cookies[CookieName].Value=tmpidlist; 
			System.Web.HttpContext.Current.Response.Cookies[CookieName].Expires =System.DateTime.Now.AddDays(60);
 
			return tmpidlist.Replace(",,","@").Replace(",","").Replace("@",",");


		}


		public static string CheckInser(string Str)//过滤sql字符输入的非法代码
		{
			string strtmp="";
			if (Str!=null && Str!="")
			{
				strtmp=Str.Replace("'","‘").Replace(";","；").Replace("--","－－").Replace(":","：");
				
			}
			return strtmp;

		}

		//-----------------------------------------
		public static System.Data.SqlClient.SqlConnection oconn=new SqlConnection(ConnStr);


		public static string GetSessionValue(string sessionName)
		{
			if  (System.Web.HttpContext.Current.Session[sessionName]!=null)
			{
				return  System.Web.HttpContext.Current.Session[sessionName].ToString();
			}
			else
			{
				return "";
			}
		}


		public static bool IsUserId(string StrUserName)//检查用户名是否非法字符
		{
			int tmplen = 0;
			string strtmp="";
			
			if (StrUserName!=null && StrUserName!="")
			{
				tmplen=StrUserName.Length;
				strtmp=StrUserName.Replace("'", "").Replace("-", "").Replace("/", "").Replace("\\", "").Replace(";", "").Replace(",", "").Replace("=", "").Replace("+", "").Replace("(", "").Replace(")", "").Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "").Replace("<", "").Replace(">", "").Replace("|", "").Replace("?", "").Replace("#", "").Replace("!", "").Replace("%", "").Replace("^", "").Replace("&", "").Replace("|", "").Replace("@","");
		

				if (strtmp.Length != tmplen)
				{

					return false;
				}
				else
				{
					return true;
				}
			}
			else
			{
				return false;
			}		
		}
				
		
		public static int GetStrLen(string Str)//获取字符数
		{
			Char[] cc=Str.ToCharArray();
			int intLen=Str.Length;
			int i;
			for(i=0;i<cc.Length;i++)
			{
				if (System.Convert.ToInt32(cc[i])>255)
				{
					intLen++;
				}
			}
			return intLen;

		}
			

		public static string GetRndPassword(int IntLength)//生成N位随机数字
		{
			if (IntLength<1){IntLength=1;}
			Random intRnd=new Random();
			string strTemp="";
			int i;
			for(i=0;i<IntLength;i++)
			{
				strTemp=strTemp + intRnd.Next(0,9).ToString();
			}
			return strTemp;
		}

		public static bool IsNumeric(string Str)//判断是否数字
		{

			System.Int64 inttmp;
			try
			{
				inttmp=System.Convert.ToInt64(Str);
				return true;

			}
			catch
			{
				return false;
			}

		}
		public static bool IsDateTime(string Str)//判断是否日期
		{

			System.DateTime Dtmp;

			try
			{
				Dtmp=System.Convert.ToDateTime(Str); 
				return true;
			}
			catch
			{
				return false;

			}
		}

		public static string GetQueryStringValue(string qsName)//获取传入的querystring参数
		{
			if (qsName!="")
			{
				if(System.Web.HttpContext.Current.Request.QueryString[qsName]!=null)
				{
					return System.Web.HttpContext.Current.Request.QueryString[qsName].ToString().Replace("'","‘").Replace("--","－－").Replace(";","；");
				}
				else
				{
					return "";
				}
			}
			else
			{
				return "";
			}
		}

		public static string GetFormValue(string qsName)//获取传入的form值
		{
			if (qsName!="")
			{
				if(System.Web.HttpContext.Current.Request.Form[qsName]!=null)
				{
					return System.Web.HttpContext.Current.Request.Form[qsName].ToString().Replace("'","‘").Replace("--","－－").Replace(";","；");
				}
				else
				{
					return "";
				}
			}
			else
			{
				return "";
			}
		}

		public static string GetCookieValue(string CookieName)//获取cookies
		{
			if (CookieName!="")
			{
				if(System.Web.HttpContext.Current.Request.Cookies[CookieName]!=null)
				{
					return System.Web.HttpContext.Current.Request.Cookies[CookieName].Value.ToString();
				}
				else
				{
					return "";
				}
			}
			else
			{
				return "";
			}
		}

		public static string GetNstring(string Str,int N)//获取前N个字符串
		{
			int intn=N;
			if (intn<1){intn=1;}
	
			string tmpstr=Str;
			Char[] cc=tmpstr.ToCharArray();
			int intLen=tmpstr.Length;
			int i;
			for(i=0;i<cc.Length;i++)
			{
				if(System.Convert.ToInt32(cc[i])>255)
				{
					intLen++;
				}
			}
			if(intLen>N)
			{
				tmpstr=tmpstr.Substring(0,tmpstr.Length-1);
				tmpstr=GetNstring(tmpstr,intn);
			}
			
			return tmpstr;
		}
		public static void CheckAdminQx(string strQxName)
		{
			if(System.Web.HttpContext.Current.Session[strAdminQxSName]!=null)//如果管理员权限不为空
			{
				if(System.Web.HttpContext.Current.Session[strAdminQxSName].ToString().IndexOf(strQxName)<0)//如果管理员权限不包含权限的名称
				{
					if(System.Web.HttpContext.Current.Session[strSuperAdminSName]!=null)//如果是超级管理员就有权限
					{

					}
					else//如果不是超级管理员，且不包含本权限
					{
						System.Web.HttpContext.Current.Response.Write("没有权限");
						System.Web.HttpContext.Current.Response.End();
					}
				}
			
		

			}
			else//如果权限session为空
			{
				System.Web.HttpContext.Current.Response.Write("您没有获得任何权限");
				System.Web.HttpContext.Current.Response.End();
			}
			

		}

	
		public static void CheckAdmin()
		{
			if (System.Web.HttpContext.Current.Session[strAdminQxSName]!=null)//如果包含管理员session
			{
			

			}
				
			else//如果不包含管理员session，就引导到登录页面

			{
				System.Web.HttpContext.Current.Response.Write ("<script language=javascript>window.open('about:blank','" + strAdminFrame_LeftName + "');window.open('admin_login.aspx','" + strAdminFrame_RightName + "');</script>");
				System.Web.HttpContext.Current.Response.End();


			}
		}
		public static bool CheckUserLogin (string UserID,string Password)//检查用户登录，将返回布尔类型

		{
			System.Data.SqlClient.SqlConnection DataConnection=new SqlConnection(ConnStr) ;//定义连接
			string struserid=UserID.Replace("'","").Replace("--","").Replace(",","").Replace(" ","");//替换非法字符
			string strpassword=Password;
			if(Password.Length!=32)//如果传入的密码不是32位的,就需要md5编码
			{
				strpassword=Password.Replace("'","").Replace("--","").Replace(",","").Replace(" ","");//替换非法字符			
				strpassword=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strpassword,"md5");//对密码进行md5加密
			}
			DataConnection.Open();//打开数据连接
			System.Data.SqlClient.SqlCommand mycmd=new System.Data.SqlClient.SqlCommand("select top 1 id,用户名,密码,用户权限 from DTable_User where 用户名='" + struserid + "' and (密码='" + strpassword + "' or 密码='" + strpassword.Substring(8,16) + "')",DataConnection);//定义cmd
			
			//or 密码='" + strpassword.Substring(8,16)是为了兼容动网论坛的16位md5
			
			System.Data.SqlClient.SqlDataReader myreader=mycmd.ExecuteReader();//定义reader
			
			if (myreader.Read())//如果匹配
			{
				
				System.Web.HttpContext.Current.Session[strUserSName]=struserid;//写入用户登录的session
				
				System.Web.HttpContext.Current.Session[strUserQxSName]=myreader.GetValue(3).ToString();//写入用户权限的session
				myreader.Close();
				mycmd.CommandText="update DTable_User set 登录次数=登录次数+1,最后一次登录='" + System.DateTime.Now.ToString() + " " + System.Web.HttpContext.Current.Request.UserHostAddress.ToString() + "';update DTable_User set 密码='" + strpassword + "' where len(密码)=16";//定义更新用户登录信息的语句,并更新密码为32位
				try
				{
					mycmd.ExecuteNonQuery(); 
				}
				catch(System.Exception ExupdateUserLogin)
				{
                    mycmd.Dispose();
					DataConnection.Close();
					DataConnection.Dispose();
					OutMsgBox("更新用户登录信息发生错误：" + ExupdateUserLogin.Message.ToString(),true);
				}



				mycmd.Dispose();								
				DataConnection.Close();
				DataConnection.Dispose();
				return true;//返回真
			}
			else
			{
				//private string strUserQxSName="DTableBBS_qx";//定义用户的权限session名称
				//private string strUserSName="DTableBBS_user";//定义用户登录后的session名称
				//private string strAdminQxSName="DTableBBS_AdminQX";//定义管理员权限session名称
				//private string strAdminSName="DTableBBS_Admin";//定义管理员登录后session名称
				//private string strAdminLoginUrl="adminLogin.aspx";//定义管理员用户登录的页面
				//private string strUserLoginUrl="../Register/UserLogin.aspx";//定义用户登录的页面
				//private string strSuperAdminSName="DTableBBS_SAdmin";//超级管理员登录后的session名称
				//private string strAdminFrame_LeftName="leftFrame";//定义管理界面左边的框架名
				//private string strAdminFrame_RightName="mainFrame";//定义管理界面右边的框架名
				myreader.Close();
				mycmd.Dispose();		
						
				DataConnection.Close();
				DataConnection.Dispose();
				
				return false;//返回假
			}
			
		}
		public static bool CheckAdminLogin(string struserid,string strpassword)//检查管理员登录
		{			

			if(struserid=="" || strpassword=="")
			{
				System.Web.HttpContext.Current.Response.Write ("传入的用户名和密码不完整");
				System.Web.HttpContext.Current.Response.End();
			}
			string tmptd=System.DateTime.Today.ToShortDateString();
			struserid=struserid.Replace("'","").Replace("--","").Replace(",","").Replace(" ","");//替换非法字符
			strpassword=strpassword.Replace("'","").Replace("--","").Replace(",","").Replace(" ","");//替换非法字符

strpassword=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strpassword,"md5");//对密码进行md5加密

			string tmpsql="select top 1 用户,密码,权限,超级管理员,有效期从,有效期到 from DTable_AdminUser where 用户='"+ struserid + "' and 密码='" + strpassword + "' and '" + tmptd + "' between 有效期从 and 有效期到";//定义查询语句
			System.Data.SqlClient.SqlConnection DataConnection=new SqlConnection(ConnStr);//定义数据连接
			DataConnection.Open();//打开数据库
			System.Data.SqlClient.SqlCommand myCommand= new System.Data.SqlClient.SqlCommand(tmpsql, DataConnection);//定义cmd
			
			System.Data.SqlClient.SqlDataReader myReader=myCommand.ExecuteReader();//定义reader
			
			if (!myReader.Read())//如果没有匹配，就设置所有管理员session为空
			{
				myReader.Close();
				myCommand.Dispose();
				DataConnection.Close();
				DataConnection.Dispose();

				
				
				System.Web.HttpContext.Current.Session[strAdminQxSName]=null;//设置管理员权限session为空
				System.Web.HttpContext.Current.Session[strAdminSName]=null;//设置管理员session为空			
				
				System.Web.HttpContext.Current.Session[strSuperAdminSName]=null;//设置超级管理员session为空

						
				return false;

			}
			else//如果匹配，就设置管理员session

			{
				System.Web.HttpContext.Current.Session[strAdminQxSName]=myReader.GetValue(2).ToString();//为管理员权限session赋值
				
				System.Web.HttpContext.Current.Session[strAdminSName]=myReader.GetValue(0).ToString();//设置管理员session
				
				
				if(myReader.GetBoolean(3)==true)
				{
					System.Web.HttpContext.Current.Session[strSuperAdminSName]=myReader.GetValue(0).ToString();//设置超级管理员session
				}
				myReader.Close();
				myCommand.CommandText="insert into DTable_AdminLog(用户,登录IP) values('" + struserid + "','" + System.Web.HttpContext.Current.Request.UserHostAddress.ToString()  + "')";//开始记录到登录日志
				try
				{
					myCommand.ExecuteNonQuery();
				}
				catch
				{
				}
				myCommand.Dispose();
				DataConnection.Close();
				DataConnection.Dispose();
				return true;
			}      
		}

		public static void OutMsgBox(string Message,bool EnableBackHistory)//返回一个对话框信息，并可以设置是否要返回前一级页面
		{
			string tmpback="";
			if (EnableBackHistory)
			{
				tmpback="window.history.back(1);";
			}
			System.Web.HttpContext.Current.Response.Write("<script language=javascript>window.alert('" + Message + "');" + tmpback + "</script>");
			System.Web.HttpContext.Current.Response.End();
		}


		public static void CheckUserQX(string strQXstring)//检查用户权限
		{
			if(System.Web.HttpContext.Current.Session[strUserQxSName]!=null)//如果包含用户权限session
			{
				string strtmpvalue=System.Web.HttpContext.Current.Session[strUserQxSName].ToString();
				if(strtmpvalue!="")
				{
					if(strtmpvalue.IndexOf(strQXstring)>-1)//如果包含本权限
					{
						
					}
					else//如果不包含本权限
					{
						System.Web.HttpContext.Current.Response.Write("您没有权限查看此页");
						System.Web.HttpContext.Current.Response.End();
					}
				
				}
				else//如果权限为空就通知
				{
					System.Web.HttpContext.Current.Response.Write("您没有权限查看此页");
					System.Web.HttpContext.Current.Response.End();
				}
			}
			else//如果权限session为空就通知
			{
				System.Web.HttpContext.Current.Response.Write("您没有权限查看此页");
				System.Web.HttpContext.Current.Response.End();
			}
		}

		public static void Executesql(string SqlText)//执行一个sql语句
		{
			if(SqlText=="")
			{
				System.Web.HttpContext.Current.Response.Write ("执行的语句不能为空");
				System.Web.HttpContext.Current.Response.End();
			}
			System.Data.SqlClient.SqlConnection DataConnection=oconn;//定义数据连接
			DataConnection.Open();//打开数据库
			System.Data.SqlClient.SqlCommand myCommand= new System.Data.SqlClient.SqlCommand(SqlText, DataConnection);//定义cmd
 			
			try
			{
				myCommand.ExecuteNonQuery();//执行命令
			}
			catch ( Exception tmpe)
			{
				System.Web.HttpContext.Current.Response.Write("<br>执行命令出错：" + tmpe.Message);
				myCommand.Dispose();
				DataConnection.Close();
				DataConnection.Dispose();
				System.Web.HttpContext.Current.Response.End();//停止页面输出
				
			}
			
        
			myCommand.Dispose();
			DataConnection.Close();
			DataConnection.Dispose();
       
		}

		///



		public static string GetDataTopList( string SqlText, string TableSty,string Tr1Sty,string Tr2Sty,string UrlString,string UrlTarget,string IcoHtml, int TitleLen,string Field3Color)//获得简单列表,参数：查询语句，表样式，行1样式，行2样式，连接目标页面，连接的窗口名称，图标代码，首列的字数，第3列的颜色。查询语句的列以0开始，第0列是id，第1列是首列，第2列是辅助信息，第3列是图标代码
		{
			string strtemp;
			int inttheno=0;
			string strbg;
			string strtm;
		
			strtemp = "<table " + TableSty + ">";
			System.Data.SqlClient.SqlConnection DataConnection=oconn;
			DataConnection.Open();
			System.Data.SqlClient.SqlCommand tmepcmd= new System.Data.SqlClient.SqlCommand(SqlText, DataConnection);
        
			System.Data.SqlClient.SqlDataReader myReader = tmepcmd.ExecuteReader();
			while( myReader.Read())
			{
				inttheno ++;
				if ((inttheno % 2)==0)
				{
					strbg = Tr1Sty;}
				else
				{
					strbg = Tr2Sty;
				}

				strtemp += "<tr " + strbg + ">";
				if(myReader.FieldCount>3)//如果有4列则作为图片行首
				{
					strtemp += "<td width=15><img src=" + myReader.GetValue(3).ToString() + " border=0></td>";
				}
				else if (IcoHtml != "")
				{
					strtemp += "<td width=15 valign=top>" + IcoHtml + "</td>";
				}
				else
				{
					strtemp+="<td width=15 valign=top>" + inttheno.ToString() + "</td>";
				}
				strtm = System.Convert.ToString(myReader.GetValue(1));
				strtm = GetNstring(strtm, TitleLen);

				strtemp += "<td>";
				if(UrlString!="")
				{
					strtemp+="<a href=" + UrlString + System.Convert.ToString(myReader.GetValue(0)) + " " + UrlTarget + ">" + strtm + "</a>";
				}
				else
				{
					strtemp+=strtm;
				}
				if ( !myReader.IsDBNull(2))
				{
			
					strtemp +=" <font color=" + Field3Color + ">" + System.Convert.ToString(myReader.GetValue(2)) + "</font></td></tr>";
				}
			}
			myReader.Close();
			tmepcmd.Dispose();
			DataConnection.Close();
			DataConnection.Dispose();
			strtemp += "</table>";
			return strtemp;

		}

		public static string ReturnPicList(string strSql,int Rows,int Cols,string strUrl,string strUrlTarget,string strTip,string strTableSty)//返回图片列表，第一个参数是定义查询语句，该查询语句将要返回3个字段，id,图片路径，说明文字。第二个参数是定义一共显示多少行，第三个参数定义显示多少列，第四个参数定义链接的目标地址，第五个参数定义打开连接地址的窗口，第六个参数定义鼠标悬停的提示，第七个参数定义表格的样式。

		{
			System.Data.SqlClient.SqlConnection connDC=oconn;
			string strtable=""; 
			connDC.Open();
			System.Data.SqlClient.SqlCommand mycmd=new SqlCommand(strSql,connDC);
			System.Data.SqlClient.SqlDataReader myreader=mycmd.ExecuteReader();
			int intNo=0;
			while(myreader.Read())
			{
				intNo++;
				if(intNo==1 || (intNo % Cols)==1)
				{
					strtable+="<tr>";
				}
				//public static string ReturnPicList(string strSql,int Rows,int Cols,string strUrl,string strUrlTarget,string strTip,string strTableSty)//返回图片列表，第一个参数是定义查询语句，该查询语句将要返回3个字段，id,图片路径，说明文字。第二个参数是定义一共显示多少行，第三个参数定义显示多少列，第四个参数定义链接的目标地址，第五个参数定义打开连接地址的窗口，第六个参数定义鼠标悬停的提示，第七个参数定义表格的样式。
				string strimgurl="";
				string strDes="";
				string strID="";
				if(!myreader.IsDBNull(0))//获取id
				{
					strID=myreader.GetValue(0).ToString();
				}
				if(!myreader.IsDBNull(1))//获取图像连接地址
				{
					strimgurl=myreader.GetValue(1).ToString();
				}
				
				if(!myreader.IsDBNull(2))//获取描述
				{
					strDes=myreader.GetValue(2).ToString();
				}
				if(strimgurl!="")//定义图像标签
				{
					strimgurl="<img src=" + strimgurl + " border=0>";
				}
				else
				{
					strimgurl="暂无图片";
				}
				//开始写入单元格
				strtable+="<td align=center valign=top><a href=" + strUrl + strID + " target=" + strUrlTarget + ">" + strimgurl + "<br>" + strDes + "</a></td>";
				if((intNo % Cols)==0)//如果是行尾部
				{
					strtable+="</tr>";
				}			
	

			}//end while
			
			myreader.Close();
			mycmd.Dispose();
			connDC.Close();
			connDC.Dispose();
			//开始形成表格
			if(strtable!="")
			{
				if((intNo % Cols)>0)//如果超出一行，并且不是刚好结束
				{
					for(int i=0;i<=(Cols-(intNo % Cols));i++)
					{
						strtable+="<td>&nbsp;</td>";
					}
				}
				strtable="<table " + strTableSty + ">" + strtable + "</table>";
			}
			else
			{
				strtable="<table><tr><td align=center></td>暂无记录</tr></table>";
			}
			
			return strtable;
								
	
	
		}
	}


}
