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

/**
 * ページの構成unitDBアクセスクラス
 * @author 	yamamoto
 * @version	
 */
require_once (LIB_PATH.'/common/pageunitDB.php');
class sidebarDB extends Model
{
	var $_form = null;
	var $erchk = 'server';//quickformエラーチェックのフラグ'client'or'server;
	var $db=null;
	var $_tpl_code = null;
	var $_m_unit = null;
	//KVa => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角英数字を半角英数字に変換する
	//KVC => 半カナを全カナ,濁点つきの文字を１文字に変換する (K、H と共に利用する）,全角ひらがなを全角カタカナに変換する
	//n   => 全角数字を半角数字に変換する
/*
CREATE TABLE tbl_sidebar (
	pageu_code			integer,			--ユニット登録番号
	sdbr_tpl_code		integer,			--セクションコード
	sdbr_unit_code		integer,			--ユニットマスターコード
	sdbr_order			integer,			--表示順
	primary key (pageu_code)
);
*/
	var $columns = array(
						array("column"=>"pageu_code","conv"=>"n","tags"=>false),		//ユニット登録コード
						array("column"=>"sdbr_tpl_code","conv"=>"n","tags"=>false),		//デザインテンプレート番号
						array("column"=>"sdbr_unit_code","conv"=>"a","tags"=>false),	//ユニットマスタコード
						array("column"=>"sdbr_order","conv"=>"n","tags"=>false)		//表示順
						);

	function sidebarDB()
	{
		$this->__construct();
	}
	function __construct()
	{
		Model::__construct();
		$this->db = new DataBase();
	}
	
	/*
	 * ユニットコードから詳細情報取得
	 * @param pageu_code ユニットコード
	 * @param prev プレビューフラグ
	 */
	function getDetail($pageu_code) {
		$table = "tbl_sidebar";
		$rtn = array();
		if(isset($pageu_code)&&is_numeric($pageu_code)) {
			$sql = "select * 
					from ".$table." 
					inner join tbl_unit on sdbr_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where pageu_code = ? and unit_active = 1";
			$result = $this->db->prepare($sql,$pageu_code);
			$rtn = $result->fetchRow(DB_FETCHMODE_ASSOC);
		}
		return $rtn;
	}

	//データ保存
	// return null == 成功、　エラー時はメッセージを返す
	function doSave()
	{
		//if(!is_array($_SESSION["sidebar_unit"]) || !(count($_SESSION["sidebar_unit"])>0)) {
		//	return "・ユニットが入力されていません。";
		//}
		
		$this->db->query('BEGIN');
		//保存済みデータの削除
		if(!$this->db->delete("tbl_sidebar", "sdbr_tpl_code=".$this->_tpl_code)) {
			$this->db->query('ROLLBACK');
			return "・既存データの削除に失敗しました";
		}
		//セッションデータの解析
		$record = null;
		if(is_array($_SESSION["sidebar_unit"])) {
			foreach($_SESSION["sidebar_unit"] as $key => $val) {
				//保存用レコードの作成
				foreach($this->columns as $col) {
					if(isset($val[$col["column"]])){
						$record[$col["column"]] = $val[$col["column"]];
					} else {
						$record[$col["column"]] = null;
					}
				}
				//セッション内のpageu_codeには新規コンテナユニットの場合は0以下が入っているのでその場合はnextvalを取得する
				if($record["pageu_code"]<=0) {
					$record["pageu_code"] = $this->db->getKey("tbl_page_unit_pageu_code");//登録ID
					//v1.2
					//コピーユニットかどうか判別
					if(isset($val["cp"]) && is_numeric($val["cp"])) { //コピーユニットならば、コピー処理
						//コピーコードからユニットのクラスを宣言
						$unitdata = null;
						$unitdata = pageunitDB::getUnitClipDetail($val["cp"]);
						//プログラムファイルの読み込み
						if(isset($unitdata["unit_php_path"])) {
							$units_dir = basename($unitdata["unit_php_path"],".php");
							switch($unitdata["unit_type"]) {
								case 2:
								case 3:
									require_once(UNITS_PATH."/".$units_dir."/".$unitdata["unit_php_path"]);
									break;
								case 4:
								case 5:
									require_once(EXT_UNITS_PATH."/".$units_dir."/".$unitdata["unit_php_path"]);
									break;
								case 6:
										require_once(MODULES_PATH."/".unitDB::getModuleUnitPath($unitdata["extmodule_path"]).$units_dir."/".$unitdata["unit_php_path"]);
									break;
								default :
									break;
							}
							
						}
						$unit_class = new $units_dir;
						$unit_class->init($val["cp"], $unit_class_name, $view=null, $prev=true, $unitdata);
						if(!$unit_class->unitCopy($val["cp"], $record["pageu_code"], $this->db)) { // $uval["cp"]:コピー元のユニット登録コード
							$this->db->query('ROLLBACK');
							return "・データの保存に失敗しました";
						}
					}
					////////					
				}
				if(!$this->db->insert("tbl_sidebar",$record)) {
					$this->db->query('ROLLBACK');
					return "・データの保存に失敗しました";
				}
			}
		}
		$this->db->query('COMMIT');
		return null;
	}
	
