<?php
//error_reporting(E_ALL);
require_once './class/MySmarty.class.php';  // MySmarty class
require_once './class/Smarty/SmartyValidate.class.php';

/**
 *  入力フォーム表示クラス
 *
 *  @see MySmarty
 */
class Form1{
    /** Smartyのオブジェクト */
    var $_smarty;
    /** プルダウン等の表示データ */
    var $_params = array(
			 'gender'      => array(1=>'男性', 2=>'女性'),

			 'conjugality' => array(
						"選択してください",
						'独身',
						'既婚',
						),
			 
			 'blood'       => array(
						'A'  => 'A型',
						'B'  => 'B型',
						'AB' => 'AB型',
						'O'  => 'O型',
						),
			 
			 'carrier'     => array(
						'DoCoMo',
						'au',
						'SoftBank',
						'その他',
						),
			 );
    
    /**
     * 入力フォーム表示クラス コンストラクタ
     *
     * @param void
     * @return void
     */
    function Form1(){
	session_start();
	$this->_smarty = new MySmarty();
	$this->_smarty->plugins_dir = array(
					    'plugins',
					    'plugins/validate',
                       );
    }

    /**
     * 入力フォームの表示
     *
     * @param void
     * @return void
     */
    function viewForm(){
	SmartyValidate::connect($this->_smarty, true);
	SmartyValidate::register_criteria('isValidDate','validDate');
        SmartyValidate::register_validator('conjugality_validate','conjugality:1:2','isRange');
	SmartyValidate::register_validator('birthday_validate','birth','isValidDate');
	SmartyValidate::register_validator('phone_validate','phone:/^\d{3}\-\d{4}\-\d{4}$/','isRegExp',false, false, 'trim');
	$this->_smarty->assign('title',"Validate付きの入力フォーム サンプル");
	$this->_smarty->assign('params',$this->_params);
	$this->_smarty->display('form2.tpl');
    }

    /**
     * 入力データのValidate
     *
     * @param void
     * @return void
     */
    function confirmForm(){
	SmartyValidate::connect($this->_smarty);
	if(SmartyValidate::is_valid($_POST)) {
	    SmartyValidate::disconnect();
	    $this->_smarty->assign('title',"Validate 入力フォーム サンプル 確認表示");
	    $this->_smarty->assign('params',$this->_params);
	    $this->_smarty->display('form2_confirm.tpl');
	}
	else{
	    $this->_smarty->assign('title',"Validate 入力フォーム サンプル");
	    $this->_smarty->assign('params',$this->_params);
	    $this->_smarty->display('form2.tpl');
	}
    }
    
    /**
     * 入力データの表示
     *
     * @param void
     * @return void
     */
    function doneForm(){
	$this->_smarty->assign('title',"Validate 入力フォーム サンプル 結果表示");
	$this->_smarty->assign('params',$this->_params);
	$this->_smarty->display('form1_done.tpl');
    }
}

/**
 *  SmartyValidate用 日付チェック関数
 */
function validDate($value, $empty, &$params, &$formvars){
    $_year   = $params['field'] . 'Year';
    $_month = $params['field'] . 'Month';
    $_day   = $params['field'] . 'Day';
    return checkdate($formvars[$_month],$formvars[$_day],$formvars[$_year]);
}

/**
 *  入力フォーム処理メイン関数
 *
 *  @see Form1
 *
 * @param void
 * @return void
 */
function main(){
    $form1 = new Form1();
    switch($_POST['PHASE']){
	case "DONE":
	    $form1->doneForm();
	    break;
	case "CONFIRM":
	    $form1->confirmForm();
	    break;
	default:
	    $form1->viewForm();
	    break;
    }
}

main();
?>