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

namespace UUN
{
    /// <summary>
    /// 其它模板的查看留言编译部分
    /// </summary>
    public class 编译扩展_其它模板_查看留言 : 编译扩展接口
    {
        private SqlConnection 连接;
        private HttpContext HC;
        private 编译器 编译器;

        public 编译扩展_其它模板_查看留言(SqlConnection 连接, HttpContext HC, 编译器 编译器)
        {
            this.连接 = 连接;
            this.HC = HC;
            this.编译器 = 编译器;
        }

        private String 其它模板_查看留言_查询字段 = "[ID],[留言本ID]";
        private String 其它模板_查看留言_时间格式 = "yyyy-MM-dd HH:mm:ss";
        private void 增加查询字段(String 字段名称)
        {
            String[] 字段数组 = 字段名称.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < 字段数组.Length; i++)
                if (其它模板_查看留言_查询字段.IndexOf("[" + 字段数组[i] + "]") == -1)
                    其它模板_查看留言_查询字段 += ",[" + 字段数组[i] + "]";
        }

        public String 开始执行代码()
        {
            编译器.方法库 += @"	private String 当前页面;
	//参数
	private new int ID;
	private int 留言本ID;
	//其它
	private String 跳页表单项;
	private String _3G跳页表单项;
	private Hashtable 留言;
	private String 查询字段;
	private String 时间格式;
	private void 生成留言()
	{
		SqlCommand 语句=new SqlCommand(""SELECT ""+查询字段+"" FROM [""+程序.数据表前缀+""其它_留言_留言]""+(ID==0?"""":"" WHERE [ID]=""+ID),访问.连接);
		留言=常用.SQL_获取(语句);
		if(留言==null)
			throw new Exception(""留言不存在"");
		留言本ID=Convert.ToInt32(留言[""留言本ID""]);
	}
	private bool 是否保密()
	{;
		if(!Convert.ToBoolean(留言[""是否保密""]))
			return false;
		else if(Convert.ToString(留言[""留言密码""])==Request.Form[""password""])
			return false;
		else
			return true;
	}
";
            String 返回值 = "";
            返回值 += @"	ID=Convert.ToInt32(Request.QueryString[""ID""]);
	查询字段=获取查询字段();
	时间格式=获取时间格式();
	生成留言();
	当前页面=程序.安装位置+""" + (编译器.是否WML网页 ? "" : "3G_") + @"L_Message.aspx"";
";
            return 返回值;
        }

        public String 编译公共标签(String 代码)
        {
            switch (代码)
            {
                case "ID":
                    return "\t\t返回值.Append(ID);\r\n";
                case "留言本ID":
                    return "\t\t返回值.Append(留言本ID);\r\n";
                case "留言本名称":
                    增加查询字段("留言本名称");
                    return "\t\t返回值.Append(Server.HtmlEncode(留言[\"留言本名称\"].ToString()));\r\n";
                case "留言本地址":
                    return "\t\t返回值.Append(Server.HtmlEncode(常用.处理地址(程序.安装位置+\"" + (编译器.是否WML网页 ? "" : "3G_") + "GuestBook.aspx?ID=\"+留言本ID,访问.用户[\"标识\"].ToString())));\r\n";
                case "标题":
                    增加查询字段("标题");
                    return "\t\t返回值.Append(Server.HtmlEncode(留言[\"标题\"].ToString()));\r\n";
                case "发表人":
                    增加查询字段("发表人");
                    return "\t\t返回值.Append(Server.HtmlEncode(留言[\"发表人\"].ToString()));\r\n";
                case "留言表情":
                    增加查询字段("留言表情");
                    return "\t\t返回值.Append(Server.HtmlEncode(留言[\"留言表情\"].ToString()));\r\n";
                case "留言内容":
                    增加查询字段("留言内容");
                    return "\t\t返回值.Append(常用.UBB转换(Server.HtmlEncode(留言[\"留言内容\"].ToString()),访问.用户));\r\n";
                case "回复内容":
                    增加查询字段("回复内容");
                    return "\t\t返回值.Append(常用.UBB转换(Server.HtmlEncode(留言[\"回复内容\"].ToString()),访问.用户));\r\n";
                case "回复时间":
                    增加查询字段("回复时间");
                    return "\t\t返回值.Append(时间格式==null?留言[\"回复时间\"].ToString():Convert.ToDateTime(留言[\"回复时间\"]).ToString(时间格式));\r\n";
                case "保密":
                    增加查询字段("是否保密,留言密码");
                    return @"		if(是否保密())
		{
";
                case "/保密":
                    return @"
		}
";
                case "非保密":
                    增加查询字段("是否保密,留言密码");
                    return @"		if(!是否保密())
		{
";
                case "/非保密":
                    return @"
		}
";
                case "回复":
                    增加查询字段("是否已回复");
                    return @"		if(Convert.ToBoolean(留言[""是否已回复""]))
		{
";
                case "/回复":
                    return @"
		}
";
                case "未回复":
                    增加查询字段("是否已回复");
                    return @"		if(!Convert.ToBoolean(留言[""是否已回复""]))
		{
";
                case "/未回复":
                    return @"
		}
";
                case "留言时间":
                    增加查询字段("留言时间");
                    return "\t\t返回值.Append(Convert.ToDateTime(留言[\"留言时间\"]).ToString(时间格式));\r\n";
                default:
                    return "";
            }
        }

        public String 编译模板方法(String 方法名称, String[] 属性数组)
        {
            switch (方法名称)
            {
                case "格式设置":
                    return 编译模板方法_格式设置(属性数组[0]);
                default:
                    return "";
            }
        }

        private String 编译模板方法_格式设置(String 时间格式)
        {
            if (时间格式 != "")
                其它模板_查看留言_时间格式 = 时间格式;
            return "";
        }

        public string 结束执行代码()
        {
            编译器.方法库 += @"	private String 获取时间格式()
	{
";
            if (其它模板_查看留言_时间格式 == null || 其它模板_查看留言_时间格式 == "")
                编译器.方法库 += "\t\treturn null;\r\n";
            else
                编译器.方法库 += "\t\treturn @\"" + 其它模板_查看留言_时间格式.Replace("\"", "\"\"") + "\";\r\n";
            编译器.方法库 += @"
	}
";
            编译器.方法库 += @"	private String 获取查询字段()
	{
";
            编译器.方法库 += "\t\treturn @\"" + 其它模板_查看留言_查询字段.Replace("\"", "\"\"") + "\";\r\n";
            编译器.方法库 += @"
	}
";
            编译器.查询字段 = 其它模板_查看留言_查询字段;
            return "";
        }
    }
}