diff --git a/classes/db/DBFirebird.class.php b/classes/db/DBFirebird.class.php index 7f8a475b7..8b8d24f5c 100644 --- a/classes/db/DBFirebird.class.php +++ b/classes/db/DBFirebird.class.php @@ -317,22 +317,30 @@ /** * @brief 결과를 fetch **/ - function _fetch($result, $output) { + function _fetch($result, $output = null) { if(!$this->isConnected() || $this->isError() || !$result) return; while($tmp = ibase_fetch_object($result)) { foreach($tmp as $key => $val) { $type = $output->column_type[$key]; + // type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함 if($type == null) { foreach($output->columns as $cols) { if($cols['alias'] == $key) { - $type = $output->column_type[$cols['name']]; + // table.column 형식인지 정규식으로 검사 함 + preg_match("/\w+[.](\w+)/", $cols['name'], $matches); + if($matches) { + $type = $output->column_type[$matches[1]]; + } + else { + $type = $output->column_type[$cols['name']]; + } } } } - if($type == "text" || $type == "bigtext") { + if(($type == "text" || $type == "bigtext") && $tmp->{$key}) { $blob_data = ibase_blob_info($tmp->{$key}); $blob_hndl = ibase_blob_open($tmp->{$key}); $tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]); @@ -387,7 +395,7 @@ $query = sprintf("ALTER TABLE \"%s%s\" ADD \"%s\" ", $this->prefix, $table_name, $column_name); if($size) $query .= sprintf(" %s(%s) ", $type, $size); else $query .= sprintf(" %s ", $type); - if($default) $query .= sprintf(" DEFAULT '%s' ", $default); + if(!is_null($default)) $query .= sprintf(" DEFAULT '%s' ", $default); if($notnull) $query .= " NOT NULL "; $this->_query($query); @@ -434,9 +442,13 @@ * $is_unique? unique : none **/ function addIndex($table_name, $index_name, $target_columns, $is_unique = false) { + // index name 크기가 31byte로 제한으로 index name을 넣지 않음 + // Firebird에서는 index name을 넣지 않으면 "RDB$10"처럼 자동으로 이름을 부여함 + // table을 삭제 할 경우 인덱스도 자동으로 삭제 됨 + if(!is_array($target_columns)) $target_columns = array($target_columns); - $query = sprintf('CREATE %s INDEX "%s" ON "%s%s" ("%s");', $is_unique?'UNIQUE':'', $index_name, $this->prefix, $table_name, implode('", "',$target_columns)); + $query = sprintf('CREATE %s INDEX "" ON "%s%s" ("%s");', $is_unique?'UNIQUE':'', $this->prefix, $table_name, implode('", "',$target_columns)); $this->_query($query); if(!$this->transaction_started) @ibase_commit($this->fd); @@ -547,7 +559,7 @@ $name, $this->column_type[$type], $size?'('.$size.')':'', - $default?"DEFAULT '".$default."'":"", + is_null($default)?"":"DEFAULT '".$default."'", $notnull?'NOT NULL':''); if($auto_increment) $auto_increment_list[] = $name; @@ -575,15 +587,12 @@ if(count($index_list)) { foreach($index_list as $key => $val) { - // index_name = prefix + 'idx_' + no - // index name 크기가 31byte로 제한되어 있어 일련번호로 대체 - $this->idx_no++; - $index_name = $this->prefix; - $index_name .= "idx_"; - $index_name .= sprintf("%04d", $this->idx_no); + // index name 크기가 31byte로 제한으로 index name을 넣지 않음 + // Firebird에서는 index name을 넣지 않으면 "RDB$10"처럼 자동으로 이름을 부여함 + // table을 삭제 할 경우 인덱스도 자동으로 삭제 됨 - $schema = sprintf("CREATE INDEX \"%s\" ON \"%s\" (\"%s\");", - $index_name, $table_name, implode($val, "\",\"")); + $schema = sprintf("CREATE INDEX \"\" ON \"%s\" (\"%s\");", + $table_name, implode($val, "\",\"")); $output = $this->_query($schema); if(!$this->transaction_started) @ibase_commit($this->fd); if(!$output) return false; @@ -726,9 +735,11 @@ ibase_blob_add($blh, $value); $value = ibase_blob_close($blh); } - else if($output->column_type[$name]=='number') { + else if($output->column_type[$name]=='number' || + $output->column_type[$name]=='bignumber' || + $output->column_type[$name]=='float') { // 연산식이 들어갔을 경우 컬럼명이 있는 지 체크해 더블쿼터를 넣어줌 - preg_match("/(?i)[a-z][a-z0-9_-]+/", $value, $matches); + preg_match("/(?i)[a-z][a-z0-9_]+/", $value, $matches); foreach($matches as $key => $val) { $value = str_replace($val, "\"".$val."\"", $value); @@ -980,15 +991,23 @@ foreach($tmp as $key => $val){ $type = $output->column_type[$key]; + // type 값이 null 일때는 $key값이 alias인 경우라 실제 column 이름을 찾아 type을 구함 if($type == null) { foreach($output->columns as $cols) { if($cols['alias'] == $key) { - $type = $output->column_type[$cols['name']]; + // table.column 형식인지 정규식으로 검사 함 + preg_match("/\w+[.](\w+)/", $cols['name'], $matches); + if($matches) { + $type = $output->column_type[$matches[1]]; + } + else { + $type = $output->column_type[$cols['name']]; + } } } } - if($type == "text" || $type == "bigtext") { + if(($type == "text" || $type == "bigtext") && $tmp->{$key}) { $blob_data = ibase_blob_info($tmp->{$key}); $blob_hndl = ibase_blob_open($tmp->{$key}); $tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]); diff --git a/common/js/xml_js_filter.js b/common/js/xml_js_filter.js index a90803135..808fb536d 100644 --- a/common/js/xml_js_filter.js +++ b/common/js/xml_js_filter.js @@ -23,7 +23,7 @@ var Validator = xe.createApp('Validator', { this.cast('ADD_RULE', ['email_address', regEmail]); // userid - var regUserid = /^[a-z]+[\w-]*[a-z0-9]+$/i; + var regUserid = /^[a-z]+[\w-]*[a-z0-9_]+$/i; this.cast('ADD_RULE', ['userid', regUserid]); this.cast('ADD_RULE', ['user_id', regUserid]); diff --git a/config/config.inc.php b/config/config.inc.php index afef6e6f1..1db365229 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -13,7 +13,7 @@ * @brief XE의 전체 버전 표기 * 이 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '1.4.0.3'); + define('__ZBXE_VERSION__', '1.4.0.4'); /** * @brief zbXE가 설치된 장소의 base path를 구함 diff --git a/modules/autoinstall/autoinstall.admin.controller.php b/modules/autoinstall/autoinstall.admin.controller.php index 96079da55..33ca2e3c4 100644 --- a/modules/autoinstall/autoinstall.admin.controller.php +++ b/modules/autoinstall/autoinstall.admin.controller.php @@ -135,13 +135,17 @@ if($ftp_info->sftp && $ftp_info->sftp == 'Y') { $oModuleInstaller = new SFTPModuleInstaller($package); - $oModuleInstaller->setPassword($ftp_password); + } + else if(function_exists(ftp_connect)) + { + $oModuleInstaller = new PHPFTPModuleInstaller($package); } else { $oModuleInstaller = new FTPModuleInstaller($package); - $oModuleInstaller->setPassword($ftp_password); } + + $oModuleInstaller->setPassword($ftp_password); $output = $oModuleInstaller->install(); if(!$output->toBool()) return $output; } diff --git a/modules/autoinstall/autoinstall.lib.php b/modules/autoinstall/autoinstall.lib.php index 06da5889c..1eddbe050 100644 --- a/modules/autoinstall/autoinstall.lib.php +++ b/modules/autoinstall/autoinstall.lib.php @@ -150,6 +150,87 @@ } } + + class PHPFTPModuleInstaller extends ModuleInstaller { + function PHPFTPModuleInstaller(&$package) + { + $this->package =& $package; + } + + function _copyDir(&$file_list) { + if(!$this->ftp_password) return new Object(-1,'msg_ftp_password_input'); + + $ftp_info = Context::getFTPInfo(); + if($ftp_info->ftp_host) + { + $ftp_host = $ftp_info->ftp_host; + } + else + { + $ftp_host = "127.0.0.1"; + } + + $connection = ftp_connect($ftp_host, $ftp_info->ftp_port); + if(!$connection) return new Object(-1, 'msg_ftp_not_connected'); + + $login_result = ftp_login($connection, $ftp_info->ftp_user, $this->ftp_password); + if(!$login_result) + { + return new Object(-1,'msg_ftp_invalid_auth_info'); + } + $_SESSION['ftp_password'] = $this->ftp_password; + + $target_dir = $ftp_info->ftp_root_path.$this->target_path; + + foreach($file_list as $k => $file){ + $org_file = $file; + if($this->package->path == ".") + { + $file = substr($file,3); + } + $path = FileHandler::getRealPath("./".$this->target_path."/".$file); + $path_list = explode('/', dirname($this->target_path."/".$file)); + + $real_path = "./"; + $ftp_path = $ftp_info->ftp_root_path; + + for($i=0;$idownload_path."/".$org_file), FTP_BINARY)) + { + return new Object(-1, "msg_ftp_upload_failed"); + } + } + + ftp_close($connection); + return new Object(); + } + } + class FTPModuleInstaller extends ModuleInstaller { function FTPModuleInstaller(&$package) { @@ -203,7 +284,7 @@ if(!file_exists(FileHandler::getRealPath($real_path))) { $oFtp->ftp_mkdir($ftp_path); - $oFtp->ftp_site("CHMOD 755 ".$path); + $oFtp->ftp_site("CHMOD 755 ".$ftp_path); } } $oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file)); diff --git a/modules/autoinstall/lang/zh-TW.lang.php b/modules/autoinstall/lang/zh-TW.lang.php index fc07ce535..d2f902967 100644 --- a/modules/autoinstall/lang/zh-TW.lang.php +++ b/modules/autoinstall/lang/zh-TW.lang.php @@ -2,11 +2,11 @@ /** * @file zh-TW.lang.php * @author sol (sol@ngleader.com) 翻譯:royallin - * @brief 自動安裝(autoinstall)模組正體中文語言 + * @brief 自動安裝(autoinstall)模組正體中文語言 **/ $lang->autoinstall = '自動安裝'; - $lang->about_autoinstall = '可幫助您安裝/更新XE程式及面板。'; + $lang->about_autoinstall = '可幫助您安裝及更新 XE 程式和面板。'; $lang->package_update = '最近更新'; $lang->package_downloaded_count = '下載次數'; $lang->need_update = "需要更新。"; @@ -16,7 +16,7 @@ $lang->order_download = "下載"; $lang->success_installed = "安裝成功"; $lang->view_all_package = "全部檢視"; - $lang->description_ftp_note = "請先將FTP設定好,否則無法執行自動安裝功能。"; + $lang->description_ftp_note = "請先將 FTP 設定好,否則無法執行自動安裝功能。"; $lang->description_update = "如果您最近不是用自動安裝模組更新或安裝,請點擊更新按鈕更新。"; $lang->install = "安裝"; $lang->update = "更新"; @@ -24,10 +24,10 @@ $lang->depending_programs = "此程式需要安裝"; $lang->require_update = "需要更新"; $lang->require_installation = "需要安裝"; - $lang->description_install = "One Click Installer will also install/update all other programs which this program is depending on"; - $lang->description_download = "如果FTP無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話,將檔案解壓縮到 ./modules就可以了)"; + $lang->description_install = "自動安裝也能夠同時安裝與更新其他相關程式"; + $lang->description_download = "如果 FTP 無法使用的話,必須要手動下載並解壓縮到目標路徑。(假設目標路徑為 ./modules/board的話,將檔案解壓縮到 ./modules就可以了)"; $lang->path = "路徑"; $lang->cmd_download = "下載"; $lang->view_installed_packages = "已安裝套裝軟體"; - $lang->msg_ftp_password_input = "Please input FTP password."; + $lang->msg_ftp_password_input = "請輸入 FTP 密碼"; ?> diff --git a/modules/document/queries/updateDocument.xml b/modules/document/queries/updateDocument.xml index 3c51dc935..b19d13aed 100644 --- a/modules/document/queries/updateDocument.xml +++ b/modules/document/queries/updateDocument.xml @@ -19,7 +19,7 @@ - + diff --git a/modules/document/queries/updateDocumentExtraKey.xml b/modules/document/queries/updateDocumentExtraKey.xml index 07966b4fd..3c25dba8e 100644 --- a/modules/document/queries/updateDocumentExtraKey.xml +++ b/modules/document/queries/updateDocumentExtraKey.xml @@ -7,8 +7,8 @@ - - + + diff --git a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js index 2896b4dbd..21bb2f456 100644 --- a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js +++ b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js @@ -5442,7 +5442,7 @@ var regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, regex_font_style = /font-style\s*:\s*italic;?/i, regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i, - regex_$ = /$\d+\s*=(\s*"\d+"|\d+)/ig, + regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/ig, regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //" var @@ -5505,7 +5505,7 @@ xe.XE_XHTMLFormatter = $.Class({ if ($.browser.msie) { // remove $ attributes - sContent = sContent.replace(regex_$, ''); + sContent = sContent.replace(regex_jquery, ''); // quote all attrs sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){ diff --git a/modules/editor/tpl/js/editor_common.js b/modules/editor/tpl/js/editor_common.js index cf70c1ee8..bff3e6290 100644 --- a/modules/editor/tpl/js/editor_common.js +++ b/modules/editor/tpl/js/editor_common.js @@ -46,6 +46,9 @@ function _editorAutoSave(exe) { var fo_obj = editorAutoSaveObj.fo_obj; var editor_sequence = editorAutoSaveObj.editor_sequence; + // 50초마다 동기화를 시킴 강제 실행은 제외 + if(!exe) setTimeout('_editorAutoSave()', 50000); + // 현재 자동저장중이면 중지 if(editorAutoSaveObj.locked == true) return; @@ -54,7 +57,11 @@ function _editorAutoSave(exe) { // 자동저장을 위한 준비 var title = fo_obj.title.value; - var content = editorGetContent(editor_sequence); + var content = ''; + try{ + content = editorGetContent(editor_sequence); + }catch(e){ + } // 내용이 이전에 저장하였던 것과 다르면 자동 저장을 함 또는 강제 저장 설정시 자동 저장 if(title != editorAutoSaveObj.title || content != editorAutoSaveObj.content || exe) { @@ -82,9 +89,6 @@ function _editorAutoSave(exe) { exec_xml("editor","procEditorSaveDoc", params, function() { editorAutoSaveObj.locked = false; } ); show_waiting_message = true; } - - // 50초마다 동기화를 시킴 강제 실행은 제외 - if(!exe) setTimeout('_editorAutoSave()', 50000); } // 자동저장된 모든 메세지를 삭제하는 루틴 diff --git a/modules/importer/conf/info.xml b/modules/importer/conf/info.xml index 97b56abbb..2264fbeea 100644 --- a/modules/importer/conf/info.xml +++ b/modules/importer/conf/info.xml @@ -15,7 +15,7 @@ XMLファイルを用いて会員情報または掲示板などの情報を入力します。 Ingresa la información del usuario o los datos del tablero utilizando el archivo XML. Запись информации пользователей или форума, используя XML-файл. - 利用XML檔案匯入會員或討論板資料。 + 利用 XML 檔案匯入會員或討論板資料。 0.2 2007-12-13 migration diff --git a/modules/importer/lang/zh-TW.lang.php b/modules/importer/lang/zh-TW.lang.php index 82a9372b2..787f6ccb8 100644 --- a/modules/importer/lang/zh-TW.lang.php +++ b/modules/importer/lang/zh-TW.lang.php @@ -14,7 +14,7 @@ $lang->importer = '匯入'; $lang->source_type = '匯入目標'; $lang->type_member = '會員資料'; - $lang->type_message = '短訊息(MemoBox)'; + $lang->type_message = '短訊息'; $lang->type_ttxml = 'TTXML'; $lang->type_module = '討論板資料'; $lang->type_syncmember = '同步會員資料'; @@ -31,31 +31,31 @@ ); $lang->import_step_desc = array( - 1 => '請選擇要匯入的XML檔案類型。', + 1 => '請選擇要匯入的 XML 檔案類型。', 12 => '請選擇要匯入的目標模組。', 121 => '文章:', 122 => '討論板:', 13 => '請選擇要匯入的目標分類。', - 2 => "請輸入要匯入的XML檔案位置。\n可輸入相對或絕對路徑。", + 2 => "請輸入要匯入的 XML 檔案位置。\n可輸入相對或絕對路徑。", 3 => '資料匯入後,可能會導致會員資料和文章內容產生誤差。請以『user_id』進行同步即可解決。', 99 => '資料匯入中...', ); // 訊息/提示 $lang->msg_sync_member = '按同步按鈕,即可開始進行會員資料和文章的同步。'; - $lang->msg_no_xml_file = '找不到XML檔案,請重新確認路徑。'; + $lang->msg_no_xml_file = '找不到 XML 檔案,請重新確認路徑。'; $lang->msg_invalid_xml_file = 'XML檔案格式錯誤!'; - $lang->msg_importing = '%d個的資料中正在輸入 %d個。(長時間沒有回應時,請按「繼續進行」按鈕)'; - $lang->msg_import_finished = '已完成輸入%d/%d個資料。根據情況的不同,可能會出現沒有被匯入的資料。'; + $lang->msg_importing = '%d個的資料中正在輸入 %d 個。(長時間沒有回應時,請按「繼續進行」按鈕)'; + $lang->msg_import_finished = '已完成輸入 %d/%d 個資料。根據情況的不同,可能會出現沒有被匯入的資料。'; $lang->msg_sync_completed = '已完成會員和文章,評論的同步。'; // 其他 $lang->about_type_member = '資料匯入目標為會員資料時,請選擇此項。'; - $lang->about_type_message = '資料匯入目標為短訊息(MemoBox)時,請選擇此項。'; - $lang->about_type_ttxml = '資料匯入目標為TTXML(textcube系列)時,請選擇此項。'; - $lang->about_ttxml_user_id = '請輸入匯入TTXML資料時,指定為主題發表者的ID(必須是已註冊會員)。'; + $lang->about_type_message = '資料匯入目標為短訊息時,請選擇此項。'; + $lang->about_type_ttxml = '資料匯入目標為 TTXML (textcube系列)時,請選擇此項。'; + $lang->about_ttxml_user_id = '請輸入匯入 TTXML 資料時,指定為主題發表者的 ID (必須是已註冊會員)。'; $lang->about_type_module = '資料匯入目標為討論板主題時,請選擇此項。'; $lang->about_type_syncmember = '匯入會員和文章資料後,需要同步會員資料時,請選擇此項。'; - $lang->about_importer = "不僅可以匯入Zeroboard 4,Zb5beta的資料,也能夠把其他程式資料匯入到XE當中。\n匯入資料時,請利用XML Exporter建立XML檔案後再上傳。"; - $lang->about_target_path = "為了下載附檔請輸入Zeroboard 4的安裝位置。\n位置在同一個主機時,請輸入如『/home/id/public_html/bbs』的路徑,在不同主機時,請輸入如『http://域名/bbs』的URL網址。"; + $lang->about_importer = "不僅可以匯入 Zeroboard 4,Zb5beta 的資料,也能夠把其他程式資料匯入到 XE 當中。\n匯入資料時,請利用 XML Exporter 建立 XML 檔案後再上傳。"; + $lang->about_target_path = "為了下載附檔請輸入 Zeroboard 4 的安裝位置。\n位置在同一個主機時,請輸入如『/home/id/public_html/bbs』的路徑,在不同主機時,請輸入如『http://域名/bbs』的 URL 網址。"; ?> diff --git a/modules/install/lang/zh-TW.lang.php b/modules/install/lang/zh-TW.lang.php index deaa10bde..33e882346 100644 --- a/modules/install/lang/zh-TW.lang.php +++ b/modules/install/lang/zh-TW.lang.php @@ -469,7 +469,7 @@ DAMAGES. EndOfLicense; - $lang->install_condition_title = "確認安裝時必須要具備的條件"; + $lang->install_condition_title = '確認安裝時必須要具備的條件'; $lang->install_checklist_title = array( 'php_version' => 'PHP版本', diff --git a/modules/member/php-openid-1.2.3/Auth/OpenID/XEStore.php b/modules/member/php-openid-1.2.3/Auth/OpenID/XEStore.php index 4d51642fc..7ca9e7615 100644 --- a/modules/member/php-openid-1.2.3/Auth/OpenID/XEStore.php +++ b/modules/member/php-openid-1.2.3/Auth/OpenID/XEStore.php @@ -149,7 +149,8 @@ class Auth_OpenID_XEStore extends Auth_OpenID_OpenIDStore { function getAssociation($server_url, $handle = null) { $assoc = $this->_get_assoc($server_url, $handle); - return $assoc; + $assoc_o = new Auth_OpenID_Association($assoc->handle, $assoc->secret, $assoc->issued, $assoc->lifetime, $assoc->assoc_type); + return $assoc_o; } diff --git a/modules/member/queries/updateMember.xml b/modules/member/queries/updateMember.xml index cdd12e5b6..231d60a91 100644 --- a/modules/member/queries/updateMember.xml +++ b/modules/member/queries/updateMember.xml @@ -9,8 +9,8 @@ - - + + diff --git a/modules/menu/queries/updateMenuItem.xml b/modules/menu/queries/updateMenuItem.xml index 986300365..cc6502ac4 100644 --- a/modules/menu/queries/updateMenuItem.xml +++ b/modules/menu/queries/updateMenuItem.xml @@ -7,9 +7,9 @@ - - - + + + diff --git a/modules/module/module.class.php b/modules/module/module.class.php index be6974939..dbfa17c25 100644 --- a/modules/module/module.class.php +++ b/modules/module/module.class.php @@ -290,17 +290,45 @@ if(!$output->toBool()) return $output; } - - if($oDB->isIndexExists('sites','idx_domain')){ - $oDB->dropIndex('sites','idx_domain'); - } - if(!$oDB->isIndexExists('sites','unique_domain')){ - $oDB->addIndex('sites','unique_domain',array('domain'),true); - } + if($oDB->isIndexExists('sites','idx_domain')){ + $oDB->dropIndex('sites','idx_domain'); + } + if(!$oDB->isIndexExists('sites','unique_domain')){ + $this->updateForUniqueSiteDomain(); + $oDB->addIndex('sites','unique_domain',array('domain'),true); + } return new Object(0, 'success_updated'); } + function updateForUniqueSiteDomain() + { + $output = executeQueryArray("module.getNonuniqueDomains"); + if(!$output->data) return; + foreach($output->data as $data) + { + if($data->count == 1) continue; + $domain = $data->domain; + $args = null; + $args->domain = $domain; + $output2 = executeQueryArray("module.getSiteByDomain", $args); + $bFirst = true; + foreach($output2->data as $site) + { + if($bFirst) + { + $bFirst = false; + continue; + } + $domain .= "_"; + $args = null; + $args->domain = $domain; + $args->site_srl = $site->site_srl; + $output3 = executeQuery("module.updateSite", $args); + } + } + } + /** * @brief 캐시 파일 재생성 **/ diff --git a/modules/module/queries/getNonuniqueDomains.xml b/modules/module/queries/getNonuniqueDomains.xml new file mode 100644 index 000000000..dd768d5fb --- /dev/null +++ b/modules/module/queries/getNonuniqueDomains.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/module/queries/getSiteByDomain.xml b/modules/module/queries/getSiteByDomain.xml new file mode 100644 index 000000000..865b6d66c --- /dev/null +++ b/modules/module/queries/getSiteByDomain.xml @@ -0,0 +1,14 @@ + + +
+ + + + + + + + + + +