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

class templateDB extends Model
{
/*
DROP TABLE IF EXISTS tbl_template CASCADE;
CREATE TABLE tbl_template (
	tpl_code			serial,				--登録コード
	tpl_skin_code		integer,			--デザインテンプレート登録コード
	tpl_skin_color		text,				--デザインカラーパターンcssファイル名保存（black.ccs,blue.css）
	tpl_name			text,				--登録名称（テンプレートＡトップ用ヘッダー等、、、）
	tpl_summary			text,				--テンプレート設定用メモ、設定概要
	tpl_pagenavi		smallint default 1,	--パンくずリスト表示設定 0:非表示 1:表示
	tpl_hlogo			text,				--ヘッダー画像ファイル名
	tpl_hcap			text,				--ヘッダーに表示させるサイト説明文、またはSEO用概要文
	tpl_hbgimg			text,				--ヘッダー背景画像ファイル名
	tpl_hbanner			text,				--バナー画像ファイル名
	tpl_hbannerurl		text,				--バナーリンクURL
	tpl_hbannertrgt		smallint default 0,	--リンクURLターゲット 0:_top, 1:_blank
	tpl_hsubnavi		text,				--ヘッダー内サブナビゲーション文 (リンクテキスト,リンク先URL,ターゲットフラグ[0:_top, 1:_blank]\n)の形で保存させる
	tpl_active			smallint default 1,	--削除:0 有効:1
	tpl_fcap			text,				--フッター内コピーライト
	tpl_fsubnavi		text,				--フッター内サブナビゲーション文 (リンクテキスト,リンク先URL,ターゲットフラグ[0:_top, 1:_blank]\n)の形で保存させる
	primary key (tpl_code)
);
 */
	var $_form = null;
	var $erchk = 'server';//quickformエラーチェックのフラグ'client'or'server;
	var $db=null;
	var $_link_trgt = array("同ページで開く","新規ページで開く");
	var $_link_trgt_val = array("","_blank");
	
	
	var $columns = array(
						array("column"=>"tpl_code","conv"=>"n","tags"=>false),
						array("column"=>"tpl_skin_code","conv"=>"n","tags"=>false),
						array("column"=>"tpl_skin_color","conv"=>"","tags"=>false),
						array("column"=>"tpl_name","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_summary","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_pagenavi","conv"=>"n","tags"=>false),
						array("column"=>"tpl_hlogo","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_hcap","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_hbgimg","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_hbanner","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_hbannerurl","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_hbannertrgt","conv"=>"n","tags"=>false),
						array("column"=>"tpl_hsubnavi","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_active","conv"=>"n","tags"=>false),
						array("column"=>"tpl_fcap","conv"=>"KVa","tags"=>false),
						array("column"=>"tpl_fsubnavi","conv"=>"KVa","tags"=>false)
						);
						
	function templateDB()
	{
		$this->__construct();
	}
	function __construct()
	{
		Model::__construct();
		$this->db = new DataBase();
	}

	function getData($tpl_code=null,$skin_path=null) {
		$data = null;
		$sql = "select * 
				from tbl_template 
				inner join tbl_skin on skin_code = tpl_skin_code and skin_active = 1 
				where tpl_active = 1";
		$order = null;
		
		if(is_numeric($tpl_code)){
			 $whrsql[] = " tpl_code = ?";
			 $whrdata[] = $tpl_code;
		} else {
			return null;
		}
		if($skin_path!=null) {
			 $whrsql[] = " skin_path = ?";
			 $whrdata[] = $skin_path;
		}
		if(count($whrdata) > 0) {
			$sql .= " and ".implode(" and ", $whrsql);
			$result = $this->db->prepare($sql.$order,$whrdata);
		} else {
			$result = $this->db->query($sql.$order);
		}
		if($result != null) {
			return $result->fetchRow(DB_FETCHMODE_ASSOC);
		}
		return null;
	}
	
	
	
