모듈 선택기능 추가 (위젯의 단일/다수 위젯 선택, 첵크된 게시글 이동/복사시) 사용되며 virtualSite외의 사이트들도 검색후 선택이 가능하도록 개선

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5298 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-01-09 09:37:43 +00:00
parent 3345d21c4e
commit 906bb46d19
83 changed files with 970 additions and 543 deletions

View file

@ -8,6 +8,7 @@
<action name="dispModuleSkinInfo" type="view" standalone="true" />
<action name="dispModuleAdminSelectList" type="view" standalone="true" />
<action name="dispModuleAdminCopyModule" type="view" standalone="true" />
<action name="procModuleAdminInsertCategory" type="controller" standalone="true" />
<action name="procModuleAdminUpdateCategory" type="controller" standalone="true" />

View file

@ -5,6 +5,7 @@
* @brief English language pack
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "Modules List";
$lang->module_index = "Modules List";
$lang->module_category = "Module Category";
@ -25,6 +26,7 @@
$lang->skin_license = 'License';
$lang->skin_history = 'Update history';
$lang->module_copy = "Duplicate Module";
$lang->module_selector = "Module Selector";
$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";
@ -65,4 +67,5 @@
$lang->about_module = "XE consists of modules except basic library.\n [Module Manage] module will show all installed modules and help you to manage them.";
$lang->about_extra_vars_default_value = 'If multiple default values are needed, you can link them with comma(,).';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @sumario Paquete del idioma español
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "Lista de Módulos";
$lang->module_index = "Lista de Módulos";
$lang->module_category = "Categoría de Módulos ";
@ -25,6 +26,7 @@
$lang->skin_license = 'License';
$lang->skin_history = 'Historia de actualización';
$lang->module_copy = "Copy Module";
$lang->module_selector = "Module Selector";
$lang->header_script = "헤더 스크립트";
$lang->about_header_script = "html의 &lt;header&gt;와 &lt;/header&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다.<br />&lt;script, &lt;style 또는 &lt;meta 태그등을 이용하실 수 있습니다";
@ -64,4 +66,5 @@
$lang->about_module = "XE consiste de módulos excepto la librería básica.\n Módulo del Manejo del Módulo muestra todos los módulos instalados y ayuda el manejo de ellos.";
$lang->about_extra_vars_default_value = 'Si múltiples valores predefinidos son requeridos, usted puede enlazar con la coma(,).';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief Paque du langage en français pour le module de Module
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "Liste des Modules";
$lang->module_index = "Liste des Modules";
$lang->module_category = "Catégorie des Modules";
@ -25,6 +26,7 @@
$lang->skin_license = 'Licence';
$lang->skin_history = 'Histoire des Mises à jour';
$lang->module_copy = "Copier un Module";
$lang->module_selector = "Module Selector";
$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";
@ -64,4 +66,5 @@
$lang->about_module = "XE se compose des modules sauf la bibliothèque fondamental.\nLe module [Administration des Modules] montera tous les modules installés et vous aidera les administrer.";
$lang->about_extra_vars_default_value = 'Si plusieurs valeurs sont nécessaires, vous pouvez les connecter avec la virgule(,).';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief 日本語言語パッケージ
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "モジュールリスト";
$lang->module_index = "モジュールインデックス";
$lang->module_category = "モジュールカテゴリ";
@ -25,6 +26,7 @@
$lang->skin_license = 'License';
$lang->skin_history = '変更内容';
$lang->module_copy = "モジュールコピー";
$lang->module_selector = "Module Selector";
$lang->header_script = "ヘッダースクリプト";
$lang->about_header_script = "HTMLの&lt;header&gt;と&lt;/header&gt;の間に入れるコードを直接入力できます。<br />&lt;script、&lt;styleまたは&lt;metaタグなどが利用できます";
@ -65,4 +67,5 @@
$lang->about_module = "XEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。";
$lang->about_extra_vars_default_value = '多重・単一選択などのデフォルト値が、複数必要な場合は、「, (コンマ)」で区切って追加することができます。';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief 한국어 언어팩
**/
$lang->virtual_site = "가상 사이트";
$lang->module_list = "모듈 목록";
$lang->module_index = "모듈 목록";
$lang->module_category = "모듈 분류";
@ -25,6 +26,7 @@
$lang->skin_license = '라이선스';
$lang->skin_history = '변경 이력';
$lang->module_copy = "모듈 복사";
$lang->module_selector = "모듈 선택기";
$lang->header_script = "헤더 스크립트";
$lang->about_header_script = "html의 &lt;head&gt;와 &lt;/head&gt; 사이에 들어가는 코드를 직접 입력할 수 있습니다.<br />&lt;script, &lt;style 또는 &lt;meta 태그등을 이용하실 수 있습니다";
@ -63,6 +65,6 @@
$lang->about_admin_id = '해당 모듈에 대해 최고 권한을 가지는 관리자를 지정할 수 있습니다.<br />,(콤마)로 다수 아이디 지정이 가능합니다. (관리자페이지 접근은 불가능)';
$lang->about_grant = '특정 권한의 대상을 모두 해제하시면 로그인하지 않은 회원까지 권한을 가질 수 있습니다';
$lang->about_module = "XE는 기본 라이브러리를 제외한 나머지는 모두 모듈로 구성되어 있습니다.\n모듈관리 모듈은 설치된 모든 모듈을 보여주고 관리를 도와줍니다.";
$lang->about_extra_vars_default_value = '다중/단일 선택등 기본값이 여러개가 필요한 경우 , (콤마)로 연결하시면 됩니다';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief Russian basic language pack
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "Список модулей";
$lang->module_index = "Список модулей";
$lang->module_category = "Категория модуля";
@ -24,6 +25,7 @@
$lang->skin_author = 'Разработчик скина';
$lang->skin_license = 'License';
$lang->skin_history = 'История обновлений';
$lang->module_selector = "Module Selector";
$lang->module_copy = "Копировать модуль";
$lang->header_script = "헤더 스크립트";
@ -64,4 +66,5 @@
$lang->about_module = "XE состоит из модулей, за исключением базовой библиотеки.\n Управление модулем покажет все установленные модули и поможет управлять ими.";
$lang->about_extra_vars_default_value = 'Если нужно несколько значений по умолчанию, разделите их запятыми(,).';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief 简体中文语言包
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "模块目录";
$lang->module_index = "模块目录";
$lang->module_category = "模块分类";
@ -25,6 +26,7 @@
$lang->skin_license = '版权';
$lang->skin_history = '更新日志';
$lang->module_copy = "Copy Module";
$lang->module_selector = "Module Selector";
$lang->header_script = "文件头部脚本";
$lang->about_header_script = "可以直接输入插入到html中&lt;head&gt;区的代码。<br />可使用&lt;script, &lt;style 或 &lt;meta 等标签。";
@ -64,4 +66,5 @@
$lang->about_module = "除基本library以外XE全部由模块组成。\n模块管理中列出所有已安装的模块,因此易于管理。";
$lang->about_extra_vars_default_value = '复选/单选缺省值需要多个时,用,(逗号)来分隔。';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -5,6 +5,7 @@
* @brief 正體中文語言
**/
$lang->virtual_site = "Virtual Site";
$lang->module_list = "模組列表";
$lang->module_index = "模組列表";
$lang->module_category = "模組分類";
@ -25,6 +26,7 @@
$lang->skin_license = '版權';
$lang->skin_history = '更新事項';
$lang->module_copy = "複製模組";
$lang->module_selector = "Module Selector";
$lang->header_script = "Header Script";
$lang->about_header_script = "可以直接輸入,並插入到 HTML的&lt;head&gt;之間。<br />可使用&lt;script&gt;, &lt;style&gt; 或 &lt;meta&gt; 等標籤。";
@ -65,4 +67,5 @@
$lang->about_module = "除基本函式庫以外XE全部由模組組成。\n模組管理中列出所有已安裝的模組,因此易於管理。";
$lang->about_extra_vars_default_value = '當復選或單選的預設值需要很多個時,用 (,) 區隔。';
$lang->about_search_virtual_site = "가상 사이트(카페XE등)의 도메인을 입력하신 후 검색하세요.<br/>가상 사이트이외의 모듈은 내용을 비우고 검색하시면 됩니다. (http:// 는 제외)";
?>

