<?php
/**
 * projBop_Plugin_Validator_Image.php
 * 
 * @author     BoBpp < bobpp@users.sourceforge.jp >
 * @package projBop.Ethna.Plugin.Validator
 * @version   $Id$
 */

/**
 * ActionForm Image Validator
 * 
 * @author    BoBpp < bobpp@users.sourceforge.jp >
 * @package projBop.Ethna.Plugin.Validator
 * @version   1.0
 */
class projBop_Plugin_Validator_Image extends Ethna_Plugin_Validator
{
	/** 配列を受け取るフラグ */
	var $accept_array = false;
	
	/**
	 * 実際の精査部分
	 * 
	 * @access public
	 * @param string $name フォーム名
	 * @param mixed $value 入力値
	 * @param array $param プラグイン設定パラメータ
	 */
	function &validate($name, $value, $param)
	{
		$return = true;
		
		// プラグインを使わない場合はチェックしない
		if (isset($param['image']) === false || $param['image'] == false) {
			return $return;
		}
		
		// 値タイプのチェック
		if ($this->getFormType($name) != VAR_TYPE_FILE) {
			return $return;
		}
		
		// 実際にアップロードされているかチェック
		if ($value['error'] != UPLOAD_ERR_OK) {
			return $return;
		}
		
		// ファイルが無い場合
		if (isset($value['tmp_name']) === false || is_uploaded_file($value['tmp_name']) === false) {
			$msg = isset($param['error']) ? $param['error'] : 'アップロードされたファイルが不正です';
			return Ethna::raiseNotice($msg, E_FORM_WRONGTYPE_FILE);
		}
		
		// 本題の画像チェック
		$img = getimagesize($value['tmp_name']);
		if ($img === false) {
			$msg = isset($param['error']) ? $param['error'] : 'アップロードされたファイルが画像ファイルではありません';
			return Ethna::raiseNotice($msg, E_FORM_WRONGTYPE_FILE);
		}
		
		// (設定されていれば)横幅のチェック
		if (isset($param['width']) && $img[0] > $param['width']) {
			$msg = isset($param['width_error']) ? $param['width_error'] : sprintf("画像の横幅は%dpx以下である必要があります", $param['width']);
			return Ethna::raiseNotice($msg, E_FORM_WRONGTYPE_FILE);
		}
		
		// (設定されていれば)縦幅のチェック
		if (isset($param['height']) && $img[1] > $param['height']) {
			$msg = isset($param['height_error']) ? $param['height_error'] : sprintf("画像の高さは%dpx以下である必要があります", $param['height']);
			return Ethna::raiseNotice($msg, E_FORM_WRONGTYPE_FILE);
		}
		
		// (設定されていれば)画像のタイプチェック
		if (isset($param['types']) && in_array($img[2], $param['types']) === false) {
			$msg = isset($param['types_error']) ? $param['types_error'] : 'アップロードされたファイルの種類が不正です';
			return Ethna::raiseNotice($msg, E_FORM_WRONGTYPE_FILE);
		}
		
		return $return;
	}
}
?>
