Virtual Site 생성시 도메인 단위(서브도메인 또는 독립 도메인)이 아닌 ID 형식으로 생성 가능하도록 기능 개선.

SID 로 불리는 이 사이트ID는 MID와 중복이 불가능함.


git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6051 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-04-08 10:10:17 +00:00
parent 40e1740839
commit bb97446dfc
40 changed files with 313 additions and 189 deletions

View file

@ -34,6 +34,14 @@
$lang->lang_code = "언어 코드";
$lang->filebox = "파일박스";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = "In order to create more than one virtual site, each of them needs to have own domain name.<br />Sub-domain (e.g., aaa.bbb.com of bbb.com) also can be used. Input the address including the path installed xe. <br /> ex) www.xpressengine.com/xe";
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = "It is already registered domain name. Please use the different one.";
$lang->header_script = "Header Script";
$lang->about_header_script = "You can input the html script between &lt;header&gt; and &lt;/header&gt; by yourself.<br />You can use &lt;script, &lt;style or &lt;meta tag";

View file

@ -34,6 +34,14 @@
$lang->lang_code = "언어 코드";
$lang->filebox = "파일박스";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = 'Para crear un dominio privado de la site requiere. <br/> Independiente de dominio o subdominio, y XE está instalado, el camino que en su conjunto. <br /> Ej.) www.xpressengine.com / zbxe';
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = 'Ya es de dominio registrado. Por favor, use un dominio diferente';
$lang->header_script = "헤더 스크립트";
$lang->about_header_script = "html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다.<br />&lt;script, &lt;style 또는 &lt;meta 태그등을 이용하실 수 있습니다";

View file

@ -34,6 +34,13 @@
$lang->lang_code = "언어 코드";
$lang->filebox = "파일박스";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = '이미 등록된 도메인입니다. 다른 도메인을 사용해주세요';
$lang->header_script = "Script en-tête";
$lang->about_header_script = "Vous pouvez entrer un script en html par vous-même entre &lt;header&gt; et &lt;/header&gt;.<br />Vous pouvez utiliser &lt;script, &lt;style ou &lt;meta tag";

View file

@ -34,6 +34,14 @@
$lang->lang_code = "言語コード";
$lang->filebox = "ファイルボックス";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = "複数のホームページを作成するためには、「オリジナルドメイン」や「サブ ドメイン」のような専用のドメインが必要です。<br />また、 XEインストールパスも一緒に記入して下さい。<br />ex) www.xpressengine.com/xe";
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = "既に登録されているドメインです。異なるドメインを利用して下さい。";
$lang->header_script = "ヘッダースクリプト";
$lang->about_header_script = "HTMLの&lt;header&gt;と&lt;/header&gt;の間に入れるコードを直接入力出来ます。<br />&lt;script、&lt;styleまたは&lt;metaタグなどが利用出来ます";

View file

@ -34,6 +34,14 @@
$lang->lang_code = '언어 코드';
$lang->filebox = '파일박스';
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = '1개 이상의 사이트를 만들기 위해서는 전용 도메인이 있어야 합니다.<br/>독립 도메인이나 서브 도메인이 있으면 되고 XE가 설치된 경로까지 같이 넣어주세요.<br />ex) www.xpressengine.com/xe';
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = '이미 등록된 도메인입니다. 다른 도메인을 사용해주세요';
$lang->header_script = '헤더 스크립트';
$lang->about_header_script = 'html의 &lt;head&gt;와 &lt;/head&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다.<br />&lt;script, &lt;style 또는 &lt;meta 태그등을 이용하실 수 있습니다';

View file

@ -33,6 +33,13 @@
$lang->lang_code = "언어 코드";
$lang->filebox = "파일박스";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = '이미 등록된 도메인입니다. 다른 도메인을 사용해주세요';
$lang->module_copy = "Копировать модуль";
$lang->header_script = "헤더 스크립트";

