<?php

/**
 * projectBop.ActionFormクラス
 * 
 * @author BoBpp < bobpp@users.sourceforge.jp >
 * @version 1.0
 * @package projectBop.Ethna
 */
class projBop_ActionForm extends Ethna_ActionForm
{
	/**
	 * 凍結化する
	 * 
	 * @access public
	 * @param mixed(array, string or null) $name エレメント名(複数選択時は配列・全要素の場合はnull)
	 */
	function freeze($name=null)
	{
		$this->_freezer($name, true);
	}
	
	/**
	 * 解凍する
	 * 
	 * @access public
	 * @param mixed(array, string or null) $name エレメント名
	 */
	function unfreeze($name=null)
	{
		$this->_freezer($name, false);
	}
	
	/**
	 * 冷凍・解凍をする
	 * 
	 * @access public
	 * @param mixed $name エレメント名
	 * @param boolean 設定する値 TRUE->固める, FALSE->戻す
	 */
	function _freezer($name, $value)
	{
		if (is_null($name)) {
			$formDef = $this->getDef();
			
			foreach ($formDef as $key=>$define) {
				$formDef[$key]['freeze'] = $value;
			}
			
			$this->setDef(null, $formDef);
			
		} else if (is_array($name)) {
			foreach($name as $defName) {
				$define = $this->getDef($defName);
				if (!is_null($define)) {
					$define['freeze'] = $value;
					$this->setDef($defName, $define);
				}
			}
		} else {
			$define = $this->getDef($name);
			if (!is_null($define)) {
				$define['freeze'] = $value;
				$this->setDef($name, $define);
			}
		}
	}
	
	/**
	 * 凍結済みか判定する
	 * 
	 * @access public
	 * @param string $name エレメント名
	 * @return boolean TRUE->凍結済み, FALSE->未凍結
	 */
	function isFreeze($name)
	{
		$define = $this->getDef($name);
		return is_null($define) ? false : $define['freeze'];
	}

    /**
     * フォーム値の値を空にする
     * 
     * @access public
     * @param array,null,string $element 空にするエレメント名 
     */
    function clear($element=null) {
    	if (is_null($element)) {
    		$element = array_keys($this->form);
    	} else if (is_scalar($element)) {
    		$element = array($element);
    	}
    	
    	foreach ($element as $value) {
    		$this->set($value, null);
    	}
    }
}
?>