<?php
/*
	Copyright(c) 2010 Shift Tech Inc. All Rights Reserved.
 	http://www.shift-tech.jp/

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */


/**
* DBクラス
* @author     Nishino
* @copyright  Shift Tech Inc.
*/
class DataBase {

	//DataBase
	var $db = null;

	/**
     * コンストラクタ（PHP4,5対応）
	 * @author   tyamamoto
	 * @param
	 */
	function DataBase()
	{
		$this->__construct();
	}
    function __construct()
    {
    	$this->db =& DB::connect(DSN);
		if (PEAR::isError($this->db)) {
			die($this->db->getMessage());
		}
		if (DBTYPE === 'mysql') {
			$this->db->query("SET NAMES 'utf8'");
		}
    }

    /**
	 * データ変換
	 * @author Takashi Yamamoto
	 * @param $post 変換される値の入った配列
	 * @param $ConvList 変換ルール
	 * @return $post
	 */
    function ConvColumnVals($post,$ConvList)
    {
    	foreach($ConvList as $key => $val) {
    		if(isset($post[$val["column"]])) {
    			if($val["tags"]!=true) {
    				$post[$val["column"]] = strip_tags($post[$val["column"]]);
    			}
    			$post[$val["column"]] = mb_convert_kana($post[$val["column"]], $val["conv"]);
    		}
    	}
    	return $post;
    }

	/**
     *	クエリー実行
	 *	@author	Nobuo Nishino
	 *	@param		$sql		String	実行SQL
	 *	@return	実行結果
	 */
    function query($sql)
	{
		$result = $this->db->query($sql);
		if (PEAR::isError($result)) {
			//die($result->getMessage());
			return null;
		}
		return $result;
	}

	/**
     *	Fetch Mode
	 *	@author	Nobuo Nishino
	 */
    function setFetchMode($mode)
	{
		$this->db->setFetchMode($mode);
	}

	/**
     *	getAll
	 *	@author	Nobuo Nishino
	 */
    function getAll($sql)
	{
		$result = $this->db->getAll($sql);
		if (PEAR::isError($result)) {
			return null;
		}
		return $result;
	}

	/**
	 *	データ保存（登録）
	 *	@author	Nobuo Nishino
	 *	@param		$table_name		String	テーブル名
	 *	@param		$fields_values	array	データ
	 *	@param		$pkey			String	プライマリーキー
	 */
	function insert($table_name, $fields_values)
	{
		foreach ($fields_values as $key => $val) { //MySQLの場合Now(),autoExecuteで使えないため変換
			if(DBTYPE=='mysql' && eregi("^NOW\(\)$", $val)) {
				$fields_values[$key] = date('Y-m-d H:i:s');
			}
		}
		$result = $this->db->autoExecute($table_name,
										 $fields_values,
										 DB_AUTOQUERY_INSERT);
		if (PEAR::isError($result)) {
			return false;
			//die($result->getMessage());
		}
		return true;
	}

	/**
	 *	データ保存（更新）
	 *	@author	Nobuo Nishino
	 *	@param		$table_name		String	テーブル名
	 *	@param		$fields_values	array	データ
	 *	@param		$where			array	条件句
	 */
	function update($table_name, $fields_values, $where = null)
	{
		foreach ($fields_values as $key => $val) { //MySQLの場合Now(),autoExecuteで使えないため変換
			if(DBTYPE=='mysql' && eregi("^NOW\(\)$", $val)) {
				$fields_values[$key] = date('Y-m-d H:i:s');
			}
		}
		if($where != null && $where != ""){
			$result = $this->db->autoExecute($table_name,
											 $fields_values,
											 DB_AUTOQUERY_UPDATE,
											 $where);
		}else{
			$result = $this->db->autoExecute($table_name,
											 $fields_values,
											 DB_AUTOQUERY_UPDATE);
		}
		if (PEAR::isError($result)) {
			//echo $result->getMessage();
			//var_dump($result);
			return false;
			//die($result->getMessage());
		}
		return true;
	}

	/**
     *	削除
	 *	@author	Nobuo Nishino
	 *	@param		$sql		String	実行SQL
	 *	@return	実行結果
	 */
    function delete($table, $where=null)
	{
		$sql = "DELETE FROM {$table}";
		if($where != null) {
			$sql .= " WHERE {$where}";
		}

		$result = $this->db->query($sql);
		if (PEAR::isError($result)) {
			//die($result->getMessage());
			return false;
		}
		return true;
	}

	/**
	 *	データ取得（最初の行・最初のカラム）
	 *	@author	Nobuo Nishino
	 *	@param		$sql			String	実行SQL
	 *	@return	実行結果
	 */
	function getOne($sql)
	{
		return $this->db->getOne($sql);
	}

	/**
	 *	プライマリーキー取得
	 *	@author	Nobuo Nishino
	 *	@param		$key_name	String	プライマリーキー名
	 *	@return	実行結果
	 */
	function getKey($key_name)
	{
		return 	$this->db->nextId($key_name);
	}

	/**
	 *	SQL実行（prepare）
	 *	@author
	 *	@param		$sql	String	SQL
	 *	@param		$data	Array	データ
	 *	@return	実行結果
	 */
	function prepare($sql, $data)
	{
		mb_convert_variables("UTF-8", "auto", $data);
		$stmt = $this->db->prepare($sql);
		if (PEAR::isError($stmt)) {
			//die($stmt->getMessage());
			return null;
		}
		$result =& $this->db->execute($stmt, $data);
		if (PEAR::isError($result)) {
			//die($result->getMessage());
			return null;
		}
		return $result;
	}
}

?>