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

/**
 * 拡張ユニットDBアクセスクラス
 */
require_once (LIB_PATH.'/common/unitDB.php');
class extunitDB extends unitDB
{
	var $db=null;
	
	function extunitDB()
	{
		$this->__construct();
	}
	
	function __construct()
	{
		Model::__construct();
		$this->db = new DataBase();
	}
	
	//フォームエレメントの作成
	function setElements()
	{

	}
	//フォーム入力エラーチェックの設定
	function setRules()
	{


	}
	//ボタン作成
	function setButtons($frozen = false) {

	}
	
	//unit_orderのマックス値取得
	function getOdrMax()
	{
		$sql = 'SELECT MAX(unit_order)+1 FROM tbl_unit';
		$max = $this->db->getOne($sql);
		return $max;
	}
	
	function ExtUnitVersionUpdate($code) {
		if(!is_numeric($code)){
			return "拡張ユニットコードが不明です。";
		}
		//ディレクトリ内のupdate.phpにお任せ
		//ユニットマスタ情報取得
		$unit_data = $this->getData($code);
		//util/update.phpの読み込み
		$inst_extunit_path = $this->getUnitPathFromCode($code);
		if(file_exists($inst_extunit_path."/util/update.php")) {
			$this->db->query('BEGIN');
			require_once($inst_extunit_path."/util/update.php");
			if(function_exists("extunit_update")) {
				if(!extunit_update($param=$unit_data, &$this->db)) {
					$this->db->query('ROLLBACK');
					return false;
				} else {
					$this->db->query('COMMIT');	
					return true;
				}
			}
		} else {
			return "拡張ユニットアップデート用プログラムファイルがありません。";
		}
	}
	
	//削除
	function deleteExtUnit($code) {
		if(!is_numeric($code)){
			return "削除コードが不明です。";
		}
		$this->db->query('BEGIN');
		//拡張ユニットマスタの削除
		if(!$this->db->update("tbl_unit",array("unit_active"=>0),"unit_code=".$code)) {
			$this->db->query('ROLLBACK');
			return "ユニットマスタレコードの削除に失敗しました。";
		}
		
		//ユニット配置情報の削除
		if(!$this->db->query("delete from tbl_page_unit where pageu_unit_code=".$code)) {
			$this->db->query('ROLLBACK');
			return "ページに配置されたユニットの削除に失敗しました。";
		}
		if(!$this->db->query("delete from tbl_page_unit_tmp where pageu_unit_code=".$code)) {
			$this->db->query('ROLLBACK');
			return "ページに配置されたユニット（編集中）の削除に失敗しました。";
		}

		//クリップボードの削除
		if(!$this->db->update("tbl_unitclip",array("unitclip_active"=>0),"pageu_unit_code=".$code)) {
			$this->db->query('ROLLBACK');
			return "クリップボード上のユニットレコードの削除に失敗しました。";
		}
		$this->db->query('COMMIT');
		
		//モジュール、およびモジュール専用ユニットが作成したテーブルの削除
		//モジュールディレクトリ内のdelete.phpにお任せ
		$inst_extunit_path = $this->getUnitPathFromCode($code);
		if(file_exists($inst_extunit_path."/util/delete.php")) {
			//util/delete.phpの実行
			require_once($inst_extunit_path."/util/delete.php");
			if(function_exists("extunit_delete")) {
				if(!extunit_delete($param=$this->getData($code), &$this->db)) {
					commonFile::AlldelDir($inst_extunit_path);
					return "拡張ユニットを削除しましたが、ユニットデータベースの削除に失敗しました。";
				}
			}
		}
		//拡張ユニットディレクトリの削除
		commonFile::AlldelDir($inst_extunit_path);
		return true;
		
	}
}
?>