<?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/>.
*/
require_once (LIB_PATH.'/common/moduleDB.php');
class Admin_admin_unitmodule_Index2 extends moduleDB
{

	function prepare($view)
	{
		$this->_p = $this->getRequest('p') ? $this->getRequest('p') : 0;

		$this->_form = new HTML_QuickForm('install','post',$_SERVER['PHP_SELF'],'',null,true);
		$this->_form->addElement('file', 'installfile', '');//zipアップ用ボタン
		$this->_form->addElement('submit','BTNinstall',' 登録 ',array('id'=>'BTNinstall','class'=>'bBtnReg'));
		$this->_form->addRule('installfile','・モジュールの圧縮ファイルを選択してください。','uploadedfile',null,'server');
		
		return null;
	}

	function perform($view)
	{
		//モジュールzipアップロード
		if($this->getRequest("BTNinstall")) {
			if(!check_token($_REQUEST["token"])) {
				$this->putTokenError();
			}
			if($this->_form->validate()) {
				$upfile_name = explode(".", $_FILES["installfile"]["name"]);
				if(isset($upfile_name[1])&&$upfile_name[1] == "zip") {
					if (is_uploaded_file($_FILES['installfile']["tmp_name"])) {
						$fl = $this->_form->getElement('installfile');
						//workディレクトリにzipを保存
						if (!$fl->moveUploadedFile(MODULES_WORKPATH, $_FILES["installfile"]["name"])) {
							$this->_form->setElementError("","・ファイルの保存に失敗しました。");
						} else {
							$zipfilepath = MODULES_WORKPATH."/".$_FILES["installfile"]["name"];
							$result = $this->installModule($zipfilepath);
							if($result!=null) {
								$this->_form->setElementError("",$result);
							}
						}
					} else {
						$this->_form->setElementError("","・アップロードに失敗しました");
					}
				} else {
					$this->_form->setElementError("","・アップロードできるファイル形式はzipファイルのみとなっております。");
				}
			}
		} else if($this->getRequest("Btndel")) {//削除
			if(!check_token($_REQUEST["token"])) {
				$this->putTokenError();
			}
			$del_code = $this->getRequest('extmodule_code');
			if(is_numeric($del_code)) {
				$rtn = $this->delete($del_code);
				if($rtn===true) {
					$this->_form->setElementError("","・削除しました。");
				} else if($rtn===false){
					$this->_form->setElementError("","削除に失敗しました");
				} else {
					$this->_form->setElementError("",$rtn);
				}
			} else {
				$this->_form->setElementError("","コードが不明です");
			}
		} else if($this->getRequest("BtnUpdate")) {//更新
			if(!check_token($_REQUEST["token"])) {
				$this->putTokenError();
			}
			$update_code = $this->getRequest('extmodule_code');
			if(is_numeric($update_code)) {
				$rtn = $this->ModuleVersionUpdate($update_code);
				if($rtn===true) {
					$this->_form->setElementError("","更新しました");
				} else if($rtn===false){
					$this->_form->setElementError("","更新に失敗しました");
				} else {
					$this->_form->setElementError("",$rtn);
				}
			} else {
				$this->_form->setElementError("","コードが不明です");
			}
		}
		$rtn = array();
		$list = $this->getList();
		$rtn = Pager(AD_PAGER_LIMIT, $this->_p, $list, $method='GET', $urlvar='p');
		
		//登録エラー時
		if(!empty($this->_form->_errors)) {
			$view->assign('ERROR',$this->_form->_errors);
			foreach($this->_form->_errors as $key => $val) {
				$this->_form->updateElementAttr($key, array("class"=>"err"));
			}
		}
		
		//使用ページ取得
		//表示されるモジュールのコードを取得
		if(isset($rtn["pagedata"])&&is_array($rtn["pagedata"])) {
			$module_code_ar = array();
			foreach($rtn["pagedata"] as $key => $val) {
				$module_code_ar[] = $val["extmodule_code"];
			}
			//モジュール専用ユニットが配置されているページを取得する
			$unituseplist = $this->getMdlUnitUsingPages($module_code_ar);
			foreach($rtn["pagedata"] as $key => $val) {
				if(isset($unituseplist["tmp"][$val["extmodule_code"]]) && is_array($unituseplist["tmp"][$val["extmodule_code"]])) {
					//編集中のページリストを格納
					$rtn["pagedata"][$key]["usepagesontmp"] =$unituseplist["tmp"][$val["extmodule_code"]];
				}
				if(isset($unituseplist["open"][$val["extmodule_code"]]) && is_array($unituseplist["open"][$val["extmodule_code"]])) {
					//編集中のページリストを格納
					$rtn["pagedata"][$key]["usepagesonopen"] = $unituseplist["open"][$val["extmodule_code"]];
				}
				//バージョンアップデートの確認
				//モジュールディレクトリの設定ファイルを読み込み
				$rtn["pagedata"][$key]["update"] = 0;
				if(file_exists(MODULES_PATH."/".$val["extmodule_path"]."/moduleCnf.inc")) {
					require(MODULES_PATH."/".$val["extmodule_path"]."/moduleCnf.inc");
					if($VERSION>$val["extmodule_ver"]&&file_exists(MODULES_PATH."/".$val["extmodule_path"]."/util/update.php")) {
						$rtn["pagedata"][$key]["update"] = 1;
					}
				}
			}
		}
		
		$view->assign('list', $rtn["pagedata"]);
		$view->assign('Pages', $rtn["pageNavi"]["all"]);
		
		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($view);
		$this->_form->accept($renderer);
		$view->assign('form',$renderer->toArray());
		$view->assign("token", $this->getToken());
        return 'unit-module/index2.tpl';
	}
	
	function getList()
	{
		$sql = "select * from tbl_extmodule where extmodule_active = 1 and extmodule_type = 1"; //標準モジュールはリストさせない
		$order = " order by extmodule_code desc";
		$result = $this->db->query($sql.$order);
		$rtn=null;
		if($result != null) {
			while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
				$rtn[$row["extmodule_code"]] = $row;
			}
		}
		return $rtn;
	}
}
?>