<?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/>.
 */
//インストーラディレクトリ名
$inst_dirname = "/install";
$pear_dirname = "/lib/pear";

//日付を日本時間に設定
putenv("TZ=JST-9");

ini_set("mbstring.internal_encoding", "UTF-8");
ini_set('mbstring.http_output', 'UTF-8');
ini_set('mbstring.http_input', 'auto');

/*　インストールディレクトリ　*/
$install_dir = realpath(dirname( __FILE__));

$bingo_root = str_replace($inst_dirname,'',$install_dir);

//インストールステップ数
define('STEP', 6);

/*　プログラムベースパス（bingo!CMS）　*/
$base_dir = $bingo_root;
/*　ライブラリパス（PEAR）　*/
$lib_dir = $base_dir.$pear_dirname;
ini_set('include_path', $lib_dir);

//データベースタイプ
$db_type = array('pgsql'=>'PostgreSQL', 'mysql'=>'MySQL');

require_once ('Smarty/Smarty.class.php');
require_once ('DB.php');
require_once ('DB/storage.php');
require_once ('Pager/Pager.php');
require_once ('HTTP/Upload.php');
require_once ('HTML/QuickForm/select.php');
require_once ('HTML/QuickForm/checkbox.php');
require_once ('HTML/QuickForm/radio.php');
require_once ('HTML/QuickForm.php');
require_once ('HTML/QuickForm/Renderer/ArraySmarty.php');

class View extends Smarty {
	
	/**
	* コンストラクタ
	*
	* @author Nobuo Nishino
	*/
	function View()
	{
		$this->__construct();
	}

	/**
	* コンストラクタ
	*
	* @author Nobuo Nishino
	*/
	function __construct()
	{
		$this->init();
	}

	/**
	* Smarty初期設定
	*
	* @author Nobuo Nishino
	*/
    function init()
    {
    	global $install_dir;
    	global $lib_dir;

		$this->Smarty();
		$this->plugins_dir  = $lib_dir . '/Smarty/plugins/';
        $this->template_dir = $install_dir . '/tpl/';
		$this->compile_dir  = $install_dir . '/tmp/';
		$this->caching      = false;

		//アクセス権限のチェック
		if(_chkDir($this->compile_dir) === false) {
			$msg = "{$this->compile_dir}のアクセス権を777にセットして下さい";
			Install::viewErrorMessage($msg);
		}
    }
}

/**
* ディレクトリの書き込み権限をチェックする関数
*
* @author Nobuo Nishino
* @param string $path チェック対象のパス
* @return bool 書き込み成功：true　失敗：false
*/
function _chkDir($path)
{
	//アクセス権限のチェック
	$fp = @fopen($path . "log.txt", "w");
	if ($fp === false) {
		return false;
	} else {
		unlink($path . "log.txt");
		fclose($fp);
		return true;
	}
}

class Install {

	//ベースパス
	var $_base_dir = null;
	//ベースパス
	var $_lib_dir = null;
	//Smarty Object
	var $_view = null;
	//テンプレート名
	var $_tpl_name = null;

	/**
	* コンストラクタ
	*
	* @author Nobuo Nishino
	*/
	function Install()
	{
		$this->__construct();
	}

	/**
	* コンストラクタ（PHP5）
	*
	* @author Nobuo Nishino
	*/
    function __construct()
    {
    	global $base_dir;
		$this->_base_dir = $base_dir;
		global $lib_dir;
		$this->_lib_dir = $lib_dir;

		//セッション開始
		session_start();

		$this->_view = new View();
    }

	/**
	* エラーメッセージ表示
	*
	* @author Nobuo Nishino
	* @param string $str 引数の説明
	* @return string 返値の説明
	*/
    function viewErrorMessage($msg)
    {
$str = <<<EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div style='color: #F00; font-weight: bold; font-size: 14px;background-color: #CCC; text-align: center; padding: 5px;'>
[ERROR]&nbsp;&nbsp;{$msg}
</div>
</body>
</html>
EOD;
		echo $str;
		exit;
    }

