<?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/>.
 */

require_once (LIB_PATH.'/common/unitCommon.php');
/*
--マップ(bMap)用 の詳細データ格納テーブル（公開情報）
DROP TABLE IF EXISTS unit_bmap CASCADE;
CREATE TABLE unit_bmap (
	pageu_code		integer,			--ユニット配列順序における登録番号
	bmap_img		text,				--吹き出し内画像ファイル名（code-1-YmdHis）.拡張子
	bmap_title		text not null,		--吹き出し内スポット名
	bmap_addr		text not null,		--住所
	bmap_body		text,				--吹き出し内説明文（html）
	bmap_apikey		text not null,		--クリック時の動作　0：何もしない　1：拡大（HTML）2：拡大（Ajax）　3：リンク
	bmap_lat		text not null,		--緯度
	bmap_lng		text not null,		--経度
	bmap_height		integer not null,	--表示エリアの高さ
	bg_color		smallint default 0,	--背景色　0：なし　1：あり
	bdr_type		smallint default 0,	--枠線　0：なし　1：実線　2：点線
	btm_padding		smallint default 2,	--下方スペース　0:なし　1：狭　2：標準　3：広
	primary key (pageu_code)
);
DROP TABLE IF EXISTS unit_bmap_tmp CASCADE;
CREATE TABLE unit_bmap_tmp (
	pageu_code		integer,			--ユニット配列順序における登録番号
	bmap_img		text,				--吹き出し内画像ファイル名（code-1-YmdHis）.拡張子
	bmap_title		text not null,		--吹き出し内スポット名
	bmap_addr		text not null,		--住所
	bmap_body		text,				--吹き出し内説明文（html）
	bmap_apikey		text not null,		--クリック時の動作　0：何もしない　1：拡大（HTML）2：拡大（Ajax）　3：リンク
	bmap_lat		text not null,		--緯度
	bmap_lng		text not null,		--経度
	bmap_height		integer not null,	--表示エリアの高さ
	bg_color		smallint default 0,	--背景色　0：なし　1：あり
	bdr_type		smallint default 0,	--枠線　0：なし　1：実線　2：点線
	btm_padding		smallint default 2,	--下方スペース　0:なし　1：狭　2：標準　3：広
	primary key (pageu_code)
);
 */
class bMap extends unitCommon
{	
	//------ ユニット毎に必ず設定しなくてはならない変数 -------//
	var $_table = "unit_bmap"; //公開用テーブル名
	var $_tmptable = "unit_bmap_tmp"; //下書き用テーブル名 //必ず公開用テーブル名のうしろに_tmpをつけてください
	var $columns = array(
					array("column"=>"pageu_code","conv"=>"n","tags"=>false),
					array("column"=>"bmap_img","conv"=>"","tags"=>false),
					array("column"=>"bmap_title","conv"=>"KVa","tags"=>false),
					array("column"=>"bmap_addr","conv"=>"KVa","tags"=>false),
					array("column"=>"bmap_body","conv"=>"KVa","tags"=>true),
					array("column"=>"bmap_apikey","conv"=>"KVa","tags"=>false),
					array("column"=>"bmap_lat","conv"=>"","tags"=>false),
					array("column"=>"bmap_lng","conv"=>"","tags"=>false),
					array("column"=>"bmap_height","conv"=>"n","tags"=>false),
					array("column"=>"bg_color","conv"=>"n","tags"=>false),
					array("column"=>"bdr_type","conv"=>"n","tags"=>false),
					array("column"=>"btm_padding","conv"=>"n","tags"=>false)
					);
	var $_data = array();
	
	function bMap()
	{
		$this->__construct();
	}
	function __construct()
	{
		unitCommon::__construct();
	}
	//-----------------
	
	//出力データセット処理（必須）
	function setDisplayData() {
		$this->_data = $this->getDetail();
		
		if ($this->_data) {
			if($this->_prev) {
				$this->_data["prev"]=$this->_prev;
			}
		}
		return $this->_data;
	}
	
	/*
	 * DBより保存データ取得
	 * 改変可能
	 */
	function getDetail() {
		$rtn =  null;
		$sql = "select * from ".$this->getTbl()." where pageu_code = ?";
		if(isset($this->_pageu_code)&&is_numeric($this->_pageu_code)) {
			$result = $this->db->prepare($sql,$this->_pageu_code);
			if($result){
				$rtn = $result->fetchRow(DB_FETCHMODE_ASSOC);
			}
		}
		return $rtn;
	}
	
	
	function setDefault()
	{
		$data = null;
		$data = $this->getDetail();
		if($data) {
			$this->_form->setDefaults($data);
		} else {
			
			//api id の取得
			$apikey = null;
			$sql = "select bmap_apikey from ".$this->getTbl()." order by pageu_code desc limit 1";
			$result = $this->db->getOne($sql);
			if($result){
				$apikey = $result;
			}
			$this->_form->setDefaults(array("bmap_height"=>"300","bmap_apikey"=>$apikey));
		}
	}
	