View file

@ -97,5 +97,82 @@
$this->setTemplateFile('copy_module');
}
/**
* @brief 모듈 선택기
**/
function dispModuleAdminSelectList() {
$oModuleModel = &getModel('module');
// virtual site의 개수를 추출
$output = executeQuery('module.getSiteCount');
$site_count = $output->data->count;
Context::set('site_count', $site_count);
// 사이트 검색어 변수 설정
$site_keyword = Context::get('site_keyword');
// 사이트 검색어가 없으면 현재 가상 사이트의 정보를 설정
$args = null;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin == 'Y') {
$query_id = 'module.getSiteModules';
$module_category_exists = false;
if(!$site_keyword) {
$site_module_info = Context::get('site_module_info');
if($site_module_info && $logged_info->is_admin != 'Y') {
$site_keyword = $site_module_info->domain;
$args->site_srl = (int)$site_module_info->site_srl;
Context::set('site_keyword', $site_keyword);
} else {
$query_id = 'module.getDefaultModules';
$module_category_exists = true;
}
// 사이트 검색어가 있으면 해당 사이트(들)의 정보를 추출
} else {
$args->site_keyword = $site_keyword;
}
} else {
$query_id = 'module.getSiteModules';
$site_module_info = Context::get('site_module_info');
$args->site_srl = (int)$site_module_info->site_srl;
}
// 지정된 사이트(혹은 전체)의 module 목록을 구함
$output = executeQueryArray($query_id, $args);
$category_list = $mid_list = array();
if(count($output->data)) {
foreach($output->data as $key => $val) {
$module = trim($val->module);
if(!$module) continue;
$category = $val->category;
$obj = null;
$obj->module_srl = $val->module_srl;
$obj->browser_title = $val->browser_title;
$mid_list[$module]->list[$category][$val->mid] = $obj;
}
}
$selected_module = Context::get('selected_module');
if(count($mid_list)) {
foreach($mid_list as $module => $val) {
if(!$selected_module) $selected_module = $module;
$xml_info = $oModuleModel->getModuleInfoXml($module);
$mid_list[$module]->title = $xml_info->title;
}
}
Context::set('mid_list', $mid_list);
Context::set('selected_module', $selected_module);
Context::set('selected_mids', $mid_list[$selected_module]->list);
Context::set('module_category_exists', $module_category_exists);
// 레이아웃을 팝업으로 지정
$this->setLayoutFile('popup_layout');
// 템플릿 파일 지정
$this->setTemplateFile('module_selector');
}
}
?>