	/**
	* テンプレート名を変数にセット
	*
	* @author Nobuo Nishino
	* @param string $name テンプレートファイル名
	* @return void
	*/
    function setTemplate($name)
    {
	   	$this->_tpl_name = $name;
    }

	/**
	* テンプレート表示処理
	*
	* @author Nobuo Nishino
	* @param string $name テンプレートファイル名
	* @return void
	*/
    function output()
    {
	    $this->_view->display($this->_tpl_name);
    }

	/**
	* データベース接続用のDNS
	*
	* @author Nobuo Nishino
	*/
	function dsn()
	{
		$dsn = "";
		$dsn .= ($_SESSION['STEP4']['db_type'] != "") ? $_SESSION['STEP4']['db_type']."://" : "";
		$dsn .= ($_SESSION['STEP4']['user'] != "") ? $_SESSION['STEP4']['user'] : "";
		$dsn .= ($_SESSION['STEP4']['password'] != "") ? ":".$_SESSION['STEP4']['password'] : "";
		$dsn .= "@";
		$dsn .= ($_SESSION['STEP4']['host'] != "") ? $_SESSION['STEP4']['host'] : "";
		$dsn .= ($_SESSION['STEP4']['port'] != "") ? ":".$_SESSION['STEP4']['port'] : "";
		$dsn .= ($_SESSION['STEP4']['db'] != "") ? "/".$_SESSION['STEP4']['db'] : "";
		return $dsn;
	}

	/**
	* 書き込み権限のチェック（STEP1）
	*
	* @author Nobuo Nishino
	*/
    function step1()
    {
    	//メッセージ格納配列
    	$msg = array();
    	//エラー判定
    	$error = false;
		//QuickForm
		$form = new HTML_QuickForm('form','post',$_SERVER['PHP_SELF'],'',null,true);

		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$form->addElement('hidden','cmd', $cmd);

		//アクセス権チェックするディレクトリ
		$chkdir = array('/_cache/',
						'/_cache/pc/',
						'/_cache/items/',
						'/_cache/pc/admin/',
						'/_tmp/',
						'/_tmp/pc/',
						'/_tmp/pc/admin/',
						'/global-image/',
						'/global-image/_tmp/',
						'/global-image/header/',
						'/global-image/page/',
						'/global-image/usr-prof/',
						'/global-image/units/',
						'/global-image/units/img/',
						'/global-image/units/swf/',
						'/global-image/units/ttlimg/',
						'/global-image/units/upfiles/',
						'/usr-data/',
						'/usr-data/template/',
						'/usr-data/_template_tmp/',
						'/usr-data/_module_tmp/',
						'/usr-data/extunits/',
						'/usr-data/modules/',
						'/app/etc/');

		foreach($chkdir as $val) {
			$test_path = $this->_base_dir . $val;
			if(_chkDir($test_path) === false) {
				$msg[] = array('msg'=>$test_path.'のアクセス権を777にセットして下さい。<br />',
								'flg'=>false);
				$error = true;
			} else {
				$msg[] = array('msg'=>$test_path.'のアクセス権は正しくセットされました。<br />',
								'flg'=>true);
			}
		}

		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$this->_view->assign('cmd', $cmd);

		$_SESSION['STEP1']['chk'] = $error;

		if (isset($_REQUEST['NEXT']) && $error == false) {
			header('Location:index.php?cmd=2');
		}

		$this->_view->assign('error', $_SESSION['STEP1']['chk']);
		$this->_view->assign('list',  $msg);

		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($this->_view);
		$form->accept($renderer);
		$this->_view->assign('form',$renderer->toArray());
    }