	//フォームエレメントの作成
	function setElements()
	{
		$this->_form->addElement('hidden','pageu_code', $this->_pageu_code,array("id"=>"pageu_code"));
		$this->_form->addElement('hidden','bmap_img', null,array("id"=>"bmap_img"));
		$this->_form->addElement('file', 'picture', '');

		$this->_form->addElement('text','bmap_title', null, array('id'=>'bmap_title','size'=>40,'maxlength' => 40));
		$this->_form->addElement('text','bmap_addr', null, array('id'=>'bmap_addr','size'=>40,'maxlength' => 40));
		$this->_form->addElement('textarea','bmap_body', null, array('id'=>'bmap_body','rows'=>5));

		$this->_form->addElement('text','bmap_apikey', null, array('id'=>'bmap_apikey','size'=>40,'maxlength' => 200));
		
		$this->_form->addElement('text','bmap_height', null, array('id'=>'bmap_height','size'=>20,'maxlength' => 20,'style'=>'ime-mode:disabled'));
		
		$this->_form->addElement('text','bmap_lat', null, array('id'=>'bmap_lat','size'=>20,'maxlength' => 20,'style'=>'ime-mode:disabled'));
		$this->_form->addElement('text','bmap_lng', null, array('id'=>'bmap_lng','size'=>20,'maxlength' => 20,'style'=>'ime-mode:disabled'));
	}
	
	//フォーム入力エラーチェックの設定
	function setRules()
	{
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->_submitValues = DataBase::ConvColumnVals($this->_form->_submitValues,$this->columns); //ルールに従った値変換、タグの除去
		$this->_form->setJsWarnings('下記の項目が不正です。','');		
		$this->_form->addRule('pageu_code','・「ユニットコード」が不明です。コンテンツ管理よりやり直してください','required',null,$this->erchk);
		$obj = $this->_form->getElement("bmap_img");
		if ($obj->getValue()) {
			$this->_view->assign('image', UNITS_IMG_PATH.$obj->getValue());
		}
		$this->_form->addRule('picture',"・画像ファイルサイズが大きすぎます。<br>アップロード可能なファイルサイズは".MAX_FILE_SIZE/(1000*1000)."Mbyte未満となっております。",'maxfilesize',MAX_FILE_SIZE,null,'server');
		$this->_form->addRule('picture','・アップロードできるファイル形式は「JPEG, GIF, PNG」となっております。','mimetype',array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"));
		
		$this->_form->addRule('bmap_title','・「スポットタイトル」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_addr','・「住所」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_apikey','・「YahooMap API ID」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_height','・「表示エリア（高さ）」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_height','・「表示エリア（高さ）」は半角数字で入力してください','numeric',null,$this->erchk);
		$this->_form->registerRule('NumericRange_valid', 'callback','NumericRange');
		$this->_form->addRule('bmap_height','・「表示エリア（高さ）」は50以上2000以内で入力してください','NumericRange_valid',array(50,2000),$this->erchk);
		$this->_form->addRule('bmap_lat','・「表示位置（緯度）」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_lat', '「表示位置（緯度）」は-180〜180の数値を入力してください。', 'regex', '/[0-9-\.]+$/', $this->erchk);
		$this->_form->addRule('bmap_lng','・「表示位置（経度）」を入力してください','required',null,$this->erchk);
		$this->_form->addRule('bmap_lng', '「表示位置（経度）」は-180〜180の数値を入力してください。', 'regex', '/[0-9-\.]+$/', $this->erchk);
	}
	
	//データ下書き保存処理
	function doSave($post)
	{
		//あらかじめ画像処理
		$result = null;
		$bimg = '';
		//既存データがあるか確認（画像削除用にも使用）
		$old_data = $this->getDetail();
		
		//画像がアップロードされいてる場合の処理
		if (is_uploaded_file($_FILES['picture']["tmp_name"])) {
			//画像ファイル名
			$bimg = $this->_pageu_code.'-1-'.date("YmdHis");
			//画像ファイル保存用ディレクトリ
			$path = BASE_PATH.UNITS_IMG_PATH;
			//がなければ作成
			if (!is_dir($path)) {
				if (!mkdir($path, 0777)) {
					return "・保存先ディレクトリがありません";
				}
			}
			//画像ファイル保存
			$img = $this->_form->getElement('picture');
			$bimg = commonFile::uploadImage($img, $path, $bimg);
			if (!$bimg) {
				return "・画像ファイルの保存に失敗しました";
			}
		}
		$record = null;
		foreach($this->columns as $val) {
			if($post[$val["column"]]!=null){
				$record[$val["column"]] = $post[$val["column"]];
			} else {
				$record[$val["column"]] = null;
			}
		}
		if ($bimg) {
			//ファイル名も保存
			$record["bmap_img"] = $bimg;
		}
		
		$this->db->query('BEGIN');
		//保存処理開始
		if(is_array($old_data)&& count($old_data)>0) {
			//更新
			if(!$this->db->update($this->getTbl(),$record, "pageu_code=".$record["pageu_code"])) {
				$this->db->query('ROLLBACK');
				return "・データの保存に失敗しました";
			}
		} else { //新規
			if(!$this->db->insert($this->getTbl(),$record)) {
				$this->db->query('ROLLBACK');
				return "・データの保存に失敗しました";
			}
		}
		$this->db->query('COMMIT');
		return null;
	}
}
?>