<?php
require_once ('CLbaseform.php');

class CLfrmadd extends baseForm
{
	function CLfrmadd()
	{
		$this->__construct();
	}

	function __construct()
	{
		baseForm::__construct();
		$this->_form = new HTML_QuickForm('form', 'post', $_SERVER['PHP_SELF'], '', null, true);
		$this->db	 = new DataBase();
	}

	//KVa => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角英数字を半角英数字に変換する
	//KVC => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角ひらがなを全角カタカナに変換する
	//n   => 全角数字を半角数字に変換する
	var $columns = array(
						array("column" => "frm_id", "conv" => "n", "tags" => false),
						array("column" => "frm_name", "conv" => "KVa", "tags" => false),
						array("column" => "frm_order", "conv" => "KVa", "tags" => false),
						array("column" => "frm_mail_subject", "conv" => "KVa", "tags" => false),
						array("column" => "frm_mail_address", "conv" => "KVa", "tags" => false),
						array("column" => "frm_mail_header", "conv" => "KVa", "tags" => false),
						array("column" => "frm_mail_footer", "conv" => "KVa", "tags" => false),
						array("column" => "frm_mail_finishing", "conv" => "KVa", "tags" => false)
						);

	/**
	 * Smarty Element 設定
	 * @param
	 * @return
	 */
	function setElements()
	{
		//登録フォーム作成
		$this->_form = new HTML_QuickForm('form', 'post', $_SERVER['PHP_SELF'], '', null, true);
		$this->_form->addElement('hidden','token', null);
		$this->_form->addElement('hidden','frm_id', $_REQUEST["frm_id"]);
		$this->_form->addElement('text', 'frm_name', null, array('size' => 60, 'maxlength' => 60, 'id' => 'frm_name'));
		$this->_form->addElement('text', 'frm_order', null, array('size' => 6, 'maxlength' => 4, 'id' => 'frm_order', 'style'=>'ime-mode:disabled; width:40px;'));
		$this->_form->addElement('text', 'frm_mail_subject', null, array('size' => 60, 'maxlength' => '60', 'id' => 'frm_mail_subject'));
		$this->_form->addElement('text', 'frm_mail_address', null, array('size' => 60, 'maxlength' => '200', 'id' => 'frm_mail_address'));
		$this->_form->addElement('textarea', 'frm_mail_header', null, array('cols' => 80, 'rows' => 4, 'id' => 'frm_mail_header'));
		$this->_form->addElement('textarea', 'frm_mail_footer', null, array('cols' => 80, 'rows' => 4, 'id' => 'frm_mail_footer'));
		$this->_form->addElement('textarea', 'frm_mail_finishing', null, array('cols' => 80, 'rows' => 4, 'id' => 'frm_mail_finishing'));
	}

	/**
	 * フォーム入力エラーチェックの設定
	 * @param
	 * @return
	 */
	function setRules()
	{
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->setJsWarnings('下記の項目が不正です', '');
		$this->_form->registerRule('frm_name_valid', 'callback', 'check_frm_name');
		$this->_form->registerRule('check_token', 'callback', 'check_token', $this);

		$this->_form->addRule('frm_name', '・「フォーム名称」を入力してください', 'required', null);
		//フォーム名称のユニーク性をチェックする
		if ($_REQUEST['frm_id'] > 0) {
			$frm_name = $this->getFormnm($_REQUEST['frm_id']);
			if ($frm_name['frm_name'] != $_REQUEST['frm_name']) {
				$this->_form->addRule('frm_name', '・ご入力いただきました「フォーム名称」は既に登録されています', 'frm_name_valid', $_REQUEST, $this->erchk);
			}
		} else {
			$this->_form->addRule('frm_name', '・ご入力いただきました「フォーム名称」は既に登録されています', 'frm_name_valid', $_REQUEST, $this->erchk);
		}

		$this->_form->addRule('frm_order', '・「表示順」を入力してください', 'required', null);
		$this->_form->addRule('frm_order', '・「表示順」には数字を入力してください', 'numeric', null);
		$this->_form->addRule('frm_mail_subject', '・「件名」を入力してください', 'required', null);
		$this->_form->addRule('frm_mail_header', '・「文章ヘッダ」を入力してください', 'required', null);
		$this->_form->addRule('frm_mail_footer', '・「文章フッタ」を入力してください', 'required', null);
		$this->_form->addRule('frm_mail_address', '・「受信先メールアドレス」を入力してください', 'required', null);
		
		$this->_form->addRule('token', '・不正なページ遷移の為処理を停止しました。管理トップよりやり直してください。', 'check_token', null);
		$this->_form->addRule('token', '・不正なページ遷移の為処理を停止しました。管理トップよりやり直してください。', 'required', null);	
	}

	/**
	 * ボタン作成
	 * @param	frozen
	 * @return
	 */
	function setButtons($frozen = false)
	{
		$buttons = array();
		//確認画面のボタン
		if ($frozen) {
			if ($_REQUEST['frm_defaultflg'] == 1) {
				$buttons[] = $this->_form->createElement('submit', 'BTNList', ' 一覧に戻る ', array('id' => 'BTNList', 'class' => 'bsmBtnListBack'));
			} else {
				$buttons[] = $this->_form->createElement('submit', 'BTNback', ' 編集に戻る ', array('id' => 'BTNback', 'class' => 'bsmBtnBack'));
				$buttons[] = $this->_form->createElement('submit', 'BTNsave', ' 保存 ', array('id' => 'BTNsave', 'class' => 'bsmBtnSave'));
			}
		//編集画面のボタン
		} else {
			$buttons[] = $this->_form->createElement('submit', 'BTNnext', ' 次へ進む ', array('id' => 'BTNnext', 'class' => 'bsmBtnNext'));
			if($_REQUEST['frm_id'] > 0) {
				$buttons[] = $this->_form->createElement('submit', 'BTNList', ' 一覧に戻る ', array('id' => 'BTNList', 'class' => 'bsmBtnListBack'));
				$buttons[] = $this->_form->createElement('submit', 'BTNdelete', ' 削除 ', array('id' => 'BTNdelete', 'class' => 'bsmBtnDelete', 'onClick' => 'return confirm(\'本当に削除してよろしいですか？\')'));
			}
		}
		$this->_form->addGroup($buttons, "buttons", null, '&nbsp; &nbsp;');
	}

