doError('msg_already_installed'); } // DB와 관련된 변수를 받음 $db_info = Context::gets('db_type','db_hostname','db_userid','db_password','db_database','db_table_prefix'); // DB의 타입과 정보를 등록 Context::setDBInfo($db_info); // DB Instance 생성 $oDB = &DB::getInstance(); // DB접속이 가능한지 체크 if(!$oDB->isConnected()) { return $this->doError('msg_dbconnect_failed'); } // 모든 모듈의 테이블 생성 $output = $this->makeTable(); if(!$output->toBool()) return $output; // 관리자 정보 입력 (member 모듈을 찾아서 method 실행) $oMember = getModule('member'); // 그룹을 입력 $group_args->title = Context::getLang('default_group_1'); $group_args->is_default = 'Y'; $oMember->insertGroup($group_args); $group_args->title = Context::getLang('default_group_2'); $group_args->is_default = 'N'; $oMember->insertGroup($group_args); // 금지 아이디 등록 $oMember->insertDeniedID('www',''); $oMember->insertDeniedID('root',''); $oMember->insertDeniedID('admin',''); $oMember->insertDeniedID('administrator',''); $oMember->insertDeniedID('telnet',''); $oMember->insertDeniedID('ftp',''); $oMember->insertDeniedID('http',''); // 관리자 정보 세팅 $admin_info = Context::gets('user_id','password','nick_name','user_name', 'email_address'); // 관리자 정보 입력 $oMember->insertAdmin($admin_info); // 로그인 처리시킴 $oMember->doLogin($admin_info->user_id, $admin_info->password); // 기본 모듈을 생성 $oModule = getModule('module_manager'); $oModule->makeDefaultModule(); // config 파일 생성 if(!$this->makeConfigFile()) return $this->doError('msg_install_failed'); // 설치 완료 메세지 출력 $this->setMessage('msg_install_completed'); } /** * @brief files 및 하위 디렉토리 생성 * DB 정보를 바탕으로 실제 install하기 전에 로컬 환경 설저d **/ function makeDefaultDirectory() { $directory_list = array( './files', './files/modules', './files/plugins', './files/addons', './files/layouts', './files/queries', './files/schemas', './files/js_filter_compiled', './files/template_compiled', './files/config', './files/attach', './files/attach/images', './files/attach/binaries', ); foreach($directory_list as $dir) { if(is_dir($dir)) continue; @mkdir($dir, 0707); @chmod($dir, 0707); } } /** * @brief DB Table 생성 * * 모든 module의 schemas 디렉토리를 확인하여 schema xml을 이용, 테이블 생성 **/ function makeTable() { // db instance생성 $oDB = &DB::getInstance(); // 각 모듈의 schemas/*.xml 파일을 모두 찾아서 table 생성 $module_list_1 = FileHandler::readDir('./modules/', NULL, false, true); $module_list_2 = FileHandler::readDir('./files/modules/', NULL, false, true); $module_list = array_merge($module_list_1, $module_list_2); foreach($module_list as $module_path) { $schema_dir = sprintf('%s/schemas/', $module_path); $schema_files = FileHandler::readDir($schema_dir, NULL, false, true); $file_cnt = count($schema_files); if(!$file_cnt) continue; for($i=0;$i<$file_cnt;$i++) { $file = trim($schema_files[$i]); if(!$file || substr($file,-4)!='.xml') continue; $output = $oDB->createTableByXmlFile($file); if($oDB->isError()) return $oDB->getError(); } } return new Output(); } /** * @brief config 파일을 생성 * 모든 설정이 이상없이 끝난 후에 config파일 생성 **/ function makeConfigFile() { $config_file = Context::getConfigFile(); if(file_exists($config_file)) return; $db_info = Context::getDbInfo(); if(!$db_info) return; $buff = ' $val) { $buff .= sprintf("\$db_info->%s = \"%s\";\n", $key, $val); } $buff .= "?>"; FileHandler::writeFile($config_file, $buff); if(@file_exists($config_file)) return true; return false; } } ?>