   	/**
	* STEP2
	* @author Nobuo Nishino
	*/
    function step2()
    {
   	//メッセージ格納配列
    	$msg = array();
		//QuickForm
		$form = new HTML_QuickForm('form','post',$_SERVER['PHP_SELF'],'',null,true);

		global $db_type;
		//サイト名
		$form->addElement('text','sitename', null, array('size'=>50, 'id'=>'sitename','style'=>'ime-mode:active'));
		//URL
		$_url =& $form->addElement('text','url', null, array('size'=>50, 'id'=>'url','style'=>'ime-mode:disabled', 'value'=>'http://'.$_SERVER['SERVER_NAME'].str_replace('/install/index.php','',$_SERVER['PHP_SELF'])));
		//$_url->freeze();
		//SSL
		$_ssl =& $form->addElement('text','ssl', null, array('size'=>50, 'id'=>'ssl','style'=>'ime-mode:disabled', 'value'=>'https://'.$_SERVER['SERVER_NAME'].str_replace('/install/index.php','',$_SERVER['PHP_SELF'])));
		//$_ssl->freeze();
		//管理者名（姓名）
		$form->addElement('text','sei', null, array('size'=>10, 'id'=>'sei','style'=>'ime-mode:active'));
		$form->addElement('text','mei', null, array('size'=>10, 'id'=>'mei','style'=>'ime-mode:active'));
		//管理者パスワード
		$form->addElement('text','password', null, array('size'=>20, 'id'=>'password','maxlength'=>10,'style'=>'ime-mode:disabled'));
		//管理者メールアドレス
		$form->addElement('text','adminmail', null, array('size'=>30, 'id'=>'adminmail','style'=>'ime-mode:disabled'));
		//サイト共通検索エンジン用キーワード
		$form->addElement('text','keywords', null, array('size'=>50, 'id'=>'keywords','style'=>'ime-mode:active'));
		//サイト共通検索エンジン用説明文
		$form->addElement('text','description', null, array('size'=>50, 'id'=>'description','style'=>'ime-mode:active'));
		//サイト共通検索エンジン用説明文
		$form->addElement('textarea','analyticstags', null, array('size'=>50,'rows'=>5, 'cols'=>50, 'id'=>'analyticstags','style'=>'ime-mode:active'));

		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$form->addElement('hidden','cmd', $cmd);

		$form->applyFilter('__ALL__','trim');
		$form->addRule('sitename','・「サイト名」を入力してください','required',null);
		$form->addRule('url','・「サイトURL」を入力してください','required',null);
		$form->addRule('ssl','・「セキュアサイト用URL」を入力してください','required',null);
		$form->addRule('url','・「サイトURL」を正しく入力してください','regex','/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/');
		$form->addRule('ssl','・「セキュアサイト用URL」を正しく入力してください','regex','/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/');
		$form->addRule('sei','・「管理者名（姓）」を入力してください','required',null);
		$form->addRule('mei','・「管理者名（名）」を入力してください','required',null);
		$form->addRule('password','・「管理ページ　パスワード」を入力してください','required',null);
		$form->addRule('password','・「管理ページ　パスワード」は半角英数字4文字以上10文字以内で入力してください','alphanumeric',null);
		$form->addRule('password','・「管理ページ　パスワード」は半角英数字4文字以上10文字以内で入力してください','rangelength', array(4,10));
		$form->addRule('adminmail','・「管理ページ　ログインID」を入力してください','required',null);
		$form->addRule('adminmail','・「管理ページ　ログインID」を正しく（メールアドレス）入力してください','email',null);

		if (isset($_REQUEST['NEXT'])) {
			if($form->validate()){
				$post = $form->getSubmitValues();
				$_SESSION['sitename']	= $post['sitename'];
				$_SESSION['url']		= $post['url'];
				$_SESSION['ssl']		= $post['ssl'];
				$_SESSION['sei']		= $post['sei'];
				$_SESSION['mei']		= $post['mei'];
				$_SESSION['password']	= $post['password'];
				$_SESSION['adminmail']	= $post['adminmail'];
				$_SESSION['keywords']	= $post['keywords'];
				$_SESSION['description']= $post['description'];
				$_SESSION['analyticstags']= $post['analyticstags'];
				$_SESSION['STEP4']['chk'] = false;

				header('Location:index.php?cmd=3');
			}
		} else {
			//セッションにデータがある場合は初期値としてセット
			$form->setDefaults($_SESSION);
		}

   		//登録エラー時
		if(!empty($form->_errors)) {
			$this->_view->assign('ERROR',$form->_errors);
			foreach($form->_errors as $key => $val) {
				$form->updateElementAttr($key, array("class"=>"err"));
			}
			$_SESSION['STEP2']['chk'] = true;
		}
		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($this->_view);
		$form->accept($renderer);
		$this->_view->assign('form',$renderer->toArray());
    }