	/**
	 * テンプレートコードからユニットリスト取得
	 * @param tpl_code
	 * @return	array
	 */
	function getData($tpl_code)
	{
		$tbl = "tbl_sidebar";
		$rtn = array();
		if(isset($tpl_code)&&is_numeric($tpl_code)) {
			$sql = "select * 
					from ".$tbl." 
					inner join tbl_unit on sdbr_unit_code = unit_code 
					left outer join tbl_extmodule on unit_extmodule_code = extmodule_code 
					where sdbr_tpl_code = ? and unit_active = 1  and (extmodule_active is null or extmodule_active = 1) 
					order by sdbr_order";
			$result = $this->db->prepare($sql,$tpl_code);
			if($result) {
				while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){
					$rtn[] = $row;
				}
			}
		}
		return $rtn;
	}
	
	function SidebarAdminmakeHTML($html_ar) {
		$html = null;
		if(is_array($html_ar)) {
			foreach($html_ar as $key => $val) {
				//$html .= '<div id="addunit_'.$key.'" class="adunit" onmouseover=\'Position.clone($("addunit_'.$key.'"), $("addunit_'.$key.'-handle"));Element.show("addunit_'.$key.'-handle");\'>
				//		<div class="handles" id="addunit_'.$key.'-handle" onmouseout=\'Element.hide("addunit_'.$key.'-handle");\' style="position:absolute;z-index:100;background-color:#1F1F1F;-moz-opacity: 0.6;opacity:.60;filter: alpha(opacity=60);display:none;">&nbsp;</div>'.$val.'</div>'."\n";
				$html .= '<div id="addunit_'.$key.'" class="adunit">';
				if($key>0) { //新規追加ユニットはコピーさせない
					$html .= '<div class="handles1" id="addunit_'.$key.'-handle"><div class="unitCopy"><a href="#noscript" onClick="ConfunitCp(\'ddunit_'.$key.'\');" title="このユニットをコピーする">コピー</a></div><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\'addunit_'.$key.'\');" title="このユニットを削除する">削除</a></div></div>';
				} else {
					$html .= '<div class="handles1" id="addunit_'.$key.'-handle"><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\'addunit_'.$key.'\');" title="このユニットを削除する">削除</a></div></div>';
				}
				$html .= $val.'
						<div class="handles2">&nbsp;</div>
						</div>'."\n";
			}
			$html .= '<script type="text/javascript">//<![CDATA'."\n";
			$html .= 'Sortable.destroy("items")'."\n";
			$html .= 'Sortable.create("items", {tag:"div",dropOnEmpty:true,only:"adunit", constraint:false,onUpdate:function(){getParams()}});'."\n";
			$html .= '//]]></script>'."\n";
		}
		return $html;
	}
	
	function makeUnitListHTML($view,$ulist) { //一般でも使えるユニットデータ取得
		$pageunitDB = new pageunitDB();
		$pageunitDB->unitCall();
		$html = null;
		if(is_array($ulist)) {
			foreach($ulist as $key => $val) {
				//unit_codeからユニットの詳細情報取得
				list($unit_class_name,$trash) = explode('.', $pageunitDB->_m_unit[$val["sdbr_unit_code"]]["unit_php_path"]);
				$unit_class = new $unit_class_name;
				if(isset($val["cp"])&&is_numeric($val["cp"])) { //コピーユニットだった場合　v1.2
					$unit_class->init($val["cp"],$unit_class_name, $view, 1,$pageunitDB->_m_unit[$val["sdbr_unit_code"]]);
            		$html[$val["pageu_code"]] = $unit_class->output($pageunitDB->_m_unit[$val["sdbr_unit_code"]]["unit_type"]);
				} else {
					$unit_class->init($val["pageu_code"],$unit_class_name, $view, 1,$pageunitDB->_m_unit[$val["sdbr_unit_code"]]);
            		$html[$val["pageu_code"]] = $unit_class->output($pageunitDB->_m_unit[$val["sdbr_unit_code"]]["unit_type"]);
				}
				/*
				$unit_class->init($val["pageu_code"],$unit_class_name, $view, 1,$pageunitDB->_m_unit[$val["sdbr_unit_code"]]);
            	$html[$val["pageu_code"]] = $unit_class->output($pageunitDB->_m_unit[$val["sdbr_unit_code"]]["unit_type"]);
				*/
			}
		}
		return $html;
	}
}
?>