git-svn-id: http://xe-core.googlecode.com/svn/trunk@25 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-02-14 09:52:04 +00:00
parent 507b09a62e
commit c690cff0c8
17 changed files with 1216 additions and 1028 deletions

View file

@ -61,13 +61,6 @@
$this->context = &$GLOBALS['__Context__']; $this->context = &$GLOBALS['__Context__'];
$this->context->lang = &$GLOBALS['lang']; $this->context->lang = &$GLOBALS['lang'];
// 인증관련 데이터를 Context에 설정
$oMember = getModule('member');
if($oMember->isLogged()) {
$this->_set('is_logged', true);
$this->_set('logged_info', $_SESSION['logged_info']);
}
// 기본적인 DB정보 세팅 // 기본적인 DB정보 세팅
$this->_loadDBInfo(); $this->_loadDBInfo();
@ -82,6 +75,16 @@
$this->_setXmlRpcArgument(); $this->_setXmlRpcArgument();
$this->_setRequestArgument(); $this->_setRequestArgument();
$this->_setUploadedArgument(); $this->_setUploadedArgument();
// 인증관련 데이터를 Context에 설정
$oMember = getModule('member','model');
if($oMember->isLogged()) {
$this->_set('is_logged', true);
$this->_set('logged_info', $_SESSION['logged_info']);
} else {
$this->_set('is_logged', false);
$this->_set('logged_info', NULL);
}
} }
/** /**

View file

@ -35,12 +35,12 @@
**/ **/
function &getInstance($db_type = NULL) { function &getInstance($db_type = NULL) {
if(!$db_type) $db_type = Context::getDBType(); if(!$db_type) $db_type = Context::getDBType();
if(!$db_type) return new Output(-1, 'msg_db_not_setted'); if(!$db_type) return new Object(-1, 'msg_db_not_setted');
if(!$GLOBALS['__DB__']) { if(!$GLOBALS['__DB__']) {
$class_name = sprintf("DB%s%s", strtoupper(substr($db_type,0,1)), strtolower(substr($db_type,1))); $class_name = sprintf("DB%s%s", strtoupper(substr($db_type,0,1)), strtolower(substr($db_type,1)));
$class_file = sprintf("./classes/db/%s.class.php", $class_name); $class_file = sprintf("./classes/db/%s.class.php", $class_name);
if(!file_exists($class_file)) new Output(-1, 'msg_db_not_setted'); if(!file_exists($class_file)) new Object(-1, 'msg_db_not_setted');
require_once($class_file); require_once($class_file);
$eval_str = sprintf('$GLOBALS[\'__DB__\'] = new %s();', $class_name); $eval_str = sprintf('$GLOBALS[\'__DB__\'] = new %s();', $class_name);
@ -103,10 +103,10 @@
} }
/** /**
* @brief 에러결과를 Output 객체로 return * @brief 에러결과를 Object 객체로 return
**/ **/
function getError() { function getError() {
return new Output($this->errno, $this->errstr); return new Object($this->errno, $this->errstr);
} }
/** /**
@ -116,15 +116,15 @@
* query_id에 해당하는 xml문(or 캐싱파일) 찾아서 컴파일 실행 * query_id에 해당하는 xml문(or 캐싱파일) 찾아서 컴파일 실행
**/ **/
function executeQuery($query_id, $args = NULL) { function executeQuery($query_id, $args = NULL) {
if(!$query_id) return new Output(-1, 'msg_invalid_queryid'); if(!$query_id) return new Object(-1, 'msg_invalid_queryid');
list($module, $id) = explode('.',$query_id); list($module, $id) = explode('.',$query_id);
if(!$module||!$id) return new Output(-1, 'msg_invalid_queryid'); if(!$module||!$id) return new Object(-1, 'msg_invalid_queryid');
$xml_file = sprintf('./modules/%s/queries/%s.xml', $module, $id); $xml_file = sprintf('./modules/%s/queries/%s.xml', $module, $id);
if(!file_exists($xml_file)) { if(!file_exists($xml_file)) {
$xml_file = sprintf('./files/modules/%s/queries/%s.xml', $module, $id); $xml_file = sprintf('./files/modules/%s/queries/%s.xml', $module, $id);
if(!file_exists($xml_file)) return new Output(-1, 'msg_invalid_queryid'); if(!file_exists($xml_file)) return new Object(-1, 'msg_invalid_queryid');
} }
// 일단 cache 파일을 찾아본다 // 일단 cache 파일을 찾아본다
@ -147,14 +147,14 @@
function _executeQuery($cache_file, $source_args, $query_id) { function _executeQuery($cache_file, $source_args, $query_id) {
global $lang; global $lang;
if(!file_exists($cache_file)) return new Output(-1, 'msg_invalid_queryid'); if(!file_exists($cache_file)) return new Object(-1, 'msg_invalid_queryid');
if(__DEBUG__) $query_start = getMicroTime(); if(__DEBUG__) $query_start = getMicroTime();
if($source_args) $args = clone($source_args); if($source_args) $args = clone($source_args);
$output = include($cache_file); $output = include($cache_file);
if( (is_a($output, 'Output')||is_subclass_of($output,'Output'))&&!$output->toBool()) return $output; if( (is_a($output, 'Object')||is_subclass_of($output,'Object'))&&!$output->toBool()) return $output;
// action값에 따라서 쿼리 생성으로 돌입 // action값에 따라서 쿼리 생성으로 돌입
switch($action) { switch($action) {
@ -179,9 +179,9 @@
$GLOBALS['__db_queries__'] .= sprintf("\t%02d. %s (%0.4f sec)\n\t %s\n", ++$GLOBALS['__dbcnt'], $query_id, $elapsed_time, $this->query); $GLOBALS['__db_queries__'] .= sprintf("\t%02d. %s (%0.4f sec)\n\t %s\n", ++$GLOBALS['__dbcnt'], $query_id, $elapsed_time, $this->query);
} }
if($this->errno!=0) return new Output($this->errno, $this->errstr); if($this->errno!=0) return new Object($this->errno, $this->errstr);
if(is_a($output, 'Output') || is_subclass_of($output, 'Output')) return $output; if(is_a($output, 'Object') || is_subclass_of($output, 'Object')) return $output;
return new Output(); return new Object();
} }
/** /**
@ -191,33 +191,33 @@
global $lang; global $lang;
$length = strlen($val); $length = strlen($val);
if($minlength && $length < $minlength) return new Output(-1, sprintf($lang->filter->outofrange, $lang->{$key}?$lang->{$key}:$key)); if($minlength && $length < $minlength) return new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key}?$lang->{$key}:$key));
if($maxlength && $length > $maxlength) return new Output(-1, sprintf($lang->filter->outofrange, $lang->{$key}?$lang->{$key}:$key)); if($maxlength && $length > $maxlength) return new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key}?$lang->{$key}:$key));
switch($filter_type) { switch($filter_type) {
case 'email' : case 'email' :
case 'email_adderss' : case 'email_adderss' :
if(!eregi('^[_0-9a-z-]+(\.[_0-9a-z-]+)*@[0-9a-z-]+(\.[0-9a-z-]+)*$', $val)) return new Output(-1, sprintf($lang->filter->invalid_email, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^[_0-9a-z-]+(\.[_0-9a-z-]+)*@[0-9a-z-]+(\.[0-9a-z-]+)*$', $val)) return new Object(-1, sprintf($lang->filter->invalid_email, $lang->{$key}?$lang->{$key}:$key));
break; break;
case 'homepage' : case 'homepage' :
if(!eregi('^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$', $val)) return new Output(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key}?$lang->{$key}:$key));
break; break;
case 'userid' : case 'userid' :
case 'user_id' : case 'user_id' :
if(!eregi('^[a-zA-Z]+([_0-9a-zA-Z]+)*$', $val)) return new Output(-1, sprintf($lang->filter->invalid_userid, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^[a-zA-Z]+([_0-9a-zA-Z]+)*$', $val)) return new Object(-1, sprintf($lang->filter->invalid_userid, $lang->{$key}?$lang->{$key}:$key));
break; break;
case 'number' : case 'number' :
if(!eregi('^[0-9]+$', $val)) return new Output(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^[0-9]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key));
break; break;
case 'alpha' : case 'alpha' :
if(!eregi('^[a-z]+$', $val)) return new Output(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^[a-z]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key}?$lang->{$key}:$key));
break; break;
case 'alpha_number' : case 'alpha_number' :
if(!eregi('^[0-9a-z]+$', $val)) return new Output(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key}?$lang->{$key}:$key)); if(!eregi('^[0-9a-z]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key}?$lang->{$key}:$key));
break; break;
} }
return new Output(); return new Object();
} }
/** /**

View file

@ -355,7 +355,7 @@
if($this->errno!=0) return; if($this->errno!=0) return;
$data = $this->_fetch($result); $data = $this->_fetch($result);
$buff = new Output(); $buff = new Object();
$buff->data = $data; $buff->data = $data;
return $buff; return $buff;
} }
@ -394,7 +394,7 @@
$data[$virtual_no--] = $tmp; $data[$virtual_no--] = $tmp;
} }
$buff = new Output(); $buff = new Object();
$buff->total_count = $total_count; $buff->total_count = $total_count;
$buff->total_page = $total_page; $buff->total_page = $total_page;
$buff->page = $page; $buff->page = $page;

View file

@ -32,7 +32,7 @@
require_once("./classes/template/TemplateHandler.class.php"); require_once("./classes/template/TemplateHandler.class.php");
$oTemplate = new TemplateHandler(); $oTemplate = new TemplateHandler();
$output = $oTemplate->compile($oModule->layout_path, $oModule->layout_tpl); $output = $oTemplate->compile($oModule->layout_path, $oModule->layout_file);
} else { } else {
$output = $content; $output = $content;
} }

View file

@ -2,55 +2,52 @@
/** /**
* @class Module * @class Module
* @author zero (zero@nzeo.com) * @author zero (zero@nzeo.com)
* @brief modules abstract class * @brief moduleabstract class
**/ **/
class Module extends Output { class Module extends Object {
var $module_path = NULL; ///< 현재 모듈의 실행 위치
var $skin = 'default'; ///< skin 설정 (없을 경우도 있음)
var $mid = NULL; ///< module로 생성한 instance(관리상)의 값
var $module = NULL; ///< mid로 찾아서 생성한 모듈 class 이름
var $module_srl = NULL; ///< 모듈 객체의 고유값인 module_srl var $module_srl = NULL; ///< 모듈 객체의 고유값인 module_srl
var $module_info = NULL; ///< 현재 모듈 생성시 주어진 설정 정보들 var $module_info = NULL; ///< 모듈의 정보
var $module_path = NULL; ///< 모듈 class file의 실행 위치
var $act = NULL; ///< act 값 var $act = NULL; ///< act 값
var $act_type = 'disp'; ///< act_type (disp, proc, lib, admin 4가지 존재, act에서 type을 찾음)
var $layout_path = "./common/tpl/"; ///< 레이아웃 파일의 path var $template_path = NULL; ///< template 경로
var $layout_tpl = "default_layout"; ///< 레이아웃 파일 var $template_file = NULL; ///< template 파일
var $layout_path = './common/tpl/'; ///< 레이아웃 경로
var $layout_file = 'default_layout.html'; ///< 레이아웃 파일
/**
* @brief 현재 모듈의 path를 지정
**/
function setModulePath($path) {
if(substr($path,-1)!='/') $path.='/';
$this->module_path = $path;
}
/** /**
* @brief 모듈의 정보 세팅 * @brief 모듈의 정보 세팅
**/ **/
function moduleInit($module_info) { function setModuleInfo($module_info) {
// 브라우저 타이틀 지정
Context::setBrowserTitle($module_info->browser_title?$module_info->browser_title:$module_info->mid);
// 기본 변수 설정 // 기본 변수 설정
$this->module_info = $module_info; $this->mid = $module_info->mid;
context::set('module_info', &$this->module_info); $this->module = $module_info->module;
$this->module_srl = $module_info->module_srl; $this->module_srl = $module_info->module_srl;
$this->module_info = $module_info;
// skin 설정 (기본으로는 default) // 웹서비스에서 꼭 필요한 인증 정보와 권한 설정 체크
if($this->module_info->skin) $this->skin = $this->module_info->skin; $is_logged = Context::get('is_logged');
else $this->skin = 'default'; $logged_info = Context::get('logged_info');
$user_id = $logged_info->user_id;
// 템플릿 위치 설정
if(!$this->template_path) {
$template_path = $this->module_path.'skins/'.$this->skin;
$this->setTemplatePath($template_path);
}
$oMember = getModule('member');
$user_id = $oMember->getUserID();
$logged_info = $oMember->getLoggedInfo();
$user_group = $logged_info->group_list; $user_group = $logged_info->group_list;
$user_group_count = count($user_group);
// 로그인되어 있다면 admin 체크 // 로그인되어 있다면 admin 체크
if($oMember->isLogged() && ($logged_info->is_admin == 'Y' || in_array($user_id, $this->module_info->admin_id) )) { if($is_logged && ($logged_info->is_admin == 'Y' || in_array($user_id, $this->module_info->admin_id) )) {
$grant->is_admin = true; $grant->is_admin = true;
} else { } else {
$grant->is_admin = false; $grant->is_admin = false;
@ -58,7 +55,6 @@
// 권한 설정 // 권한 설정
if($this->grant_list) { if($this->grant_list) {
foreach($this->grant_list as $grant_name) { foreach($this->grant_list as $grant_name) {
$grant->{$grant_name} = false; $grant->{$grant_name} = false;
@ -67,7 +63,7 @@
continue; continue;
} }
if($user_group_count) { if(count($user_group)) {
foreach($user_group as $group_srl) { foreach($user_group as $group_srl) {
if(in_array($group_srl, $this->module_info->grant[$grant_name])) { if(in_array($group_srl, $this->module_info->grant[$grant_name])) {
$grant->{$grant_name} = true; $grant->{$grant_name} = true;
@ -87,49 +83,34 @@
} }
/** /**
* @brief 현재 모듈에 $act에 해당하는 method가 있는지 체크 * @brief template 파일 지정
**/ **/
function isExistsAct($act) { function setTemplateFile($filename) {
return method_exists($this, $act); if(substr($filename,-5)!='.html') $filename .= '.html';
$this->template_file = $filename;
} }
/** /**
* @brief 현재 acT_type의 return (disp/proc) * @brief template 파일 return
**/ **/
function getActType() { function getTemplateFile() {
return $this->act_type; return $this->template_file;
} }
/** /**
* @brief 현재 모듈의 path를 지정 * @brief template 경로 지정
**/ **/
function setModulePath($path) { function setTemplatePath($path) {
if(substr($path,-1)!='/') $path.='/'; if(substr($path,-1)!='/') $path .= '/';
$this->module_path = $path; if(substr($path,0,2)!='./') $path = './'.$path;
$this->template_path = $path;
} }
/** /**
* @brief 에러 유발. 에러시 message module을 바로 호출하고 현재 모듈은 exit * @brief template 경로 return
**/ **/
function doError($msg_code) { function getTemplatePath() {
$this->setError(-1); return $this->template_path;
if(!Context::getLang($msg_code)) $this->setMessage($msg_code);
else $this->setMessage(Context::getLang($msg_code));
return false;
}
/**
* @brief 레이아웃 경로를 지정
**/
function setLayoutPath($path) {
$this->layout_path = $path;
}
/**
* @brief 레이아웃 tpl 파일을 지정
**/
function setLayoutTpl($tpl) {
$this->layout_tpl = $tpl;
} }
/** /**
@ -143,38 +124,19 @@
if($act) $this->act = $act; if($act) $this->act = $act;
else $this->act = Context::get('act'); else $this->act = Context::get('act');
// act의 종류가 disp/proc인지에 대한 확인
if($this->act&&strtolower(substr($this->act,0,4)) != 'disp') $this->act_type = 'proc';
// act값이 없거나 존재하지 않는 method를 호출시에 default_act를 지정 // act값이 없거나 존재하지 않는 method를 호출시에 default_act를 지정
if(!$this->act || !$this->isExistsAct($this->act)) $this->act = $this->default_act; if(!$this->act || !method_exists($this, $this->act)) $this->act = $this->default_act;
// module의 *init 호출 (기본 init과 proc/disp init 2가지 있음)
if($this->act_type == 'proc') {
$output = $this->procInit();
if((is_a($output, 'Output') || is_subclass_of($output, 'Output')) && !$output->toBool() ) {
$this->setError($output->getError());
$this->setMessage($output->getMessage());
return;
} elseif(!$output) {
$this->setError(-1);
$this->setMessage('fail');
return;
}
} else $this->dispInit();
// 기본 act조차 없으면 return // 기본 act조차 없으면 return
if(!$this->isExistsAct($this->act)) return false; if(!method_exists($this, $this->act)) return false;
// act값으로 method 실행 // act값으로 method 실행
$output = call_user_method($this->act, $this); $output = call_user_method($this->act, $this);
if(is_a($output, 'Output') || is_subclass_of($output, 'Output')) { if(is_a($output, 'Object') || is_subclass_of($output, 'Object')) {
$this->setError($output->getError()); $this->setError($output->getError());
$this->setMessage($output->getMessage()); $this->setMessage($output->getMessage());
} }
return true;
} }
} }
?> ?>

View file

@ -3,80 +3,175 @@
* @class ModuleHandler * @class ModuleHandler
* @author zero (zero@nzeo.com) * @author zero (zero@nzeo.com)
* @brief mid의 값으로 모듈을 찾아 객체 생성 & 모듈 정보 세팅 * @brief mid의 값으로 모듈을 찾아 객체 생성 & 모듈 정보 세팅
*
* ModuleHandler는 RequestArgument중 $mid 값을 이용하여\n
* 모듈을 찾아서 객체를 생성한다.\n
* act 값을 이용하여 actType(view, controller) 판단하여\n
* 객체를 생성해야 한다.\n
* 그리고 $mid값을 이용 해당 모듈의 config를 읽어와 생성된\n
* 모듈 객체에 전달하고 실행까지 진행을 한다.
**/ **/
class ModuleHandler { class ModuleHandler {
var $mid = NULL; ///< module로 생성한 instance(관리상)의 값 var $oModule = NULL; ///< 모듈 객체
var $module_info = NULL; ///< 해당 모듈의 정보
var $module = NULL; ///< mid로 찾아서 생성한 모듈 class 이름
var $oModule = NULL; ///< mid로 찾아서 생성한 모듈의 객체
/** /**
* @brief constructor * @brief constructor
*
* Request Argument에서 $mid, $act값으로 객체를 찾는다.\n
* 유연한 처리를 위해 $document_srl 이용하기도 한다.
**/ **/
function ModuleHandler() { function ModuleHandler($module = NULL, $act_type = NULL) {
// 설치가 안되어 있다면 설치를 위한 준비 // 설치가 안되어 있다면 설치를 위한 준비를 한다
if(!Context::isInstalled()) return $this->_prepareInstall(); if(!Context::isInstalled()) {
// install 모듈로 강제 지정
$module = 'install';
$mid = NULL;
// 설치가 되어 있다면 요청받은 mid에 해당하는 모듈 instance 생성 // Request Argument의 mid값으로 모듈 객체 생성
// mid가 없이 document_srl만 있다면 document_srl로 mid를 찾음 // mid가 없이 document_srl만 있다면 document_srl로 mid를 찾음
$mid = Context::get('mid'); } elseif(!$module) {
$document_srl = Context::get('document_srl'); $mid = Context::get('mid');
$document_srl = Context::get('document_srl');
// document_srl만 있다면 mid를 구해옴 // document_srl만 있다면 mid를 구해옴
if(!$mid && $document_srl) { if(!$mid && $document_srl) $module_info = $this->getModuleInfoByDocumentSrl($document_srl);
$module_info = module_manager::getModuleInfoByDocument($document_srl);
if($module_info) $mid = $module_info->mid; // mid 값에 대한 모듈 정보를 추출
if(!$module_info) $module_info = $this->getModuleInfoByMid($mid);
// 모듈 정보에서 module 이름을 구해움
$module = $module_info->module;
} }
// mid 값에 대한 모듈 정보를 추출 // 만약 모듈이 없다면 잘못된 모듈 호출에 대한 오류를 message 모듈을 통해 호출
if(!$module_info) $module_info = module_manager::getModuleInfo($mid); if(!$module) {
$module = 'message';
$act_type = 'view';
Context::set('message', Context::getLang('msg_mid_not_exists'));
}
// 모듈 정보에서 module 이름을 구해움 // actType을 정함 (없으면 view를 기본 actType으로 정의)
$module = $module_info->module; if(!$act_type) {
$act = Context::get('act');
if(!$act) $act_type = 'view';
else {
$act_type = substr($act, 0, 4);
if(!$act_type or !in_array(strtolower($act_type), array('view','model','controller'))) $act_type = 'view';
}
}
$this->mid = $module_info->mid; // module_info가 없으면 기본적인 값들로 작성
$this->module_info = $module_info; if(!$module_info) {
$module_info->module = $module;
$module_info->module_srl = 0;
}
Context::set('module', $module); // 모듈 객체 생성
Context::set('mid', $this->mid, true); $this->oModule = &$this->getModuleInstance($module, $act_type, $module_info);
Context::set('module_srl', $this->module_info->module_srl, true);
// 만약 모듈이 없다면 오류 출력
if(!$module) return $this->_moduleIsNotExists();
$this->oModule = getModule($module);
$this->module = $module;
} }
/** /**
* @brief 설치를 하기 위해서 mid, module등을 강제 지정 * @brief document_srl로 모듈의 정보르 구함
**/ **/
function _prepareInstall() { function getModuleInfoByDocumentSrl($document_srl) {
// module로 install 모듈을 지정 // DB 객체 생성후 데이터를 DB에서 가져옴
$this->module = 'install'; $oDB = &DB::getInstance();
Context::set('mid', NULL); $args->document_srl = $document_srl;
Context::set('module', $this->module); $output = $oDB->executeQuery('module_manager.getModuleInfoByDocument', $args);
// module_manager 호출 // extra_vars의 정리
$this->oModule = getModule($this->module); $module_info = module_manager::extractExtraVar($output->data);
return $module_info;
} }
/** /**
* @brief 아무런 설정이 되어 있지 않다면 오류 표시 * @brief mid로 모듈의 정보를 구함
**/ **/
function _moduleIsNotExists() { function getModuleInfo($mid='') {
$this->module = 'message'; // DB 객체 생성후 데이터를 DB에서 가져옴
Context::set('mid', NULL); $oDB = &DB::getInstance();
Context::set('module', $this->module);
$this->oModule = getModule($this->module); // $mid값이 인자로 주어질 경우 $mid로 모듈의 정보를 구함
if($mid) {
$args->mid = $mid;
$output = $oDB->executeQuery('module_manager.getMidInfo', $args);
}
Context::set('error', -1); // 모듈의 정보가 없다면($mid가 잘못이거나 없었을 경우) 기본 모듈을 가져옴
Context::set('message', Context::getLang('msg_mid_not_exists')); if(!$output->data) {
$output = $oDB->executeQuery('module_manager.getDefaultMidInfo');
}
// extra_vars의 정리
$module_info = module_manager::extractExtraVar($output->data);
return $module_info;
}
/**
* @brief 모듈 객체를 생성함
**/
function getModuleInstance($module, $type = 'view', $module_info = NULL) {
// 요청받은 모듈이 있는지 확인
$module = strtolower($module);
if(!$module) return;
// global 변수에 미리 생성해 둔 객체가 없으면 새로 생성
if(!$GLOBALS['_loaded_module'][$module][$type]) {
/**
* 모듈의 위치를 파악
* 기본적으로는 ./modules/* 있지만 웹업데이트나 웹설치시 ./files/modules/* 있음
* ./files/modules/* 클래스 파일을 우선으로 처리해야
**/
$class_path = sprintf('./files/modules/%s/', $module);
if(!is_dir($class_path)) $class_path = sprintf('./modules/%s/', $module);
if(!is_dir($class_path)) return NULL;
// 객체의 이름을 구함
switch($type) {
case 'controller' :
$instance_name = sprintf("%s%s",$module,"Controller");
$class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
break;
case 'model' :
$instance_name = sprintf("%s%s",$module,"Model");
$class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
break;
default :
$type = 'view';
$instance_name = sprintf("%s%s",$module,"View");
$class_file = sprintf('%s%s.view.php', $class_path, $module, $type);
break;
}
// 클래스 파일의 이름을 구함
if(!file_exists($class_file)) return NULL;
// eval로 객체 생성
require_once($class_file);
$eval_str = sprintf('$oModule = new %s();', $instance_name);
@eval($eval_str);
if(!is_object($oModule)) return NULL;
// 생성된 객체에 자신이 호출된 위치를 세팅해줌
$oModule->setModulePath($class_path);
// 모듈 정보 세팅
$oModule->setModuleInfo($module_info);
// 해당 위치에 속한 lang 파일을 읽음
Context::loadLang($class_path.'lang');
// GLOBALS 변수에 생성된 객체 저장
$GLOBALS['_loaded_module'][$module][$type] = $oModule;
}
// 객체 리턴
return $GLOBALS['_loaded_module'][$module][$type];
} }
/** /**
@ -85,8 +180,10 @@
* 모듈을 실행후에 모듈 객체를 return하여 DisplayHandler로 넘겨줌 * 모듈을 실행후에 모듈 객체를 return하여 DisplayHandler로 넘겨줌
**/ **/
function proc() { function proc() {
$this->oModule->moduleInit($this->module_info); if(!is_object($this->oModule)) return;
$this->oModule->proc(); $this->oModule->proc();
return $this->oModule; return $this->oModule;
} }
} }

View file

@ -1,21 +1,14 @@
<?php <?php
/** /**
* @class Output * @class Object
* @author zero (zero@nzeo.com) * @author zero (zero@nzeo.com)
* @brief 결과 데이터를 담당하는 class * @brief 모듈간의 데이터를 주고 받기 위한 클래스
* *
* 모듈이나 DB등의 모든 행위의 결과를 담당.\n * Model, Controller, View로 이루어지는 모듈은\n
* 에러 코드를 보관하고 기타 추가 정보가 있을 시에 add/get을 통해\n * Object class를 상속받는다.
* parameter를 넘길때도 사용....\n
*
* @todo 설명이 .. 좋음.. 수정 요망!
* @todo result 객체로 사용하면 되는데 왠지 구조적으로 다듬어졌음. 차후 다듬어야
**/ **/
class Output { class Object {
var $template_path = NULL; ///< template path 지정
var $template_file = NULL; ///< template 파일 지정
var $error = 0; ///< 에러 코드 (0이면 에러 아님) var $error = 0; ///< 에러 코드 (0이면 에러 아님)
var $message = 'success'; ///< 에러 메세지 (success이면 에러 아님) var $message = 'success'; ///< 에러 메세지 (success이면 에러 아님)
@ -25,7 +18,7 @@
/** /**
* @brief constructor * @brief constructor
**/ **/
function Output($error = 0, $message = 'success') { function Object($error = 0, $message = 'success') {
$this->error = $error; $this->error = $error;
$this->message = $message; $this->message = $message;
} }
@ -95,33 +88,5 @@
return $this->toBool(); return $this->toBool();
} }
/**
* @brief tpl 경로을 지정
**/
function setTemplatePath($path) {
if(!substr($path,-1)!='/') $path .= '/';
$this->template_path = $path;
}
/**
* @brief tpl 경로를 return
**/
function getTemplatePath() {
return $this->template_path;
}
/**
* @brief tpl 파일을 지정
**/
function setTemplateFile($filename) {
$this->template_file = $filename;
}
/**
* @brief tpl 파일을 지정
**/
function getTemplateFile() {
return $this->template_file;
}
} }
?> ?>

View file

@ -155,7 +155,7 @@
function _getNotNullCode($name, $var='column') { function _getNotNullCode($name, $var='column') {
return return
sprintf( sprintf(
'if(!$%s->%s) return new Output(-1, sprintf($lang->filter->isnull, $lang->%s?$lang->%s:\'%s\'));'."\n", 'if(!$%s->%s) return new Object(-1, sprintf($lang->filter->isnull, $lang->%s?$lang->%s:\'%s\'));'."\n",
$var, $var,
$name, $name,
$name, $name,

View file

@ -37,11 +37,10 @@
require_once("./classes/context/Context.class.php"); require_once("./classes/context/Context.class.php");
require_once("./classes/db/DB.class.php"); require_once("./classes/db/DB.class.php");
require_once("./classes/file/FileHandler.class.php"); require_once("./classes/file/FileHandler.class.php");
require_once("./classes/output/Output.class.php"); require_once("./classes/object/Object.class.php");
require_once("./classes/module/Module.class.php"); require_once("./classes/module/Module.class.php");
require_once("./classes/display/DisplayHandler.class.php");
require_once("./classes/module/ModuleHandler.class.php"); require_once("./classes/module/ModuleHandler.class.php");
require_once('./modules/module_manager/module_manager.module.php'); require_once("./classes/display/DisplayHandler.class.php");
//require_once("./classes/addon/AddOnHandler.class.php"); //require_once("./classes/addon/AddOnHandler.class.php");
//require_once("./classes/layout/LayoutHandler.class.php"); //require_once("./classes/layout/LayoutHandler.class.php");
if(__DEBUG__) define('__RequireClassEndTime__', getMicroTime()); if(__DEBUG__) define('__RequireClassEndTime__', getMicroTime());

View file

@ -17,13 +17,13 @@
} }
/** /**
* @brief module_manager::getModuleObject($module_name, $act_type) 쓰기 쉽게 함수로 선언 * @brief ModuleHandler::getModuleObject($module_name, $act_type) 쓰기 쉽게 함수로 선언
* @param module_name 모듈이름 * @param module_name 모듈이름
* @param act_type disp, proc, lib(기본), admin * @param act_type disp, proc, lib(기본), admin
* @return module instance * @return module instance
**/ **/
function getModule($module_name, $act_type = 'lib') { function getModule($module_name, $act_type = 'view') {
return module_manager::getModuleObject($module_name, $act_type); return ModuleHandler::getModuleInstance($module_name, $act_type);
} }

View file

@ -31,18 +31,29 @@
/** /**
* @brief ModuleHandler 객체를 생성 * @brief ModuleHandler 객체를 생성
*
* 모듈 핸들러는 Request Argument를 바탕으로 모듈을 찾아서\n
* 객체를 생성하고 기본 정보를 setting 해줌\n
* ModuleHandler는 외에도 설치가 되어 있는지에 대한 체크를\n
* 하여 미설치시 Install 모듈을 실행하도록 한다\n
**/ **/
$oModuleHandler = new ModuleHandler(); $oModuleHandler = new ModuleHandler();
/** /**
* @brief ModuleHandler 객체를 실행하여 요청받은 모듈 객체를\n * @brief ModuleHandler에서 모듈 객체를 받는다
* 찾고 모듈 정보를 세팅하는 등의 역할을 한후 모듈 객체를\n *
* return받음 * ModuleHandler는 찾아진 모듈 객체를 이용하여 주어진 act에 해당하는\n
* method를 찾아서 실행을 모두 시킨후에 모듈 객체를 return 한다.\n
* 모듈 객체는 DisplayHandler에 의해 content 출력시 사용된다.
**/ **/
$oModule = $oModuleHandler->proc(); $oModule = &$oModuleHandler->proc();
/** /**
* @brief DisplayHandler 객체를 생성하여 모듈의 처리 결과를 출력 * @brief DisplayHandler 객체를 생성하여 모듈의 처리 결과를 출력
*
* ModuleHandler에 의해 주어진 모듈 객체는 Object 클래스의 상속을 받으므로\n
* RequestMethod의 종류(GET/POST/XML) 따라 적절한 헤더 정보를 발송하고\n
* XML 데이터 혹은 HTML 데이터를 출력한다
**/ **/
$oDisplayHandler = new DisplayHandler(); $oDisplayHandler = new DisplayHandler();
$oDisplayHandler->printContent($oModule); $oDisplayHandler->printContent($oModule);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,208 @@
<?php
/**
* @class installController
* @author zero (zero@nzeo.com)
* @desc 기본 모듈중의 하나인 install module의 Controller
**/
class installController extends Module {
/**
* @brief 초기화
*
* 설치가능한지에 대한 체크
**/
function init() {
}
/**
* $brief 인스톨 환경을 체크하여 결과 return
**/
function checkInstallEnv() {
// 각 필요한 항목 체크
$checklist = array();
// 1. permission 체크
if(is_writable('./')||is_writable('./files')) $checklist['permission'] = true;
else $checklist['permission'] = false;
// 2. xml_parser_create함수 유무 체크
if(function_exists('xml_parser_create')) $checklist['xml'] = true;
else $checklist['xml'] = false;
// 3. ini_get(session.auto_start)==1 체크
if(ini_get(session.auto_start)!=1) $checklist['session'] = true;
else $checklist['session'] = false;
// 4. iconv 체크
if(function_exists('iconv')) $checklist['iconv'] = true;
else $checklist['iconv'] = false;
// 5. gd 체크 (imagecreatefromgif함수)
if(function_exists('imagecreatefromgif')) $checklist['gd'] = true;
else $checklist['gd'] = false;
// 6. mysql_get_client_info() 체크
if(mysql_get_client_info() < "4.1.00") $checklist['mysql'] = false;
else $checklist['mysql'] = true;
if(!$checklist['permission'] || !$checklist['xml'] || !$checklist['session']) $install_enable = false;
else $install_enable = true;
// 체크 결과를 Context에 저장
Context::set('checklist', $checklist);
return $install_enable;
}
/**
* @brief 설치 시도
**/
function procInstall() {
// 설치가 되어 있는지에 대한 체크
if(Context::isInstalled()) {
return $this->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 = '<?php if(!__ZB5__) exit();'."\n";
foreach($db_info as $key => $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;
}
}
?>

View file

@ -1,265 +0,0 @@
<?php
/**
* @file : modules/install/install.module.php
* @author : zero <zero@nzeo.com>
* @desc : 기본 모듈중의 하나인 install module
* Module class에서 상속을 받아서 사용
* action 경우 disp/proc 2가지만 존재하며 이는 action명세서에
* 미리 기록을 하여야
**/
class install extends Module {
/**
* 모듈의 정보
**/
var $cur_version = "20070130_0.01";
/**
* 기본 action 지정
* $act값이 없거나 잘못된 값이 들어올 경우 $default_act 값으로 진행
**/
var $default_act = 'dispIntroduce';
/**
* 현재 모듈의 초기화를 위한 작업을 지정해 놓은 method
* css/js파일의 load라든지 lang파일 load등을 미리 선언
*
* Init() => 공통
* dispInit() => disp시에
* procInit() => proc시에
*
* $this->module_path는 현재 모듈파일의 위치를 나타낸다
* (ex: $this->module_path = "./modules/install/";
**/
// 초기화
function init() {/*{{{*/
Context::loadLang($this->module_path.'lang');
// 설치시 필수항목 검사
$this->checkInstallEnv();
if(Context::get('install_enable')) $this->makeDefaultDirectory();
}/*}}}*/
// disp 초기화
function dispInit() {/*{{{*/
// 설치가 가능하면 기본 디렉토리등을 만듬
if(!Context::get('install_enable')) {
$this->act = 'dispIntroduce';
}
return true;
}/*}}}*/
// proc 초기화
function procInit() {/*{{{*/
// 설치가 불가능한 환경인데 요청이 오면 에러 표시
if(!Context::get('install_enable')) return $this->doError('msg_already_installed');
return true;
}/*}}}*/
/**
* 여기서부터는 action의 구현
* request parameter의 경우 method의 첫번째 인자로 넘어온다
*
* dispXXXX : 출력을 위한 method, output에 tpl file이 지정되어야 한다
* procXXXX : 처리를 위한 method, output에는 error, message가 지정되어야 한다
*
* 변수의 사용은 Context::get('이름')으로 얻어오면 된다
**/
function dispIntroduce() {/*{{{*/
// disp_license.html 파일 출력
$this->setTemplateFile('disp_license');
}/*}}}*/
function dispDBInfoForm() {/*{{{*/
// db_type이 지정되지 않았다면 다시 초기화면 출력
if(!Context::get('db_type')) return $this->dispIntroduce();
// disp_db_info_form.html 파일 출력
$tpl_filename = sprintf('db_form.%s.html', Context::get('db_type'));
$this->setTemplateFile($tpl_filename);
}/*}}}*/
function procInstall() {/*{{{*/
// 설치가 되어 있는지에 대한 체크
if(Context::isInstalled()) {
return $this->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');
}/*}}}*/
/**
* 여기부터는 모듈과 관련된 라이브러리 개념의 method들
**/
// public void checkInstallEnv()/*{{{*/
// 기본적으로 필수적인 체크항목들을 검사하여 Context에 바로 넣어버림..
function checkInstallEnv() {
// 각 필요한 항목 체크
$checklist = array();
// 1. permission 체크
if(is_writable('./')||is_writable('./files')) $checklist['permission'] = true;
else $checklist['permission'] = false;
// 2. xml_parser_create함수 유무 체크
if(function_exists('xml_parser_create')) $checklist['xml'] = true;
else $checklist['xml'] = false;
// 3. ini_get(session.auto_start)==1 체크
if(ini_get(session.auto_start)!=1) $checklist['session'] = true;
else $checklist['session'] = false;
// 4. iconv 체크
if(function_exists('iconv')) $checklist['iconv'] = true;
else $checklist['iconv'] = false;
// 5. gd 체크 (imagecreatefromgif함수)
if(function_exists('imagecreatefromgif')) $checklist['gd'] = true;
else $checklist['gd'] = false;
// 6. mysql_get_client_info() 체크
if(mysql_get_client_info() < "4.1.00") $checklist['mysql'] = false;
else $checklist['mysql'] = true;
if(!$checklist['permission'] || !$checklist['xml'] || !$checklist['session']) $install_enable = false;
else $install_enable = true;
// 체크 결과를 Context에 저장
Context::set('install_enable', $install_enable);
Context::set('checklist', $checklist);
}/*}}}*/
// public void makeDefaultDirectory()/*{{{*/
// files 및 하위 디렉토리 생성
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);
}
}/*}}}*/
// public void makeTable()/*{{{*/
// 모든 모듈의 테이블 생성 schema를 찾아서 생성
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();
}/*}}}*/
// public boolean makeConfigFile() /*{{{*/
// config 파일을 생성
function makeConfigFile() {
$config_file = Context::getConfigFile();
if(file_exists($config_file)) return;
$db_info = Context::getDbInfo();
if(!$db_info) return;
$buff = '<?php if(!__ZB5__) exit();'."\n";
foreach($db_info as $key => $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;
}/*}}}*/
}
?>

View file

@ -0,0 +1,51 @@
<?php
/**
* @file installView
* @author zero (zero@nzeo.com)
* @brief 기본 모듈중의 하나인 install module의 View
**/
class installView extends Module {
var $default_act = 'viewIntroduce'; ///< 별도의 act가 없으면 기본으로 사용될 act
var $install_enable = false; ///< 설치 가능한지에 대한 flag
/**
* @brief 초기화
**/
function init() {
// template 경로를 지정
$this->setTemplatePath($this->module_path."skins/default");
// 컨트롤러 생성
$oController = getModule('install','controller');
// 설치 불가능하다면 introduce를 출력
if(!$oController->checkInstallEnv()) $this->act = $this->default_act;
// 설치 가능한 환경이라면 installController::makeDefaultDirectory() 실행
else $oController->makeDefaultDirectory();
}
/**
* @brief license 설치 환경에 대한 메세지 보여줌
**/
function viewIntroduce() {
$this->setTemplateFile('disp_license');
}
/**
* @brief DB 정보 입력 화면을 보여줌
**/
function viewDBInfoForm() {
// db_type이 지정되지 않았다면 다시 초기화면 출력
if(!Context::get('db_type')) return $this->viewIntroduce();
// disp_db_info_form.html 파일 출력
$tpl_filename = sprintf('db_form.%s', Context::get('db_type'));
$this->setTemplateFile($tpl_filename);
}
}
?>

View file

@ -0,0 +1,188 @@
<?php
/**
* @class memberModel
* @author zero (zero@nzeo.com)
* @desc 기본 모듈중의 하나인 member module의 Model
**/
class memberModel extends Module {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 로그인 되어 있는지에 대한 체크
**/
function isLogged() {
if($_SESSION['is_logged']&&$_SESSION['ipaddress']==$_SERVER['REMOTE_ADDR']) return true;
$_SESSION['is_logged'] = false;
$_SESSION['logged_info'] = '';
return false;
}
/**
* @brief 인증된 사용자의 정보 return
**/
function getLoggedInfo() {
// 로그인 되어 있고 세션 정보를 요청하면 세션 정보를 return
if($this->isLogged()) return $_SESSION['logged_info'];
}
/**
* @brief user_id에 해당하는 사용자 정보 return
**/
function getMemberInfoByUserID($user_id) {
$args->user_id = $user_id;
$output = $this->executeQuery('member.getMemberInfo', $args);
if(!$output) return $output;
$member_info = $output->data;
$member_info->group_list = $this->getMemberGroups($member_info->member_srl);
return $member_info;
}
/**
* @brief member_srl로 사용자 정보 return
**/
function getMemberInfoByMemberSrl($member_srl) {
$args->member_srl = $member_srl;
$output = $this->executeQuery('member.getMemberInfoByMemberSrl', $args);
if(!$output) return $output;
$member_info = $output->data;
$member_info->group_list = $this->getMemberGroups($member_info->member_srl);
return $member_info;
}
/**
* @brief userid에 해당하는 member_srl을 구함
**/
function getMemberSrlByUserID($user_id) {
$args->user_id = $user_id;
$output = $this->executeQuery('member.getMemberSrl', $args);
return $output->data->member_srl;
}
/**
* @brief userid에 해당하는 member_srl을 구함
**/
function getMemberSrlByEmailAddress($email_address) {
$args->email_address = $email_address;
$output = $this->executeQuery('member.getMemberSrl', $args);
return $output->data->member_srl;
}
/**
* @brief userid에 해당하는 member_srl을 구함
**/
function getMemberSrlByNickName($nick_name) {
$args->nick_name = $nick_name;
$output = $this->executeQuery('member.getMemberSrl', $args);
return $output->data->member_srl;
}
/**
* @brief 현재 접속자의 member_srl을 return
**/
function getLoggedMemberSrl() {
if(!$this->isLogged()) return;
return $_SESSION['member_srl'];
}
/**
* @brief 현재 접속자의 user_id을 return
**/
function getLoggedUserID() {
if(!$this->isLogged()) return;
$logged_info = $_SESSION['logged_info'];
return $logged_info->user_id;
}
/**
* @brief member_srl이 속한 group 목록을 가져옴
**/
function getMemberGroups($member_srl) {
$args->member_srl = $member_srl;
$output = $this->executeQuery('member.getMemberGroups', $args);
if(!$output->data) return;
$group_list = $output->data;
if(!is_array($group_list)) $group_list = array($group_list);
foreach($group_list as $group) {
$result[$group->group_srl] = $group->title;
}
return $result;
}
/**
* @brief 기본 그룹을 가져옴
**/
function getDefaultGroup() {
$output = $this->executeQuery('member.getDefaultGroup');
return $output->data;
}
/**
* @brief group_srl에 해당하는 그룹 정보 가져옴
**/
function getGroup($group_srl) {
$args->group_srl = $group_srl;
$output = $this->executeQuery('member.getGroup', $args);
return $output->data;
}
/**
* @brief 그룹 목록을 가져옴
**/
function getGroups() {
$output = $this->executeQuery('member.getGroups');
if(!$output->data) return;
$group_list = $output->data;
if(!is_array($group_list)) $group_list = array($group_list);
foreach($group_list as $val) {
$result[$val->group_srl] = $val;
}
return $result;
}
/**
* @brief 금지 아이디 목록 가져오기
**/
function getDeniedIDList() {
$args->sort_index = "list_order";
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
$output = $this->executeQuery('member.getDeniedIDList', $args);
return $output;
}
/**
* @brief 금지 아이디인지 확인
**/
function isDeniedID($user_id) {
$args->user_id = $user_id;
$output = $this->executeQuery('member.chkDeniedID', $args);
if($output->data->count) return true;
return false;
}
}
?>