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/Reg_hand.aspx文件
    /// </summary>
    public class 编译扩展_Club_Reg_hand : 编译扩展接口
    {
        private SqlConnection 连接;
        private HttpContext HC;
        private 编译器 编译器;
        private DataSet 结构数据;

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

        public string 开始执行代码()
        {
            return @"		if(!Convert.ToBoolean(程序.设置[""注册用户_是否开启注册""]))
			throw new Exception(Convert.ToString(程序.设置[""注册用户_暂停注册提示""]));
		if(!Convert.ToBoolean(程序.设置[""注册用户_是否启用手工注册""]))
			throw new Exception(""手工注册尚未启用"");
";
        }

        public string 编译公共标签(string 代码)
        {
            String 返回值 = "";
            switch (代码)
            {
                case "注册数据项":
                    {
                        if (结构数据 == null)
                            结构数据 = 获取资料结构数据();
                        for (int i = 0; i < 结构数据.Tables[0].Rows.Count; i++)
                        {
                            DataRow 行 = 结构数据.Tables[0].Rows[i];
                            String 数据代码 = "";
                            switch (Convert.ToInt32(行["数据类型"]))
                            {
                                case 0:
                                    数据代码 = "<input type=\"text\" name=\"" + 行["表单名称"] + "\" maxlength=\"" + 行["最大大小(长度)"] + "\" value=\"" + HC.Server.HtmlEncode(行["默认值"].ToString()) + "\" />";
                                    break;
                                case 1:
                                    数据代码 = "<input type=\"text\" name=\"" + 行["表单名称"] + "\" format=\"*N\" value=\"" + Convert.ToInt32(行["默认值"]) + "\" size=\"4\" />";
                                    break;
                                default:
                                    {
                                        String[] 值数组 = 行["值列表"].ToString().Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                                        数据代码 = "<select name=\"" + 行["表单名称"] + "\" value=\"" + HC.Server.HtmlEncode(行["默认值"].ToString()) + "\">";
                                        for (int i1 = 0; i1 < 值数组.Length; i1++)
                                            数据代码 += "<option value=\"" + HC.Server.HtmlEncode(值数组[i1]) + "\">" + HC.Server.HtmlEncode(值数组[i1]) + "</option>";
                                        数据代码 += "</select>";
                                    }
                                    break;
                            }
                            返回值 += "\t\t" + @"返回值.Append(@""" +
                                行["表单代码"].ToString()
                                .Replace("$项名称$", HC.Server.HtmlEncode(行["数据名称"].ToString()))
                                .Replace("$项代码$", 数据代码)
                                .Replace("\"", "\"\"") + "\");\r\n";
                        }
                    }
                    break;
                case "注册表单项":
                    {
                        if (结构数据 == null)
                            结构数据 = 获取资料结构数据();
                        for (int i = 0; i < 结构数据.Tables[0].Rows.Count; i++)
                        {
                            DataRow 行 = 结构数据.Tables[0].Rows[i];
                            返回值 += "\t\t返回值.Append(@\"<postfield name=\"\"" +
                                HC.Server.HtmlEncode(行["表单名称"].ToString()) +
                                "\"\" value=\"\"$(" +
                                HC.Server.HtmlEncode(行["表单名称"].ToString()) +
                                ")\"\" />\");\r\n";
                        }
                    }
                    break;
            }
            return 返回值;
        }
        private DataSet 获取修改资料结构数据()
        {
            DataSet 数据 = new DataSet();
            SqlCommand 语句 = new SqlCommand("SELECT [ID],[数据名称],[数据类型],[最小大小(长度)],[最大大小(长度)],[值列表],[是否允许重复],[默认值],[表单代码],[备注],[表单名称] FROM [" + 程序.数据表前缀 + "社区_用户_资料结构] WHERE [是否修改资料项]=@是否修改资料项 ORDER BY [ID]", 连接);
            语句.Parameters.Add("@是否修改资料项", SqlDbType.Bit).Value = true;
            SqlDataAdapter 填充 = new SqlDataAdapter(语句);
            填充.Fill(数据, "用户资料结构");
            return 数据;
        }
        private DataSet 获取资料结构数据()
        {
            DataSet 数据 = new DataSet();
            SqlCommand 语句 = new SqlCommand("SELECT [ID],[数据名称],[数据类型],[最小大小(长度)],[最大大小(长度)],[值列表],[是否允许重复],[默认值],[表单代码],[备注],[表单名称] FROM [" + 程序.数据表前缀 + "社区_用户_资料结构] WHERE [是否注册项]=@是否注册项 ORDER BY [ID]", 连接);
            语句.Parameters.Add("@是否注册项", SqlDbType.Bit).Value = true;
            SqlDataAdapter 填充 = new SqlDataAdapter(语句);
            填充.Fill(数据, "用户资料结构");
            return 数据;
        }

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

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