	/**
	 * 一覧取得
	 * @param $type 
	 * @return 
	 */
	function getList()
	{
		$sql = "select * 
				from tbl_template 
				inner join tbl_skin on tpl_skin_code = skin_code 
				where tpl_active = 1 and skin_active = 1 order by tpl_code desc";
		$result = $this->db->query($sql);
		$rtn=null;
		if($result != null) {
			while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
				$rtn[$row["tpl_code"]] = $row;
				$rtn[$row["tpl_code"]]["thum"] = TEMPLATE_DIR."/".$row["skin_path"]."/thum.jpg";
			}
		}
		return $rtn;
	}
	
	function insert($post) {
		foreach($this->columns as $val) {
			if($post[$val["column"]]!=null){
				$record[$val["column"]] = $post[$val["column"]];
			}
		}
		
		$this->db->query('BEGIN');
		$record["tpl_code"] = $this->db->getKey("tbl_template_tpl_code");//登録ID
		if($this->db->insert("tbl_template",$record)) {
			$this->db->query('COMMIT');
			return true;
		} else {
			$this->db->query('ROLLBACK');
			return false;
		}
	}
	
	function update($tpl_code,$post) {
		if(is_numeric($tpl_code)) {
			$record=array();
			foreach($this->columns as $val) {
				if(isset($post[$val["column"]])) {
					if($post[$val["column"]]!=null){
						$record[$val["column"]] = $post[$val["column"]];
					} else {
						$record[$val["column"]] = null;
					}
				}
			}
			$this->db->query('BEGIN');
			if($this->db->update("tbl_template",$record,"tpl_code=".$tpl_code)) {
				$this->db->query('COMMIT');
				return true;
			} else {
				$this->db->query('ROLLBACK');
				return false;	
			}
		} else {
			return false;
		}
	}
	
	function delete($tpl_code) {
		if(is_numeric($tpl_code)){
			//利用中チェック
			$sql = "select count(*) from tbl_section_idx_tmp where sidx_active=1 and sidx_tpl_code = ".$tpl_code;
			$result = $this->db->getOne($sql);
			if($result>0) {
				return "利用しているグローバルメニューがあるため削除できません。「メニュー管理」にてご確認ください。";
			}
			$sql = "select count(*) from tbl_section_idx where sidx_active=1 and sidx_tpl_code = ".$tpl_code;
			$result = $this->db->getOne($sql);
			if($result>0) {
				return "利用しているグローバルメニューがあるため削除できません。「メニュー管理」にてご確認ください。";
			}
			$this->db->query('BEGIN');
			if($this->db->update("tbl_template",array("tpl_active"=>0),"tpl_code=".$tpl_code)) {
				$this->db->query('COMMIT');
				return true;
			} else {
				$this->db->query('ROLLBACK');
				return false;	
			}
		}
		return "削除コードが不明です。";
	}
	
	function copy($tpl_code) {
		if(is_numeric($tpl_code)){
			$sql = "select * from tbl_template where tpl_code = ?";
			$result = $this->db->prepare($sql,$tpl_code);
			if($result != null) {
				$record = $result->fetchRow(DB_FETCHMODE_ASSOC);
			} else {
				return "コピー元のテンプレートデータの取得に失敗しました";
			}
			$this->db->query('BEGIN');
			$record["tpl_code"] = $this->db->getKey("tbl_template_tpl_code");//登録ID
			//名前変更
			$record["tpl_name"] .="のコピー";
			
			if($this->db->insert("tbl_template",$record)) {
				$this->db->query('COMMIT');
				return true;
			} else {
				$this->db->query('ROLLBACK');
				return false;
			}
		}
		return "コピー元のテンプレートコードが不明です。";
	}
	
	//ヘッダーサブナビゲーション変換処理
	//DBに (リンクテキスト,リンク先URL,ターゲットフラグ[0:_top, 1:_blank]\n)として保存されている物を配列に分割とその逆
	function hsavnavi_implode($post)
	{
		$str = null;
		$str_ar = null;
		if(is_array($post["tpl_hsubnavi_text"])) {
			foreach($post["tpl_hsubnavi_text"] as $key => $val) {
				if(isset($val)&&$val!=null
					&&isset($post["tpl_hsubnavi_url"][$key])&&$post["tpl_hsubnavi_url"][$key]!=null
					&&isset($post["tpl_hsubnavi_trgt"][$key])&&$post["tpl_hsubnavi_trgt"][$key]!=null) {
					$str_ar[] = $val.",".$post["tpl_hsubnavi_url"][$key].",".$post["tpl_hsubnavi_trgt"][$key];
				}
			}
		}
		if(is_array($str_ar)) {
			$str = implode("\n",$str_ar);
		}
		return $str;
	}
	
	function hsavnavi_explode($str)
	{
		$data = null;
		$row = explode("\n",$str);
		if(is_array($row)&&count($row)>0) {
			foreach($row as $key=>$val) {
				if($val!=null) {
					list($data["tpl_hsubnavi_text"][$key],$data["tpl_hsubnavi_url"][$key] ,$data["tpl_hsubnavi_trgt"][$key]) = explode(",",$val);
				}
			}
		}
		return $data;
	}
	
	//ヘッダーサブナビゲーション変換処理
	//DBに (リンクテキスト,リンク先URL,ターゲットフラグ[0:_top, 1:_blank]\n)として保存されている物を配列に分割とその逆
	function fsavnavi_implode($post)
	{
		$str = null;
		$str_ar = null;
		if(is_array($post["tpl_fsubnavi_text"])) {
			foreach($post["tpl_fsubnavi_text"] as $key => $val) {
				if(isset($val)&&$val!=null
					&&isset($post["tpl_fsubnavi_url"][$key])&&$post["tpl_fsubnavi_url"][$key]!=null
					&&isset($post["tpl_fsubnavi_trgt"][$key])&&$post["tpl_fsubnavi_trgt"][$key]!=null) {
					$str_ar[] = $val.",".$post["tpl_fsubnavi_url"][$key].",".$post["tpl_fsubnavi_trgt"][$key];
				}
			}
		}
		if(is_array($str_ar)) {
			$str = implode("\n",$str_ar);
		}
		return $str;
	}
	
	function fsavnavi_explode($str)
	{
		$data = null;
		$row = explode("\n",$str);
		if(is_array($row)&&count($row)>0) {
			foreach($row as $key=>$val) {
				if($val!=null) {
					list($data["tpl_fsubnavi_text"][$key],$data["tpl_fsubnavi_url"][$key] ,$data["tpl_fsubnavi_trgt"][$key]) = explode(",",$val);
				}
			}
		}
		return $data;
	}
	
	
	//フォームエレメントの作成
	function setElementsHeader()
	{
		$this->_form->addElement('hidden','tpl_code', $this->_tpl_code);
		
		$this->_form->addElement('file', 'logoup', null);//画像アップ用ボタン
		$this->_form->addElement('checkbox', 'logodel', null,'この画像を削除する',null);//画像削除チェックボックス
		$this->_form->updateElementAttr('logodel',array('value'=>'delete'));
		$this->_form->addElement('hidden','tpl_hlogo', null, array('id'=>'tpl_hlogo')); //既存画像ファイルパス
		
		$this->_form->addElement('file', 'bgup', null);//画像アップ用ボタン
		$this->_form->addElement('checkbox', 'bgdel', null,'この画像を削除する',null);//画像削除チェックボックス
		$this->_form->updateElementAttr('bgdel',array('value'=>'delete'));
		$this->_form->addElement('hidden','tpl_hbgimg', null, array('id'=>'tpl_hbgimg')); //既存画像ファイルパス
		
		$this->_form->addElement('text','tpl_hcap', null, array('size'=>50,'maxlength'=>'200','id'=>'hdr_cap'));
		
		$this->_form->addElement('file', 'bannerup', null);//画像アップ用ボタン
		$this->_form->addElement('checkbox', 'bannerdel', null,'この画像を削除する',null);//画像削除チェックボックス
		$this->_form->updateElementAttr('bannerdel',array('value'=>'delete'));
		$this->_form->addElement('hidden','tpl_hbanner', null, array('id'=>'tpl_hbanner')); //既存画像ファイルパス
		
		//バナーリンクURL
		$this->_form->addElement('text','tpl_hbannerurl', null, array('size'=>50,'maxlength'=>'200','id'=>'hdr_bannerurl','style'=>'ime-mode:disabled'));
		//バナーリンクURLターゲット
		$this->_form->addElement('select','tpl_hbannertrgt', null,$this->_link_trgt);

		//サブナビパーツ
		$subnavi_length = 5;//サブナビは5つまで
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('text',$i, null, array('size'=>20,'maxlength'=>'200'));
		}
		$this->_form->addGroup($item,'tpl_hsubnavi_text',null, '<br>');
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('text',$i, null, array('size'=>20,'maxlength'=>'200','style'=>'ime-mode:disabled'));
			$rule[$i][] = array('・「ヘッダーサブナビゲーション'.($i+1).'」のURLが不正です', 'check_url');
			$rule[$i][] = array('・「ヘッダーサブナビゲーション'.($i+1).'」のURLは半角英数200文字以内です','maxlength',200,);
		}
		$this->_form->addGroup($item,'tpl_hsubnavi_url',null, '<br>');
		$this->_form->registerRule('check_url', 'callback', 'check_url');
		$this->_form->addGroupRule('tpl_hsubnavi_url', $rule);
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('select',$i, null,$this->_link_trgt);
		}
		$this->_form->addGroup($item,'tpl_hsubnavi_trgt',null, '<br>');
	}
	
	//フォーム入力エラーチェックの設定
	function setRulesHeader()
	{
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->setJsWarnings('下記の項目が不正です。','');
		$this->_form->registerRule('check_url', 'callback', 'check_url');
				
		$this->_form->addRule('tpl_code','・「テンプレート番号」が不明です。テンプレート設定よりやり直してください。','required',null,$this->erchk);
		
		$this->_form->addRule('logoup',"・「ロゴ画像」のファイルサイズが大きすぎます。<br>アップロード可能なファイルサイズは".MAX_FILE_SIZE/(1000*1000)."Mbyte未満となっております。",'maxfilesize',MAX_FILE_SIZE,null,$this->erchk);
		$this->_form->addRule('logoup','・「ロゴ画像」にてアップロードできるファイル形式は「JPEG, GIF, PNG」となっております。','mimetype',array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"));
		$this->_form->addRule('bgup',"・「ヘッダー背景画像」のファイルサイズが大きすぎます。<br>アップロード可能なファイルサイズは".MAX_FILE_SIZE/(1000*1000)."Mbyte未満となっております。",'maxfilesize',MAX_FILE_SIZE,null,$this->erchk);
		$this->_form->addRule('bgup','・「ヘッダー背景画像」にてアップロードできるファイル形式は「JPEG, GIF, PNG」となっております。','mimetype',array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"));
		$this->_form->addRule('hdr_cap','・「SEO対策用ヘッダーサイト説明文」は全角100(半角300)文字以内です','maxlength',300,$this->erchk);
		$this->_form->addRule('bannerup',"・「ヘッダー背景画像」のファイルサイズが大きすぎます。<br>アップロード可能なファイルサイズは".MAX_FILE_SIZE/(1000*1000)."Mbyte未満となっております。",'maxfilesize',MAX_FILE_SIZE,null,$this->erchk);
		$this->_form->addRule('bannerup','・「ヘッダー背景画像」にてアップロードできるファイル形式は「JPEG, GIF, PNG」となっております。','mimetype',array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"));
		$this->_form->addRule('tpl_hbannerurl', '・「ヘッダーバナー画像リンク先URL」が不正です', 'check_url',null,$this->erchk); 
		$this->_form->addRule('tpl_hbannerurl','・「ヘッダーバナー画像リンク先URL」は半角英数40文字以内です','maxlength',40,$this->erchk);
	}
	//ボタン作成
	function setButtons() {
		$buttons = array();
		$buttons[] = $this->_form->createElement('button','BTNback',' キャンセル ',array('id'=>'BTNback', 'class'=>'bBtnCancel', 'onClick'=>'parent.closeBox();'));
		$buttons[] = $this->_form->createElement('submit','BTNsave',' 保存 ',array('id'=>'BTNsave','class'=>'bBtnSave'));
		$this->_form->addGroup($buttons,"buttons", null, '&nbsp;&nbsp;');
	}
	
	
	//フォームエレメントの作成
	function setElementsFooter()
	{
		$this->_form->addElement('hidden','tpl_code', $this->_tpl_code);
		$this->_form->addElement('text','tpl_fcap', null, array('size'=>100,'maxlength'=>'200',id=>'ftr_cap'));
		
		//サブナビパーツ
		$subnavi_length = 5;//サブナビは5つまで
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('text',$i, null, array('size'=>20,'maxlength'=>'200'));
		}
		$this->_form->addGroup($item,'tpl_fsubnavi_text',null, '<br>');
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('text',$i, null, array('size'=>20,'maxlength'=>'200','style'=>'ime-mode:disabled'));
			$rule[$i][] = array('・「フッターサブナビゲーション'.($i+1).'」のURLが不正です', 'check_url');
			$rule[$i][] = array('・「フッターサブナビゲーション'.($i+1).'」のURLは半角英数200文字以内です','maxlength',200,);
		}
		$this->_form->addGroup($item,'tpl_fsubnavi_url',null, '<br>');
		$this->_form->registerRule('check_url', 'callback', 'check_url');
		$this->_form->addGroupRule('tpl_fsubnavi_url', $rule);
		$item=array();
		for($i=0;$i<$subnavi_length;$i++) {
			$item[] = $this->_form->createElement('select',$i, null,$this->_link_trgt);
		}
		$this->_form->addGroup($item,'tpl_fsubnavi_trgt',null, '<br>');
	}
	//フォーム入力エラーチェックの設定
	function setRulesFooter()
	{
		/*ルール*/
		$this->_form->applyFilter('__ALL__','trim');
		$this->_form->setJsWarnings('下記の項目が不正です。','');
		$this->_form->registerRule('check_url', 'callback', 'check_url');
				
		$this->_form->addRule('tpl_code','・「テンプレート番号」が不明です。テンプレート設定よりやり直してください。','required',null,$this->erchk);
		
		$this->_form->addRule('tpl_fcap','・「フッターテキスト」は全角400(半角1200)文字以内です','maxlength',1200,$this->erchk);
	}
	
}
?>