View file

@ -34,6 +34,14 @@
$lang->lang_code = "语言变量";
$lang->filebox = "文件管理";
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = "要创建一个站点必须有一个专用域名。<br/>一级域名或二级域名皆可。输入的时候请把XE安装路径也一起输入。<br />ex) www.xpressengine.com/xe";
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = "对不起!已有相同的域名。请重新输入。";
$lang->header_script = "文件头部脚本";
$lang->about_header_script = "可以直接输入插入到html中&lt;head&gt;区的代码。<br />可使用&lt;script, &lt;style 或 &lt;meta 等标签。";

View file

@ -33,6 +33,13 @@
$lang->bundle_grant_setup = '批次設定-權限管理';
$lang->lang_code = '語言代碼';
$lang->filebox = '檔案管理';
$lang->access_type = '접속 방법';
$lang->access_domain = 'Doamin 접속';
$lang->access_sid = 'Site ID 접속';
$lang->about_domain = "要建立網站必須要有個專屬域名。<br/>頂級域名或次級域名都可以。輸入時請將XE安裝路徑也一起輸入。<br />例) www.xpressengine.com/xe";
$lang->about_sid = '별도의 도메인이 아닌 http://XE주소/ID 로 접속할 수 있습니다. 모듈명(mid)와 중복될 수 없습니다.<br/>첫글자는 영문으로 시작해야 하고 영문과 숫자 그리고 _ 만 사용할 수 있습니다';
$lang->msg_already_registed_sid = '이미 등록된 사이트 ID 입니다. 게시판등의 mid와도 중복이 되지 않습니다. 다른 ID를 입력해주세요.';
$lang->msg_already_registed_domain = "已註冊的域名。請使用其他的網域。";
$lang->header_script = "Header Script";
$lang->about_header_script = "可以直接輸入並插入到HTML的&lt;head&gt;之間。<br />可使用&lt;script&gt;,&lt;style&gt;或&lt;meta&gt;等標籤。";

View file