	/**
	* STEP3
	* @author Nobuo Nishino
	*/
    function step3()
    {
		//QuickForm
		$form = new HTML_QuickForm('form','post',$_SERVER['PHP_SELF'],'',null,true);
		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$form->addElement('hidden','cmd', $cmd);

    	foreach ($_SESSION as $k => $v) {
    		$this->_view->assign($k,$v);
    	}

    	if (isset($_REQUEST['NEXT'])) {
    		header('Location:index.php?cmd=4');
    	}
		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($this->_view);
		$form->accept($renderer);
		$this->_view->assign('form',$renderer->toArray());
    }

	/**
	* STEP4
	* @author Nobuo Nishino
	*/
    function step4()
    {
    	//STEP5のチェックをTRUEに
    	$_SESSION['STEP5']['chk']  = true;

    	//メッセージ格納配列
    	$msg = array();
		//QuickForm
		$form = new HTML_QuickForm('form','post',$_SERVER['PHP_SELF'],'',null,true);

		global $db_type;
		//データベースタイプ
		$form->addElement('select','db_type', null, $db_type);
		//ホスト名
		$form->addElement('text','host', null, array('size'=>50, 'id'=>'host'));
		//データベース名
		$form->addElement('text','db', null, array('size'=>50, 'id'=>'db'));
		//ポート番号
		$form->addElement('text','port', null, array('size'=>10, 'id'=>'port'));
		//ユーザー名
		$form->addElement('text','user', null, array('size'=>50, 'id'=>'user'));
		//パスワード
		$form->addElement('text','password', null, array('size'=>50, 'id'=>'password'));
		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$form->addElement('hidden','cmd', $cmd);

		$form->applyFilter('__ALL__','trim');
		$form->addRule('host','・「ホスト名（IPアドレス）」を入力してください','required',null);
		$form->addRule('db','・「データベース名」を入力してください','required',null);
		$form->addRule('user','・「データベースユーザー」を入力してください','required',null);

		if (isset($_REQUEST['CHECK']) || isset($_REQUEST['NEXT'])) {
			if($form->validate()){
				$post = $form->getSubmitValues();
				$_SESSION['STEP4']['chk']  = false;
				$_SESSION['STEP4']['db_type'] = $post['db_type'];
				$_SESSION['STEP4']['host']    = $post['host'];
				$_SESSION['STEP4']['db']      = $post['db'];
				$_SESSION['STEP4']['port']    = $post['port'];
				$_SESSION['STEP4']['user']    = $post['user'];
				$_SESSION['STEP4']['password']= $post['password'];
				//接続チェック
				$dsn = $this->dsn();
				$db = DB::connect($dsn);
				if (DB::isError($db)) {
					$form->setElementError('db_type','データベースの接続に失敗しました。設定を確認してください。');
				} else {
					if (isset($_REQUEST['NEXT'])) {
						header('Location:index.php?cmd=5');
					} elseif (isset($_REQUEST['CHECK'])) {
						$this->_view->assign('OK','接続に成功しました');
					}
				}
			}
		} else {
			$form->setDefaults(array("host"=>"127.0.0.1",
								 "db"=>"bingo_db",));
			//セッションにデータがある場合は初期値としてセット
			$data = isset($_SESSION['STEP4']) ? $_SESSION['STEP4'] : null;
			if($data) {
				$form->setDefaults($data);
			}
		}

   		//登録エラー時
		if(!empty($form->_errors)) {
			$this->_view->assign('ERROR',$form->_errors);
			foreach($form->_errors as $key => $val) {
				$form->updateElementAttr($key, array("class"=>"err"));
			}
			$_SESSION['STEP4']['chk'] = true;
		}
		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($this->_view);
		$form->accept($renderer);
		$this->_view->assign('form',$renderer->toArray());
    }