View file

@ -113,6 +113,21 @@
return new Object(0, 'success_updated');
}
/**
* @brief Action중 Admin이 들어갔을 경우 권한 체크
**/
function checkAdminActionGrant() {
if(!Context::get('is_logged')) return false;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin=='Y') return true;
$oModuleModel = &getModel('module');
if($oModuleModel->isSiteAdmin()) return true;
return false;
}
/**
* @brief 캐시 파일 재생성
**/

View file

@ -0,0 +1,23 @@
<query id="getDefaultModules" action="select">
<tables>
<table name="modules" />
<table name="module_categories" />
</tables>
<columns>
<column name="modules.site_srl" />
<column name="modules.module" />
<column name="modules.mid" />
<column name="modules.browser_title" />
<column name="module_categories.title" alias="category" />
<column name="modules.module_srl" />
</columns>
<conditions>
<condition operation="equal" column="modules.site_srl" default="0" />
<condition operation="equal" column="modules.module_category_srl" default="module_categories.module_category_srl" />
</conditions>
<navigation>
<index var="sort_index" default="module" order="asc" />
<index var="sort_index" default="module_categories.title" order="asc" />
<index var="sort_index" default="mid" order="asc" />
</navigation>
</query>

View file

@ -0,0 +1,8 @@
<query id="getSiteCount" action="select">
<tables>
<table name="sites" />
</tables>
<columns>
<column name="count(*)" alias="count"/>
</columns>
</query>

View file

