<?php
/**
 * ParamUtil
 * DBにパラメーターをセットするときに使う関数集。
 * $Id: ParamUtil.inc,v 1.1 2015/10/08 11:18:56 wanggb Exp $
 * @author iimuro
 * @access public
 * @package jp.aimslib2.util
 */
 
class ParamUtil {

	/**
	 * オブジェクトのプロパティーを配列に落とします。
	 * @param array 挿入先配列
	 * @param Object 元オブジェクト
	 * @param String 挿入先キー文字列
	 * @param String 元フィールド名。省略時は挿入先キー
	 */
	public static function copyObj2Array(&$array, &$obj, $array_key, $obj_key = null) {
		if ($obj_key == null) {
			$obj_key = $array_key;
		}
		if (isset($obj->$obj_key)) {
			$array[$array_key] = $obj->$obj_key;
		}
	
	}

	/**
	 * オブジェクトのプロパティーを配列に落とします。
	 * @param array 挿入先配列
	 * @param Object 元オブジェクト
	 * @param String 挿入先キー文字列
	 * @param String 元フィールド名。省略時は挿入先キー
	 */
	public static function copyObj2ArrayNullField(&$array, &$obj, $array_key, $obj_key = null) {
		if ($obj_key == null) {
			$obj_key = $array_key;
		}
		if (isset($obj->$obj_key) && ($obj->$obj_key !== "")) {
			$array[$array_key] = $obj->$obj_key;
		} else {
			$array[$array_key] = null;
		}
	
	}


	/**
	 * 配列のプロパティーをインスタンスに落とします。
	 * @param Object 元オブジェクト
	 * @param array 挿入先配列
	 * @param String 元フィールド名。
	 * @param String 挿入先キー文字列。省略時は挿入先キー
	 */
	public static function copyArray2Obj(&$obj, &$array, $obj_key, $array_key = null) {
		if ($array_key == null) {
			$array_key = $obj_key;
		}
		if (isset($array[$array_key])) {
			 $obj->$obj_key = $array[$array_key];
		}
	
	}

	
	/**
	 * 指定されたパラメータが、リクエストにセットされているかを返します。
	 * empty関数を使用した場合、0をtrueと返してしまうのを回避するために利用します。
	 * @param String name パラメータ名
	 * @return boolean 指定されたパラメータが、null又は空文字列でない場合true。
	 */
	public static function isRequestSet($name) {
		if (isset($_REQUEST[$name]) && $_REQUEST[$name] != "") {
			return true;
		} else {
			return false;
		}
	}
	
	
	/**
	 * 指定された名前がbooleanであることがわかっているときに、空白チェックを行った上でその値を取得します。
	 * @param String $name フィールド名
	 * @param boolean $undef_value フィールドが未定義だった場合に返す値。省略時false。
	 * @param String $yes_candidate フィールドの値を特定したい場合に、その値を指定する。省略時は、"true", "yes", "on"
	 * @param String $no_candidate フィールドの値を特定したい場合に、その値を指定する。省略時は、"false", "no", "off"
	 * @return boolean 判定に一致した場合は対応するtrue/false。一致しない場合は$undef_value
	 */
	public static function getRequestBoolean($name, $undef_value = false, $yes_candidate = null, $no_candidate = null) {
		if (ParamUtil::isRequestSet($name)) {
			
			$value = $_REQUEST[$name];
			
			if ($yes_candidate == null) {
				$yes_candidate = array("true", "yes", "on");
				if (in_array(strtolower($value), $yes_candidate)) {
					return true;
				}
				// 候補に入らない→false判定へ
			} else if ($yes_candidate == $value) {
				return true;
			}
			if ($no_candidate == null) {
				$no_candidate = array("false", "no", "off");
				if (in_array(strtolower($value), $no_candidate)) {
					return false;
				}
				// 候補に入らない→undef
			} else if ($no_candidate == $value) {
				return false;
			}
			
		}
		
		return $undef_value;
		
	}
	
	
	/**
	 * 指定された名前がStringであることがわかっているときに、定義チェックを行った上でその値を取得します。
	 * @param String $name フィールド名
	 * @param String $undef_value フィールドが未定義だった場合に返す値。省略時null。
	 * @return String リクエストにパラメータが合った場合その値。無い場合、$undef_value
	 */
	public static function getRequestString($name, $undef_value = null) {
		if (isset($_REQUEST[$name])) {
			
			return $_REQUEST[$name];
			
		}
		
		return $undef_value;
		
	}
	
	
	/**
	 * 指定された名前が数値であることがわかっているときに、定義チェックを行った上でその値を取得します。
	 * @param String $name フィールド名
	 * @param number $undef_value フィールドが未定義だった場合に返す値。省略時null。
	 * @return number リクエストにパラメータが合った場合その値。無い場合、$undef_value
	 */
	public static function getRequestNumber($name, $undef_value = null) {
		if (isset($_REQUEST[$name]) && is_numeric(trim($_REQUEST[$name]))) {
			
			return trim($_REQUEST[$name]);
			
		}
		
		return $undef_value;
		
	}
	
	
	/**
	 * 指定された名前が配列であることがわかっているときに、定義チェックを行った上でその値を取得します。
	 * @param String $name フィールド名
	 * @param array $undef_value フィールドが未定義だった場合に返す値。省略時null。
	 * @return array リクエストにパラメータが合った場合その値。無い場合、$undef_value
	 */
	public static function getRequestArray($name, $undef_value = null) {
		if (isset($_REQUEST[$name]) && is_array($_REQUEST[$name])) {
			
			return $_REQUEST[$name];
			
		}
		
		return $undef_value;
		
	}
}

?>