	/**
	* STEP5
	* @author Nobuo Nishino
	*/
    function step5()
    {
    	global $db_seq;
    	global $db_view;

    	//メッセージ格納配列
    	$msg = array();
		//QuickForm
		$form = new HTML_QuickForm('form','post',$_SERVER['PHP_SELF'],'',null,true);

		$cmd = isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '';
		$form->addElement('hidden','cmd', $cmd);

		//次へ進む
		if (isset($_REQUEST['NEXT'])) {
			if (isset($_SESSION['STEP5']['chk'])) {
				if ($_SESSION['STEP5']['chk']  == true) {
					$form->setElementError('','データベースの初期化は必ず実行してください。');
				} else {
					header('Location:index.php?cmd=6');
				}
			}
		}

		//データベース初期化実行
		if (isset($_REQUEST['INIT'])) {
			if($form->validate()){
				$post = $form->getSubmitValues();
				//接続チェック
				$dsn = $this->dsn();
				$db = DB::connect($dsn);
				if (DB::isError($db)) {
					$form->setElementError('','データベースの接続に失敗しました。設定を確認してください。');
				} else {
					if (isset($_SESSION['STEP4']['db_type']) && $_SESSION['STEP4']['db_type'] == 'mysql') {
						// SET NAMES クエリの発行
						$sql = "SET NAMES utf8";
						$result = $db->query($sql);
					}
					//エラーメッセージ
					$error_msg = array();
					//成功メッセージ
					$ok_msg = array();

					//既存テーブルの削除
					$info = $db->getTables();
					if (is_array($info)) {
						foreach ($info as $dltbl) {
							$dltbl = "DROP TABLE {$dltbl}";
							$ret = $db->query($dltbl);
							if (DB::isError($ret)) {
								$error_msg[] = 'テーブルの削除に失敗しました<br>';
								break;
							}
						}
					}
					//システムテーブルの作成
					if (isset($_SESSION['STEP4']['db_type']) && $_SESSION['STEP4']['db_type'] == 'mysql') {
						//$tbl_sql = $this->_base_dir . '/'.$this->docrt.'/install/sql/mysql/tbl.sql';
						$tbl_sql = $this->_base_dir . '/install/sql/mysql/tbl.sql';
					} else {
						//$tbl_sql = $this->_base_dir . '/'.$this->docrt.'/install/sql/pgsql/tbl.sql';
						$tbl_sql = $this->_base_dir . '/install/sql/pgsql/tbl.sql';
					}
					if (is_file($tbl_sql)) {
						$handle = fopen($tbl_sql, "r");
						if($handle!=null) {
							$sql = fread($handle, filesize($tbl_sql));
							fclose($handle);

							//;で分割実行
							$sql_ar = explode(';', $sql);
							foreach ($sql_ar as $tb) {
								if (trim($tb) != '') {
									$ret = $db->query($tb);
									if (DB::isError($ret)) {
										$error_msg[] = 'テーブル（基本）の作成に失敗しました<br>';
										break;
									}
								}
							}
							if (count($error_msg) == 0) {
								$ok_msg[] = 'テーブル（基本）の作成に成功しました<br>';
							}
						} else {
							$error_msg[] = 'sqlファイルが開けません<br>';
						}
					} else {
						$error_msg[] = 'データベース（基本）作成用ファイルが存在しません<br>';
					}
					//ユニットテーブルの作成
					//$tbl_sql = $this->_base_dir . '/'.$this->docrt.'/install/sql/pgsql/unit.sql';
					if (isset($_SESSION['STEP4']['db_type']) && $_SESSION['STEP4']['db_type'] == 'mysql') {
						$tbl_sql = $this->_base_dir . '/install/sql/mysql/unit.sql';
					} else {
						$tbl_sql = $this->_base_dir . '/install/sql/pgsql/unit.sql';
					}


					if (is_file($tbl_sql)) {
						$handle = fopen($tbl_sql, "r");
						$sql = fread($handle, filesize($tbl_sql));
						fclose($handle);
						//;で分割実行
						$sql_ar = explode(';', $sql);
						foreach ($sql_ar as $tb) {
							if (trim($tb) != '') {
								$ret = $db->query($tb);
								if (DB::isError($ret)) {
									$error_msg[] = 'テーブル（ユニット）の作成に失敗しました<br>';
									break;
								}
							}
						}
						if (count($error_msg) == 0) {
							$ok_msg[] = 'テーブル（ユニット）の作成に成功しました<br>';
						}
					} else {
						$error_msg[] = 'データベース（ユニット）作成用ファイルが存在しません<br>';
					}
					//初期データ挿入
					$f = $this->_base_dir . '/install/sql/init.sql';
					if (is_file($f)) {
						$sitename = isset($_SESSION['sitename']) ? $_SESSION['sitename']:'';
						$url = isset($_SESSION['url']) ? $_SESSION['url']:'';
						if (substr($url, -1) === '/') {
							$url = substr($url, 0, -1);
						}
						$ssl = isset($_SESSION['ssl']) ? $_SESSION['ssl']:'';
						if (substr($ssl, -1) === '/') {
							$ssl = substr($ssl, 0, -1);
						}
						$sei = isset($_SESSION['sei']) ? $_SESSION['sei']:'';
						$mei = isset($_SESSION['mei']) ? $_SESSION['mei']:'';
						$password = isset($_SESSION['password']) ? $_SESSION['password']:'';
						$adminmail = isset($_SESSION['adminmail']) ? $_SESSION['adminmail']:'';
						$keywords = isset($_SESSION['keywords']) ? $_SESSION['keywords']:'';
						$description = isset($_SESSION['description']) ? $_SESSION['description']:'';
						$analyticstags = isset($_SESSION['analyticstags']) ? $_SESSION['analyticstags']:'';

						$handle = fopen($f, "r");
						while ($line = fgets($handle)){
							if ($line != '') {
								//設定された値にINSERT文を置き換え
								$line = str_replace('$sitename',$sitename,$line);
								$line = str_replace('$adminmail',$adminmail,$line);
								//パスワードはsha1で暗号化
								$line = str_replace('$password',sha1($password),$line);
								$line = str_replace('$sei',$sei,$line);
								$line = str_replace('$mei',$mei,$line);
								$line = str_replace('$url',$url,$line);
								$line = str_replace('$ssl',$ssl,$line);
								$line = str_replace('$keywords',$keywords,$line);
								$line = str_replace('$description',$description,$line);
								$line = str_replace('$analyticstags',$analyticstags,$line);

								//pkey変換
								if(preg_match('/\$code:(\w+)/', $line, $matches)) {
									$code = $db->nextId($matches[1]);
									$line = str_replace('$code:'.$matches[1],$code,$line);
								}

								//文字コード変換
								$line = mb_convert_encoding($line, "UTF-8", "auto");
								$ret = $db->query($line);
								if (DB::isError($ret)) {
									$error_msg[] = '初期データの作成に失敗しました<br>';
									break;
								}
							}
						}
						//tbl_unit, tbl_extmodule, tbl_extsection_idx, tbl_extcategory, tbl_extpage_idx, tbl_extpage_container, tbl_extpage_unitのPKEYを5000にセット
						$pkeyup_tgt = array("tbl_unit_unit_code_seq",
														"tbl_extmodule_extmodule_code_seq",
														"tbl_extsection_idx_sidx_code_seq",
														"tbl_extcategory_cat_code_seq",
														"tbl_extpage_idx_pidx_code_seq",
														"tbl_extpage_container_pagec_code_seq",
														"tbl_extpage_unit_pageu_code_seq"
														);
						foreach($pkeyup_tgt as $table_val) {
							if (isset($_SESSION['STEP4']['db_type']) && $_SESSION['STEP4']['db_type'] == 'mysql') {
								$sql = "update ".$table_val." set id=5000;";
							} else {
								$sql = "select setval('".$table_val."', 5000);";
							}
							if (DB::isError($db->query($sql))) {
									$error_msg[] = '初期データの作成に失敗しました（モジュール・ユニット登録コード更新）<br>';
									break;
							}
						}
						if (count($error_msg) == 0) {
							$ok_msg[] = '初期データの作成に成功しました<br>';
						}
					} else {
						$error_msg[] = '初期データの作成に失敗しました<br>';
					}

					//設定ファイル書き込み
					$dir = $this->_base_dir . '/app/etc/installcnf.php';
					if (is_file($dir)) {
						unlink($dir);
					}

					//データベースタイプ
					$dbtype = isset($_SESSION['STEP4']['db_type']) ? $_SESSION['STEP4']['db_type'] : "";
//2008.06.03 yama
$str = <<<EOD
<?php
putenv("TZ=JST-9");
define('BASE_PATH', '{$this->_base_dir}');
define('DSN','{$dsn}');
define('DOCUMENT_ROOT_PATH', '{$_SERVER['DOCUMENT_ROOT']}');
ini_set('include_path', BASE_PATH.'/lib/pear');
@ini_set('memory_limit', -1);
define('DBTYPE', '{$dbtype}');
?>
EOD;

					$fp = @fopen($dir, "w");
					$ret = fwrite($fp, $str);
					if ($ret === false) {
						$error_msg[] = '初期データの作成に失敗しました<br>';
					}
					
					if (count($error_msg) == 0) {
						$_SESSION['STEP5']['chk']  = false;
					} else {
						$_SESSION['STEP5']['chk']  = true;
					}
					$this->_view->assign('error_list',$error_msg);
					$this->_view->assign('ok_list',$ok_msg);
				}
			}
		} else {
			//セッションにデータがある場合は初期値としてセット
			$data = isset($_SESSION['STEP5']) ? $_SESSION['STEP5'] : array();
			$form->setDefaults($data);
		}

   		//登録エラー時
		if(!empty($form->_errors)) {
			$this->_view->assign('ERROR',$form->_errors);
			foreach($form->_errors as $key => $val) {
				$form->updateElementAttr($key, array("class"=>"err"));
			}
			$_SESSION['STEP5']['chk'] = true;
		}
		$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($this->_view);
		$form->accept($renderer);
		$this->_view->assign('form',$renderer->toArray());
    }