@ -0,0 +1,23 @@
<query id="getSiteModules" action="select">
<tables>
<table name="sites" />
<table name="modules" />
</tables>
<columns>
<column name="sites.domain" />
<column name="modules.site_srl" />
<column name="modules.module" />
<column name="modules.mid" />
<column name="modules.browser_title" />
<column name="modules.module_srl" />
</columns>
<conditions>
<condition operation="equal" column="sites.site_srl" var="site_srl" />
<condition operation="equal" column="sites.domain" var="site_keyword" pipe="and" />
<condition operation="equal" column="sites.site_srl" default="modules.site_srl" pipe="and"/>
</conditions>
<navigation>
<index var="sort_index" default="modules.module" order="asc" />
<index var="sort_index" default="modules.mid" order="asc" />
</navigation>
</query>

View file

@ -56,3 +56,17 @@ function completeCopyModule() {
if(typeof(opener)!='undefined') opener.location.href = opener.location.href;
window.close();
}
/* 모듈 선택기에서 선택된 모듈의 입력 */
function insertModule(id, module_srl, mid, browser_title, multi_select) {
if(typeof(multi_select)=='undefined') multi_select = true;
if(!window.opener) window.close();
if(typeof(opener.insertSelectedModule)=='undefined') return;
if(multi_select) {
opener.insertSelectedModules(id, module_srl, mid, browser_title);
} else {
opener.insertSelectedModule(id, module_srl, mid, browser_title);
window.close();
}
}

View file

@ -0,0 +1,80 @@
<!--%import("./js/module_admin.js")-->
<div id="popHeadder">
<h3>{$lang->module_selector}</h3>
</div>
<div id="popBody">
<form action="./" method="post">
<input type="hidden" name="module" value="module" />
<input type="hidden" name="act" value="dispModuleAdminSelectList" />
<input type="hidden" name="id" value="{$id}" />
<input type="hidden" name="type" value="{$type}" />
<table class="adminTable" cellspacing="0">
<tbody>
<!--@if($site_count && $logged_info->is_admin == 'Y')-->
<tr>
<th><div>{$lang->virtual_site}</div></th>
<td>
<input type="text" name="site_keyword" value="{$site_keyword}" class="inputTypeText w200" /> <span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
<p>{$lang->about_search_virtual_site}</p>
</td>
</tr>
<!--@end-->
<tr>
<th><div>{$lang->module}</div></th>
<td>
<select name="selected_module">
<!--@foreach($mid_list as $key=>$val)-->
<option value="{$key}" <!--@if($selected_module == $key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select><span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
</td>
</tr>
</tbody>
</table>
<table class="adminTable" cellspacing="0">
<thead>
<tr>
<!--@if($module_category_exists)--><th><div>{$lang->module_category}</div></th><!--@end-->
<th><div>{$lang->mid}</div></th>
<th class="wide"><div>{$lang->browser_title}</div></th>
<th><div>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</div></th>
<tr>
</thead>
<tbody>
<!--@if($module_category_exists)-->
<!--@foreach($selected_mids as $key => $val)-->
<tr>
<td rowspan="{count($val)}">{$key}</td>
{@ $_idx =0; }
<!--@foreach($val as $k => $v)-->
<!--@if($_idx >0)--><tr><!--@end-->
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{$v->browser_title}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
<!--@if($_idx <count($val))--></tr><!--@end-->
{@ $_idx ++; }
<!--@end-->
</tr>
<!--@end-->
<!--@else-->
<!--@foreach($selected_mids as $key => $val)-->
<!--@foreach($val as $k => $v)-->
<tr>
<td>{$k}</td>
<td>{$v->browser_title}</td>
<td><a href="#" onclick="insertModule('{$id}', {$v->module_srl}, '{$k}', '{$v->browser_title}',{$type=='single'?'false':'true'}); return false;" class="button green"><span>{$type=='single'?$lang->cmd_select:$lang->cmd_insert}</span></a></td>
</tr>
<!--@end-->
<!--@end-->
<!--@end-->
</tbody>
</table>
</form>
</div>
<div id="popFooter" class="tCenter gap1">
<span class="button red"><input type="button" value="{$lang->cmd_close}" onclick="window.close(); return false;"/></span>
</div>