	/**
	 * フォームIDからフォーム情報取得
	 * @param	frm_id
	 * @return	array
	 */
	function getData($frm_id) {
		if (isset($frm_id) && is_numeric($frm_id)) {
			$result = $this->db->prepare("select * from mdl_extMdlFormGnrtr_tbl_form where frm_id = ?", $frm_id);
			if ($result != null) {
				return $result->fetchRow(DB_FETCHMODE_ASSOC);
			}
		}
		return null;
	}

	/**
	 * フォームIDからフォーム名称取得
	 * @param	frm_id
	 * @return	array
	 */
	function getFormnm($frm_id)	{
		if (isset($frm_id) && is_numeric($frm_id)) {
			$result = $this->db->prepare("select frm_name from mdl_extMdlFormGnrtr_tbl_form where frm_id = ?", $frm_id);
			if ($result != null) {
				return $result->fetchRow(DB_FETCHMODE_ASSOC);
			}
		}
		return null;
	}

	/**
	 * フォームIDからフォーム履歴件数取得
	 * @param	frm_id
	 * @return	count
	 */
	function getHistCount($frm_id)	{
		$db = null;
		$db = DB::connect(DSN);
		if (PEAR::isError($db)) {
			die($db->getMessage());
		}
		$sql = "select count(*)
				from   mdl_extMdlFormGnrtr_tbl_inquiry_header
				where  ihea_frm_id	  =".$frm_id.
				" and ihea_active = 1";
		$cnt = $db->getOne($sql);
		return $cnt;
	}

	/**
	 * フォームデータ保存
	 * @param	record
	 * @return	null or err_str
	 */
	function doSave($record) {
		$record['frm_name'] = mb_convert_kana($record['frm_name'],"n");
		//更新時
		if (isset($record["frm_id"]) && is_numeric($record["frm_id"])) {
			return $this->update($record);
		//新規時
		} else {
			return $this->insert($record);
		}
	}

	/**
	 * 新規内容の登録
	 * @param	record
	 * @return	null or err_str
	 */
	function insert($record) {
		if(DBTYPE == 'pgsql'){
			$record["frm_id"] = $this->db->getKey("mdl_extMdlFormGnrtr_tbl_form_frm_id");
		}
		$record["frm_active"] = 1;
		$record["frm_c_date"] = date('Y-m-d H:i:s');
		$record["frm_u_date"] = date('Y-m-d H:i:s');
		$this->db->query('BEGIN');
		if ($this->db->insert("mdl_extMdlFormGnrtr_tbl_form", $record)) {
			$this->db->query('COMMIT');
			return null;
		}

		$this->db->query('ROLLBACK');
		return "保存に失敗しました";
	}

	/**
	 * 更新内容の登録
	 * @param	record
	 * @return	null or err_str
	 */
	function update($record) {
		if (isset($record["frm_id"]) && is_numeric($record["frm_id"])) {
			unset($record["frm_c_date"]);
			unset($record["frm_active"]);
			$record["frm_u_date"] = date('Y-m-d H:i:s');
			$this->db->query('BEGIN');
			if ($this->db->update("mdl_extMdlFormGnrtr_tbl_form", $record, "frm_id = " . $record["frm_id"])) {
				$this->db->query('COMMIT');
				return null;
			}
			$this->db->query('ROLLBACK');
			return "・保存に失敗しました";
		}
		return "・フォーム名称が不明です";
	}

	/**
	 * フォーム削除
	 * @param	post
	 * @return	null or err_str
	 */
	function delete($post) {
		if (isset($post["frm_id"])) {
			$this->db->query('BEGIN');
			//フォームテーブルを削除
			if ($this->db->update("mdl_extMdlFormGnrtr_tbl_form", array("frm_active" => 0, "frm_u_date" => date('Y-m-d H:i:s')), "frm_id = '" . $post["frm_id"] . "'")) {
				//パーツテーブルを削除
				if ($this->db->update("mdl_extMdlFormGnrtr_tbl_part", array("prt_part_active" => 0, "prt_u_date" => date('Y-m-d H:i:s')), "prt_frm_id = '" . $post["frm_id"] . "'")) {
					$this->db->query('COMMIT');
					return null;
				}
			}
			$this->db->query('ROLLBACK');
			return "・削除に失敗しました";
		}
		return "・フォーム名称が不明です";
	}
}

	/*
	 * フォーム名称ユニークチェック
	 * @param $value
	 * @param $sub_ar
	 */
	function check_frm_name($value, $sub_ar = null) {
		$frm_name = null;
		$frm_name = isset($sub_ar["frm_name"]) ? mb_convert_kana($sub_ar["frm_name"],"n") : "";
		$db = null;
		$db = DB::connect(DSN);
		if (PEAR::isError($db)) {
			die($db->getMessage());
		}
		$sql = "select count(*)
				from   mdl_extMdlFormGnrtr_tbl_form
				where  frm_name	  = '" . $frm_name . "'
				and    frm_active = 1";
		$cnt = $db->getOne($sql);
		if ($cnt == 0) {
			return true;
		} else {
			return false;
		}
	}
?>