    /**
	* STEP6
	* @author Nobuo Nishino
	*/
    function step6()
    {
		$url = isset($_SESSION['url']) ? $_SESSION['url'] : '';
		$this->_view->assign('URL',$url);
    }
}

$insObj = new Install();

//処理コマンド
$cmd = (isset($_REQUEST['cmd'])) ? $_REQUEST['cmd'] : '0';
if (!is_numeric($cmd) || $cmd > STEP) {
	$msg = '処理に失敗しました。インストール作業を初めからやり直してください';
	$insObj->viewErrorMessage($msg);
}

//ここから各STEP毎に処理の実行
switch ($cmd)
{
	case 0:
		//STEP0
		//はじめに
		$insObj->setTemplate('index.tpl');
		break;
	case 1:
		//STEP1
		//アクセス権のチェック
		$insObj->setTemplate('step1.tpl');
		$insObj->step1();
		break;
	case 2://STEP2
		$insObj->setTemplate('step2.tpl');
		$insObj->step2();
		break;
	case 3://STEP3
		$insObj->setTemplate('step3.tpl');
		$insObj->step3();
		break;
	case 4://STEP4
		$insObj->setTemplate('step4.tpl');
		$insObj->step4();
		break;
	case 5://STEP5
		$insObj->setTemplate('step5.tpl');
		$insObj->step5();
		break;
	case 6://STEP6
		$insObj->setTemplate('step6.tpl');
		$insObj->step6();
		break;
	default:
}

//画面表示
$insObj->output();
?>