@ -113,20 +113,26 @@
* @brief virtual site 생성
**/
function insertSite($domain, $index_module_srl) {
if(isSiteID($domain)) {
$oModuleModel = &getModel('module');
if($oModuleModel->isIDExists($domain, 0)) return new Object(-1,'msg_already_registed_sid');
}
$args->site_srl = getNextSequence();
$args->domain = preg_replace('/\/$/','',$domain);
$args->index_module_srl = $index_module_srl;
$output = executeQuery('module.insertSite', $args);
if(!$output->toBool()) return null;
if(!$output->toBool()) return $output;
return $args->site_srl;
$output->add('site_srl', $args->site_srl);
return $output;
}
/**
* @brief virtual site 수정
**/
function updateSite($args) {
return executeQuery('module.updateSite', $args);
$output = executeQuery('module.updateSite', $args);
return $output;
}
/**
@ -170,18 +176,15 @@
$output = $this->arrangeModuleInfo($args, $extra_vars);
if(!$output->toBool()) return $output;
// 이미 존재하는 모듈 이름인지 체크
if(!$args->site_srl) $args->site_srl = 0;
$oModuleModel = &getModel('module');
if($oModuleModel->isIDExists($args->mid, $args->site_srl)) return new Object(-1, 'msg_module_name_exists');
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
// 이미 존재하는 모듈 이름인지 체크
if(!$args->site_srl) $args->site_srl = 0;
$output = executeQuery('module.isExistsModuleName', $args);
if(!$output->toBool() || $output->data->count) {
$oDB->rollback();
return new Object(-1, 'msg_module_name_exists');
}
// is_default 의 값에 따라서 처리
if($args->site_srl!=0) $args->is_default = 'N';
else {
@ -190,7 +193,6 @@
}
// 선택된 스킨정보에서 colorset을 구함
$oModuleModel = &getModel('module');
$module_path = ModuleHandler::getModulePath($args->module);
$skin_info = $oModuleModel->loadSkinInfo($module_path, $args->skin);
$skin_vars->colorset = $skin_info->colorset[0]->name;

View file

@ -13,6 +13,33 @@
function init() {
}
/**
* @brief mid, sid 사용할 있는지 검사
**/
function isIDExists($id, $site_srl = 0) {
// directory 및 rss/atom/api 등 예약어 검사
$dirs = FileHandler::readDir(_XE_PATH_);
$dirs[] = 'rss';
$dirs[] = 'atom';
$dirs[] = 'api';
if(in_array($id, $dirs)) return true;
// mid 검사
$args->mid = $id;
$args->site_srl = $site_srl;
$output = executeQuery('module.isExistsModuleName', $args);
if($output->data->count) return true;
// sid 검사 (site_srl이 0일때 즉 가상사이트가 아닌 경우 mid != sid임을 체크)
if(!$site_srl) {
$site_args->domain = $id;
$output = executeQuery('module.isExistsSiteDomain', $site_args);
if($output->data->count) return true;
}
return false;
}
/**
* @brief site 정보를 구함
**/
@ -42,19 +69,35 @@
* @brief domain에 따른 기본 mid를 구함
**/
function getDefaultMid() {
// domain 으로 등록된 virtual site가 있는지 확인
$url_info = parse_url(Context::getRequestUri());
$hostname = $url_info['host'];
$path = preg_replace('/\/$/','',$url_info['path']);
$sites_args->domain = sprintf('%s%s%s', $hostname, $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$path);
$default_url = preg_replace('/\/$/','',Context::getDefaultUrl());
$request_url = preg_replace('/\/$/','',Context::getRequestUri());
$sid = Context::get('sid');
$mid = Context::get('mid');
$output = executeQuery('module.getSiteDefaultInfo', $sites_args);
// 기본 URL이 설정되어 있고 이 기본 URL과 요청 URL이 다르면 가상 사이트 확인
if($default_url && $default_url != $request_url) {
$url_info = parse_url($request_url);
$hostname = $url_info['host'];
$path = preg_replace('/\/$/','',$url_info['path']);
$sites_args->domain = sprintf('%s%s%s', $hostname, $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$path);
$output = executeQuery('module.getSiteDefaultInfo', $sites_args);
} else {
if(!$sid) $sid = $mid;
if($sid) {
$sid_args->domain = $sid;
$output = executeQuery('module.getSiteInfoByDomain', $sid_args);
if($output->toBool() && $output->data) {
Context::set('sid', $output->data->domain, true);
if($mid==$output->data->domain) Context::set('mid',$output->data->mid,true);
}
}
}
// virtual site를 못 찾으면 가장 기본 모듈 추출
if(!$output->toBool() || !$output->data) {
if(!$output->data) {
$args->site_srl = 0;
$output = executeQuery('module.getDefaultMidInfo', $args);
}
$module_info = $output->data;
if(!$module_info->module_srl) return;
if(is_array($module_info) && $module_info->data[0]) $module_info = $module_info[0];
@ -66,7 +109,7 @@
**/
function getModuleInfoByMid($mid, $site_srl = 0) {
$args->mid = $mid;
$args->site_srl = $site_srl;
$args->site_srl = (int)$site_srl;
$output = executeQuery('module.getMidInfo', $args);
$module_info = $output->data;
if(!$module_info->module_srl && $module_info->data[0]) $module_info = $module_info->data[0];

View file

@ -8,6 +8,6 @@
<conditions>
<condition operation="equal" column="mid" var="mid" />
<condition operation="equal" column="module_srl" var="module_srl" pipe="and" />
<condition operation="equal" column="site_srl" var="site_srl" default="0" pipe="and" />
<condition operation="equal" column="site_srl" var="site_srl" default="0" pipe="and" notnull="notnull" />
</conditions>
</query>