using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;

namespace UUN
{
    /// <summary>
    /// 编译Club/Reply_Save.aspx文件
    /// </summary>
    public class 编译扩展_Club_Reply_Save : 编译扩展接口
    {
        private SqlConnection 连接;
        private HttpContext HC;
        private 编译器 编译器;

        public 编译扩展_Club_Reply_Save(SqlConnection 连接, HttpContext HC, 编译器 编译器)
        {
            this.连接 = 连接;
            this.HC = HC;
            this.编译器 = 编译器;
        }


        #region 编译扩展接口 成员

        public string 开始执行代码()
        {
            编译器.方法库 += @"
	private int ID;
	private int 版块ID;
	private DataRow 论坛版块;
	private DataSet 论坛版主;
	private Hashtable 贴子;
	private void 获取论坛版主()
	{
		论坛版主=new DataSet();
		SqlCommand 语句=new SqlCommand(""SELECT * FROM [""+程序.数据表前缀+""社区_论坛_版主] WHERE [所属版块]=""+ID+"" ORDER BY [创建时间]"",访问.连接);
		SqlDataAdapter 填充=new SqlDataAdapter(语句);
		填充.Fill(论坛版主,""论坛版主"");
	}
	private bool 是否版主()
	{
		if(论坛版主==null)
			获取论坛版主();
		bool 返回值=false;
		for(int i=0;i<论坛版主.Tables[0].Rows.Count;i++)
			if(Convert.ToInt32(论坛版主.Tables[0].Rows[i][""版主ID""])==Convert.ToInt32(访问.用户[""ID""]))
				返回值=true;
		return 返回值;
	}
	private void 应用版块设置()
	{
		if(!Convert.ToBoolean(论坛版块[""版块状态""]))
			throw new Exception(论坛版块[""禁止访问提示""].ToString());
		switch(Convert.ToInt32(论坛版块[""回贴权限""]))
		{
			case 0:
				break;
			case 1:
				访问.验证会员();
				break;
			default:
				if(!是否版主())
					throw new Exception(""此版块只允许版主发贴"");
				break;
		}
	}
	private void 回复贴子提交()
	{
		String 回复内容=Request.Form[""ReplyText""];
		if(回复内容.Length<1||回复内容.Length>1000)
			throw new Exception(""回复内容的长度只能在1-1000之间"");

		int ZGID=常用.SQL_最高ID(访问.连接,程序.数据表前缀+""社区_论坛_回贴"");
		int 楼数=0;
		SqlCommand 语句=new SqlCommand(""SELECT [楼数] FROM [""+程序.数据表前缀+""社区_论坛_回贴] WHERE [所属版块]=""+版块ID,访问.连接);
		SqlDataReader 读取=语句.ExecuteReader();
		if(读取.Read())
			楼数=Convert.ToInt32(读取[""楼数""])+1;
		else
			楼数=1;
		读取.Close();

		贴子=常用.SQL_获取(new SqlCommand(""SELECT [标题] FROM [""+程序.数据表前缀+""社区_论坛_贴子] WHERE [所属版块]=""+版块ID+"" AND [ID]=""+ID+"" AND [是否删除]=0"",访问.连接));
		if(贴子==null)
			throw new Exception(""贴子不存在"");

		语句=new SqlCommand(""INSERT INTO [""+程序.数据表前缀+""社区_论坛_回贴]([ID],[所属版块],[楼数],[回贴用户ID],[回贴用户昵称],[回贴用户IP],[回贴用户地区],[贴子ID],[贴子标题],[回贴内容],[支持],[反对],[发表时间])""+
			""VALUES(@ID,@所属版块,@楼数,@回贴用户ID,@回贴用户昵称,@回贴用户IP,@回贴用户地区,@贴子ID,@贴子标题,@回贴内容,@支持,@反对,@发表时间)"",访问.连接);
		语句.Parameters.Add(""@ID"",SqlDbType.Int).Value=ZGID;
		语句.Parameters.Add(""@所属版块"",SqlDbType.Int).Value=版块ID;
		语句.Parameters.Add(""@楼数"",SqlDbType.Int).Value=楼数;
		语句.Parameters.Add(""@回贴用户ID"",SqlDbType.Int).Value=Convert.ToInt32(访问.用户[""ID""]);
		语句.Parameters.Add(""@回贴用户昵称"",SqlDbType.NVarChar).Value=访问.用户[""昵称""].ToString();
		语句.Parameters.Add(""@回贴用户IP"",SqlDbType.NVarChar).Value=Request.UserHostAddress.ToString();
		语句.Parameters.Add(""@回贴用户地区"",SqlDbType.NVarChar).Value=访问.用户[""最后登录地区""].ToString();
		语句.Parameters.Add(""@贴子ID"",SqlDbType.Int).Value=ID;
		语句.Parameters.Add(""@贴子标题"",SqlDbType.NVarChar).Value=贴子[""标题""].ToString();
		语句.Parameters.Add(""@回贴内容"",SqlDbType.NVarChar).Value=回复内容;
		语句.Parameters.Add(""@支持"",SqlDbType.Int).Value=0;
		语句.Parameters.Add(""@反对"",SqlDbType.Int).Value=0;
		语句.Parameters.Add(""@发表时间"",SqlDbType.DateTime).Value=DateTime.Now;
		语句.ExecuteNonQuery();

		int 回贴数;
		语句=new SqlCommand(""SELECT COUNT(ID) FROM [""+程序.数据表前缀+""社区_论坛_回贴] WHERE [贴子ID]=""+ID,访问.连接);
		回贴数=Convert.ToInt32(语句.ExecuteScalar());

		语句=new SqlCommand(""UPDATE [""+程序.数据表前缀+""社区_论坛_贴子] SET [回贴数]=""+回贴数+"" WHERE [所属版块]=""+版块ID+"" AND [ID]=""+ID+"" AND [是否删除]=0"",访问.连接);
		语句.ExecuteNonQuery();
	}
";
            String 返回值 = "";
            返回值 += @"
	ID=Convert.ToInt32(Request.QueryString[""ID""]);
	版块ID=Convert.ToInt32(Request.QueryString[""BID""]);
	论坛版块=常用.获取版块(版块ID);
	应用版块设置();
	回复贴子提交();
";
            return 返回值;
        }

        public string 编译公共标签(string 代码)
        {
            switch (代码)
            {
                case "ID":
                    return @"
		返回值.Append(ID);
";
                case "标题":
                    return @"
		返回值.Append(Server.HtmlEncode(贴子[""标题""].ToString()));
";
                case "版块ID":
                    return @"
		返回值.Append(版块ID);
";
                case "版块名称":
                    return @"
		返回值.Append(Server.HtmlEncode(论坛版块[""版块名称""].ToString()));
";
                default:
                    return "";
            }
        }

        public string 编译模板方法(string 方法名称, string[] 属性数组)
        {
            return "";
        }

        public string 结束执行代码()
        {
            return "";
        }

        #endregion
    }
}