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

include_once("../../app_path.php");
include_once(APP_PATH.'/AdminController.php');
require_once (LIB_PATH.'/common/pagecontainerDB.php');
require_once (LIB_PATH.'/common/pageunitDB.php');

$obj = new AdminController();
$obj->model =new Model();
switch($obj->model->getRequest("mode")) {
	case "add":
		//追加するidを取得
		list($unit_id,$unit_code) = explode("-", $obj->model->getRequest("id")); //ドロップされたユニットのid(XXX.phpのXXXの部分)とunit_code
		list($unit_code,$pageu_code_cp) = explode("_", $unit_code); //コピーユニットの場合のみマスタとなるpageu_code_cpを取得
		$pidx_code = $obj->model->getRequest("pidx_code"); //ページ番号
		list($pagec_code,$column_n) = explode("_", $obj->model->getRequest("cunit")); //ドロップされた先からコンテナIDとカラム番号を取得
		$torder = $obj->model->getRequest("order"); //挿入位置
		//orderの取得,カラムごとでヨシ
		$order = 0;
		if(isset($_SESSION["page_unit"][$pagec_code][$column_n]) && is_array($_SESSION["page_unit"][$pagec_code][$column_n]) && count($_SESSION["page_unit"][$pagec_code][$column_n])>0) {
			foreach($_SESSION["page_unit"][$pagec_code][$column_n] as $key=>$val) {
				if($order<$val["pageu_order"]) {
					$order = $val["pageu_order"];
				}
			}
			$order++;
		}
		//codeの取得、新規は0以下で振っていく

		//if($code<=0) {v1.2でコメント
			$code = 0;
			if(isset($_SESSION["new_page_unit_code"])) {
				$code = $_SESSION["new_page_unit_code"]-1;
			}
			$_SESSION["new_page_unit_code"] = $code;
		//}v1.2でコメント
		//新しいユニットの表示順セット
		if(is_numeric($torder)&&$torder>=0) {
			$order = $torder;
		}
		//セッションにセット
		/*
		$_SESSION["page_unit"][$pagec_code][$column_n][$code] = array("pageu_code"=>$code,
																"pageu_pidx_code"=>$pidx_code,
																"pageu_pagec_code"=>$pagec_code,
																"pageu_column"=>$column_n,
																"pageu_unit_code"=>$unit_code,
																"pageu_order"=>$order);
		*/
		//unit_codeからユニットマスタ情報取得
		$unitDB = new unitDB();
		$unitMasterdata = $unitDB->getData($unit_code);
		
		
		if(is_numeric($pageu_code_cp)) {
			$new = array("pageu_code"=>$code,
						"pageu_extmodule_code"=>$unitMasterdata["unit_extmodule_code"],
						"pageu_pidx_code"=>$pidx_code,
						"pageu_pagec_code"=>$pagec_code,
						"pageu_column"=>$column_n,
						"pageu_unit_code"=>$unitMasterdata["unit_code"],
						"pageu_order"=>$order,
						"cp"=>$pageu_code_cp);
		} else {
			$new = array("pageu_code"=>$code,
						"pageu_extmodule_code"=>$unitMasterdata["unit_extmodule_code"],
						"pageu_pidx_code"=>$pidx_code,
						"pageu_pagec_code"=>$pagec_code,
						"pageu_column"=>$column_n,
							"pageu_unit_code"=>$unitMasterdata["unit_code"],
						"pageu_order"=>$order);
		}
		//表示順ふり直し
		if(isset($_SESSION["page_unit"][$pagec_code][$column_n]) 
			&& is_array($_SESSION["page_unit"][$pagec_code][$column_n]) 
				&& count($_SESSION["page_unit"][$pagec_code][$column_n])>0) {
			foreach($_SESSION["page_unit"][$pagec_code][$column_n] as $key => $val) {
				if($val["pageu_order"] >= $order) {
					$_SESSION["page_unit"][$pagec_code][$column_n][$key]["pageu_order"] += 1;
				}
			}
		}
		$_SESSION["page_unit"][$pagec_code][$column_n][$new["pageu_code"]] = $new;
		//セッション配列の並び替え
		foreach($_SESSION["page_unit"][$pagec_code][$column_n] as $key=>$val) {
			$order_ar[$val["pageu_order"]] = $val;
		}
		ksort($order_ar);
		unset($_SESSION["page_unit"][$pagec_code][$column_n]);
		foreach($order_ar as $key=>$val) {
			$_SESSION["page_unit"][$pagec_code][$column_n][$val["pageu_code"]] = $val;
		}

		//セッションの値を元にコンテナ内部のユニットリストhtmlを生成
		$pageunitDB = new pageunitDB();
		$html_ar =  $pageunitDB->makeUnitListHTML($obj->view,$_SESSION["page_unit"][$pagec_code][$column_n],$prev=true);
		$addunit_idnames=null;
		foreach($html_ar as $key => $val) {
			$unit_code = $_SESSION["page_unit"][$pagec_code][$column_n][$key]["pageu_unit_code"];
			$addunit_idname = 'addunit-'.$unit_code.'_'.$key;
			//$html .= '<div id="'.$addunit_idname.'" class="adunit" onmouseover=\'Position.clone($("'.$addunit_idname.'"), $("'.$addunit_idname.'-handle"));\'>
			//			<div class="handles" id="'.$addunit_idname.'-handle" style="position:absolute;z-index:100;background-color:#fff;-moz-opacity: 0.0;opacity:.0;filter: alpha(opacity=0);">&nbsp;</div>
			//			'.$val.'
			//			</div>'."\n";
			$html .= '<div id="'.$addunit_idname.'" class="adunit">';
			if($key>0) { //新規追加ユニットはコピーさせない
				if($_SESSION["page_unit"][$pagec_code][$column_n][$key]["unit_extmodule_private"]==1) { //モジュール専用ユニットの場合はコピー、削除不可
					$html .= '<div class="handles1" id="'.$addunit_idname.'-handle"></div>';
				} else {
					$html .= '<div class="handles1" id="'.$addunit_idname.'-handle"><div class="unitCopy"><a href="#noscript" onClick="ConfunitCp(\''.$addunit_idname.'\');" title="このユニットをコピーする">コピー</a></div><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\''.$addunit_idname.'\');" title="このユニットを削除する">削除</a></div></div>';
				}
			} else {
				$html .= '<div class="handles1" id="'.$addunit_idname.'-handle"><div class="unitDelete"><a href="#noscript" onClick="ConfunitDel(\''.$addunit_idname.'\');" tile="このユニットを削除する">削除</a></div></div>';
			}
			$html .= $val.'
							<div class="handles2">&nbsp;</div>
							</div>'."\n";
		}
		$Sotable_div_id = 'c'.$pagec_code.'_'.$column_n.'-inner';
		
		$html .= '<script type="text/javascript">//<![CDATA'."\n";
		$html .= 'Sortable.destroy("'.$Sotable_div_id.'")'."\n";
		$html .= 'Sortable.create("'.$Sotable_div_id.'", {handle:"handles1",tag:"div",dropOnEmpty:true,containment:sections,only:"adunit",constraint:false,onUpdate:function(){getParams()}});'."\n";
		$html .= 'if(document.all){document.location.reload();}';//IEにて未定義エラーが出るためリロードさせることにしました。2008.07.03
		$html .= '//]]></script>'."\n";
		print($html);
		break;
	case "sort":
		//c2_0-inner:27;c3_0-inner:30,28;c3_1-inner:29;c39_0-inner:;c39_1-inner:;c39_2-inner:; こんな感じでPOSTされてきます
		$clist = explode(";",$obj->model->getRequest("u"));
		foreach($clist as $cval) {
			if($cval!="") {
				list($column_id,$pageu_code_str) = explode(":",$cval);
				//colummn_idから pagec_codeとpagec_columnを取得する c2_0-innerなら pagec_code=2, pagec_column=0となる
				list($pagec_code,$column_str) = explode("_",substr($column_id, 1));
				$pagec_column = str_replace("-inner","", $column_str);
				if($pageu_code_str!="") {
					$local_page_unit[$pagec_code][$pagec_column] = explode(",", $pageu_code_str);
				}
			}
		}
		//既存のセッション情報にアクセスしやすくなるようフラットにする
		foreach($_SESSION["page_unit"] as $spukey=>$spuval) {
			foreach($spuval as $sckey=>$scval) {
				foreach($scval as $unitval) {
					$cur_session[$unitval["pageu_code"]] = $unitval;
				}
			}
		}
		$new = array();
		foreach($local_page_unit as $pukey => $puval) {
			foreach($puval as $pukey2 => $puval2) {
				if(is_array($puval2)){
					$order = 0;
					foreach($puval2 as $pukey3=>$puval3) {
						$new[$pukey][$pukey2][$puval3] = $cur_session[$puval3];
						$new[$pukey][$pukey2][$puval3]["pageu_pagec_code"] = $pukey;
						$new[$pukey][$pukey2][$puval3]["pageu_column"] = $pukey2;
						$new[$pukey][$pukey2][$puval3]["pageu_order"] = $order;
						$order++;
					}
				}
			}
		}
		$_SESSION["page_unit"] = array();
		$_SESSION["page_unit"] = $new;
		break;
	case "delete":
		//削除するエレメント名を取得id=h1-4_-1で来ます(0<=の場合は新規追加のコンテナ,0>の場合はDB保存済みのコンテナ)
		// 'ユニット名-'.ユニットマスタコード.'_'.pageu_code;
		list($trash,$delete_id) = explode("_",$obj->model->getRequest("id"));
		//既存のセッション情報にアクセスしやすくなるようフラットにする
		foreach($_SESSION["page_unit"] as $spukey=>$spuval) {
			foreach($spuval as $sckey=>$scval) {
				foreach($scval as $unitval) {
					if($delete_id!=$unitval["pageu_code"]) {
						$cur_session[$unitval["pageu_code"]] = $unitval;
					}
				}
			}
		}
		unset($_SESSION["page_unit"]);
		//再構築
		$order = 0;
		$_pagec_code = null;
		$_pagec_column = null;
		if(is_array($cur_session)) {
			foreach($cur_session as $cskey => $csval) {
				$order++;
				if($_pagec_code!=$csval["pageu_pagec_code"] || $_pagec_column != $csval["pageu_column"]) {
					$order = 0;
				}
				$_SESSION["page_unit"][$csval["pageu_pagec_code"]][$csval["pageu_column"]][$csval["pageu_code"]] = $csval;
				$_SESSION["page_unit"][$csval["pageu_pagec_code"]][$csval["pageu_column"]][$csval["pageu_code"]]["pageu_order"] = $order;
				$_pagec_column = $csval["pageu_column"];
				$_pagec_code = $csval["pageu_pagec_code"];
			}
		}
		break;
	case "copy":
		//コピー対象のエレメント名を取得id=h1-4_-1でPOSTされる(0<=の場合は新規追加のコンテナ,0>の場合はDB保存済みのコンテナ、ただしユニット設定されているかどうかは分からない)
		// 'ユニット名-'.ユニットマスタコード.'_'.pageu_code;
		list($trash,$copy_id) = explode("_",$obj->model->getRequest("id"));
		
		//コピーユニット名
		$unitclip_name =strip_tags($obj->model->getRequest("input"));
		if($unitclip_name=='') $unitclip_name = 'コピーユニット'.$copy_id;
		
		//ユニット登録IDからユニットを宣言
		if(isset($copy_id) && is_numeric($copy_id)) {
			//ユニットコードからプログラムファイルがどこか取得
			$pageunitDB = new pageunitDB();
			$unitdata = $pageunitDB->getDetail($copy_id, $prev=true);
			//プログラムファイルの読み込み
			if(isset($unitdata["unit_php_path"])) {
				$units_dir = explode(".", $unitdata["unit_php_path"]);
				//require_once(UNITS_PATH."/".$units_dir[0]."/".$unitdata["unit_php_path"]);
				switch($unitdata["unit_type"]) {
					case 2:
					case 3:
						require_once(UNITS_PATH."/".$units_dir[0]."/".$unitdata["unit_php_path"]);
						break;
					case 4:
					case 5:
						require_once(EXT_UNITS_PATH."/".$units_dir[0]."/".$unitdata["unit_php_path"]);
						break;
					case 6:
							require_once(MODULES_PATH."/".unitDB::getModuleUnitPath($unitdata["extmodule_path"]).$units_dir[0]."/".$unitdata["unit_php_path"]);
						break;
					default :
						break;
				}
			}
			list($unit_class_name,$trash) = explode('.', $unitdata["unit_php_path"]);
			$unit_class = new $unit_class_name;
			$view = new View("pc");
			$unit_class->init($copy_id, $unit_class_name, $view, $prev=true, $unitdata);
			
			//ユニット個別設定情報があるか確認、なければコピー不可
			$unitdetail = null;
			$unitdetail = $unit_class->getDetail();
			if($unitdetail!=null) {
				//まずはtbl_page_unit_tmpに複製登録
				$pageunitDB->db->query('BEGIN');
				$record = array(
										"pageu_code"=>$pageunitDB->db->getKey("tbl_page_unit_pageu_code"),
										"pageu_unit_code"=>$unitdata["pageu_unit_code"],
										"pageu_extmodule_code"=>$unitdata["unit_extmodule_code"],
										"unitclip_name"=>$unitclip_name
										);
				if(!$pageunitDB->db->insert("tbl_unitclip",$record)) {
					$pageunitDB->db->query('ROLLBACK');
					echo -1; //tbl_page_unit_tmpへの保存エラー
					exit();
				}
				
				//tbl_page_unit_tmpに登録したidを元にユニット毎のテーブルに設定内容を複製保存
				if(!$unit_class->unitCopy($copy_id, $record["pageu_code"], $pageunitDB->db)) {
					echo -2; //tbl_page_unit_tmpへの保存エラー
					exit();
				}
				$pageunitDB->db->query('COMMIT');
				echo 1;
			} else {
				echo 0;
			}
		}
		
		
		break;
	default:
		break;
}
?>