<?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/sidebarDB.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を取得
		$sdbr_tpl_code = $obj->model->getRequest("sdbr_tpl_code"); //ページ番号
		
		$torder = $obj->model->getRequest("order");
		
		$order = 0;
		if(isset($_SESSION["sidebar_unit"]) 
					&& is_array($_SESSION["sidebar_unit"]) 
					&& count($_SESSION["sidebar_unit"])>0) {
			foreach($_SESSION["sidebar_unit"] as $key=>$val) {
				if($order<$val["sdbr_order"]) {
					$order = $val["sdbr_order"];
				}
			}
			$order++;
		}
		//if($code<=0) {v1.2でコメント
			$code = 0;
			if(isset($_SESSION["new_side_unit_code"])) {
				$code = $_SESSION["new_side_unit_code"]-1;
			}
			$_SESSION["new_side_unit_code"] = $code;
		//}v1.2でコメント
		//新しいユニットの表示順セット
		if(is_numeric($torder)&&$torder>=0) {
			$order = $torder;
		}
		//セッションにセット
		/*$_SESSION["sidebar_unit"][$code] = array("pageu_code"=>$code,
												"sdbr_sidx_code"=>$sidx_code,
												"sdbr_unit_code"=>$unit_code,
												"sdbr_order"=>$order);
		*/
		if(is_numeric($pageu_code_cp)) {
			$new = array("pageu_code"=>$code,
						"sdbr_tpl_code"=>$sdbr_tpl_code,
						"sdbr_unit_code"=>$unit_code,
						"sdbr_order"=>$order,
						"cp"=>$pageu_code_cp);
		} else {
			$new = array("pageu_code"=>$code,
						"sdbr_tpl_code"=>$sdbr_tpl_code,
						"sdbr_unit_code"=>$unit_code,
						"sdbr_order"=>$order);
		}
		//表示順ふり直し
		if(isset($_SESSION["sidebar_unit"]) && is_array($_SESSION["sidebar_unit"]) && count($_SESSION["sidebar_unit"])>0) {
			foreach($_SESSION["sidebar_unit"] as $key => $val) {
				if($val["sdbr_order"] >= $order) {
					$_SESSION["sidebar_unit"][$key]["sdbr_order"] += 1;
				}
			}
		}
		$_SESSION["sidebar_unit"][$new["pageu_code"]] = $new;
		
		//セッション配列の並び替え
		foreach($_SESSION["sidebar_unit"] as $key=>$val) {
			$order_ar[$val["sdbr_order"]] = $val;
		}
		ksort($order_ar);
		unset($_SESSION["sidebar_unit"]);
		foreach($order_ar as $key=>$val) {
			$_SESSION["sidebar_unit"][$val["pageu_code"]] = $val;
		}
		//セッションの値を元にコンテナ内部のユニットリストhtmlを生成
		$sidebarDB = new sidebarDB();
		$html_ar =  $sidebarDB->makeUnitListHTML($obj->view,$_SESSION["sidebar_unit"],$prev=true);
		$html = $sidebarDB->SidebarAdminmakeHTML($html_ar);
		
		//$html = $sidebarDB->SidebarAdminmakeHTML($obj->view,$_SESSION["sidebar_unit"]);
		print($html);
		break;
	case "sort":
		$pageu_code = explode(",",$obj->model->getRequest("pageu_code"));
		//削除時にも実行されてしまう場合ありそのためほんとにセッションに居る物だけソートする
		//ほんとにいるcodeリスト作成
		foreach($_SESSION["sidebar_unit"] as $key=>$val) {
			$tmp[] = $val["pageu_code"];
		}
		$new = array();
		$cnt = 0;
		foreach($pageu_code as $key=>$val) {
			if(in_array($val, $tmp)) {
				$new[$val] = $_SESSION["sidebar_unit"][$val];
				$new[$val]["sdbr_order"] = $cnt;
				$cnt++;
			}
		}
		$_SESSION["sidebar_unit"] = $new;
		break;
	case "delete":
		//削除するエレメント名を取得id=addcunit_-2とか id=addcunit_24とかで来ます(0<=の場合は新規追加のコンテナ,0>の場合はDB保存済みのコンテナ)
		$delete_id = explode("_",$obj->model->getRequest("id"));
		if($delete_id[1]!=null&&is_numeric($delete_id[1])){
			unset($_SESSION["sidebar_unit"][$delete_id[1]]);
		}
		//並び替え
		$cnt = 0;
		foreach($_SESSION["sidebar_unit"] as $key=>$val) {
			$_SESSION["sidebar_unit"][$key]["sdbr_order"] = $cnt;
			$cnt++;
		}
		break;
	case "copy":
		//コピー対象のエレメント名を取得id=h1-4_-1でPOSTされる(0<=の場合は新規追加のコンテナ,0>の場合はDB保存済みのコンテナ、ただしユニット設定されているかどうかは分からない)
		// 'ユニット名-'.ユニットマスタコード.'_'.pageu_code;
		list($trash,$copy_id) = explode("_",$obj->model->getRequest("id"));
		
		//コピーユニット名
		$unitclip_name = $obj->model->getRequest("input");
		
		//ユニット登録IDからユニットを宣言
		if(isset($copy_id) && is_numeric($copy_id)) {
			//ユニットコードからプログラムファイルがどこか取得
			$sidebarDB = new sidebarDB();
			$unitdata = $sidebarDB->getDetail($copy_id);
			//プログラムファイルの読み込み
			if(isset($unitdata["unit_php_path"])) {
				$units_dir = explode(".", $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;
			$unit_class->init($copy_id, $unit_class_name, $view=null, $prev=true, $unitdata);
			//ユニット個別設定情報があるか確認、なければコピー不可
			$unithtml = $unit_class->setDisplayData();
			if(is_array($unithtml)&&count($unithtml)>0) {
				//まずはtbl_page_unit_tmpに複製登録
				$sidebarDB->db->query('BEGIN');
				$record = array(
										"pageu_code"=>$sidebarDB->db->getKey("tbl_page_unit_pageu_code"),
										"pageu_unit_code"=>$unitdata["unit_code"],
										"pageu_extmodule_code"=>$unitdata["unit_extmodule_code"],
										"unitclip_name"=>$unitclip_name
										);
				if(!$sidebarDB->db->insert("tbl_unitclip",$record)) {
					$sidebarDB->db->query('ROLLBACK');
					echo -1; //tbl_page_unit_tmpへの保存エラー
					exit();
				}
				
				//tbl_page_unit_tmpに登録したidを元にユニット毎のテーブルに設定内容を複製保存
				if(!$unit_class->unitCopy($copy_id, $record["pageu_code"], $sidebarDB->db)) {
					echo -2; //tbl_page_unit_tmpへの保存エラー
					exit();
				}
				$sidebarDB->db->query('COMMIT');
				echo 1;
			} else {
				echo 0;
			}
		}
		
		
		break;
	default:
		break;
}
?>