mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-17 10:19:55 +09:00
merge from 1.5.3.2 (~r11225)
git-svn-id: http://xe-core.googlecode.com/svn/trunk@11226 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
54e3a72065
commit
77f5aa2671
313 changed files with 8058 additions and 14251 deletions
|
|
@ -142,6 +142,11 @@
|
|||
$addon_info->mid_list = array();
|
||||
}
|
||||
|
||||
if($extra_vals->xe_run_method)
|
||||
{
|
||||
$addon_info->xe_run_method = $extra_vals->xe_run_method;
|
||||
}
|
||||
|
||||
|
||||
// Add information
|
||||
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
|
||||
|
|
@ -187,7 +192,10 @@
|
|||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->attrs->type;
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if($obj->name)
|
||||
{
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
}
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
|
||||
|
|
@ -280,7 +288,10 @@
|
|||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->type->body ? $val->type->body : 'text';
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if($obj->name)
|
||||
{
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
}
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
// 'Select'type obtained from the option list.
|
||||
|
|
|
|||
|
|
@ -163,14 +163,33 @@
|
|||
$extra_vars = unserialize($val->extra_vars);
|
||||
$mid_list = $extra_vars->mid_list;
|
||||
if(!is_array($mid_list)||!count($mid_list)) $mid_list = null;
|
||||
$mid_list = base64_encode(serialize($mid_list));
|
||||
|
||||
$buff .= '$rm = \'' . $extra_vars->xe_run_method . "';";
|
||||
$buff .= '$ml = array(';
|
||||
if($mid_list)
|
||||
{
|
||||
foreach($mid_list as $mid)
|
||||
{
|
||||
$buff .= "'$mid' => 1,";
|
||||
}
|
||||
}
|
||||
$buff .= ');';
|
||||
$buff .= sprintf('$addon_file = \'./addons/%s/%s.addon.php\';', $addon, $addon);
|
||||
|
||||
if($val->extra_vars) {
|
||||
unset($extra_vars);
|
||||
$extra_vars = base64_encode($val->extra_vars);
|
||||
}
|
||||
$addon_include = sprintf('unset($addon_info); $addon_info = unserialize(base64_decode(\'%s\')); @include($addon_file);', $extra_vars);
|
||||
|
||||
$buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; $addon_file = "%s.addon.php"; if(file_exists($addon_path.$addon_file) && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); @include($addon_path.$addon_file); }', $mid_list, './', $addon, $addon, $extra_vars);
|
||||
$buff .= 'if(file_exists($addon_file)){';
|
||||
$buff .= 'if($rm === \'no_run_selected\'){';
|
||||
$buff .= 'if(!isset($ml[$_m])){';
|
||||
$buff .= $addon_include;
|
||||
$buff .= '}}else{';
|
||||
$buff .= 'if(isset($ml[$_m]) || count($ml) === 0){';
|
||||
$buff .= $addon_include;
|
||||
$buff .= '}}}';
|
||||
}
|
||||
|
||||
$buff = sprintf('<?php if(!defined("__XE__")) exit(); $_m = Context::get(\'mid\'); %s ?>', $buff);
|
||||
|
|
|
|||
|
|
@ -115,4 +115,13 @@
|
|||
<value xml:lang="zh-CN"><![CDATA[此插件不存在设置。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[此附加元件的設定不存在。]]></value>
|
||||
</item>
|
||||
<item name="run_method">
|
||||
<value xml:lang="ko"><![CDATA[작동 방식]]></value>
|
||||
</item>
|
||||
<item name="run_selected_module">
|
||||
<value xml:lang="ko"><![CDATA[선택한 모듈에서 사용]]></value>
|
||||
</item>
|
||||
<item name="no_run_selected_module">
|
||||
<value xml:lang="ko"><![CDATA[선택한 모듈에서 사용안함]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -49,6 +49,13 @@
|
|||
<block cond="$mid_list">
|
||||
<h3 class="h3">{$lang->module}</h3>
|
||||
<p>{$lang->about_addon_mid}</p>
|
||||
<p class="q">{$lang->run_method}</p>
|
||||
<p class="a">
|
||||
<select name="xe_run_method">
|
||||
<option value="run_selected" selected="selected"|cond="$addon_info->xe_run_method === 'run_selected'">{$lang->run_selected_module}</option>
|
||||
<option value="no_run_selected" selected="selected"|cond="$addon_info->xe_run_method === 'no_run_selected'">{$lang->no_run_selected_module}</option>
|
||||
</select>
|
||||
</p>
|
||||
<p><input type="checkbox" id="check_all" /> <label for="check_all">Check all</label></p>
|
||||
<fieldset loop="$mid_list => $module_category_srl, $modules" style="border: 1px solid #ccc; margin:1em 0; padding:.5em 1em">
|
||||
<legend cond="$modules->title">{$modules->title}</legend>
|
||||
|
|
|
|||
|
|
@ -123,10 +123,16 @@
|
|||
|
||||
$args->site_srl = $site_info->site_srl;
|
||||
$args->layout_srl = $vars->layout;
|
||||
|
||||
// layout submit
|
||||
$output = executeQuery('layout.updateAllLayoutInSiteWithTheme', $args);
|
||||
if (!$output->toBool()) return $output;
|
||||
|
||||
// set layout info member
|
||||
$oModuleController = &getController('module');
|
||||
$memberConfig->layout_srl = $vars->layout;
|
||||
$oModuleController->updateModuleConfig('member', $memberConfig);
|
||||
|
||||
$skin_args->site_srl = $site_info->site_srl;
|
||||
|
||||
foreach($vars as $key=>$val){
|
||||
|
|
@ -148,13 +154,13 @@
|
|||
$skin_args->module_srls = implode(',', $article_module_srls);
|
||||
}
|
||||
}
|
||||
|
||||
$skin_output = executeQuery('module.updateAllModuleSkinInSiteWithTheme', $skin_args);
|
||||
if (!$skin_output->toBool()) return $skin_output;
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_config = $oModuleModel->getModuleConfig($module, $site_info->site_srl);
|
||||
$module_config->skin = $val;
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->insertModuleConfig($module, $module_config, $site_info->site_srl);
|
||||
}
|
||||
}
|
||||
|
|
@ -169,6 +175,7 @@
|
|||
// Save File
|
||||
FileHandler::writeFile($theme_file, $theme_buff);
|
||||
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminTheme');
|
||||
return $this->setRedirectUrl($returnUrl, $output);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -215,10 +215,9 @@
|
|||
|
||||
$oXmlParser = new XmlParser();
|
||||
$_xml_obj = $oXmlParser->loadXmlFile($info_file);
|
||||
if(!$_xml_obj->theme) return;
|
||||
|
||||
if(!$_xml_obj->theme) return;
|
||||
$xml_obj = $_xml_obj->theme;
|
||||
if(!$_xml_obj->theme) return;
|
||||
|
||||
// 스킨이름
|
||||
$theme_info->name = $theme_name;
|
||||
|
|
@ -247,7 +246,7 @@
|
|||
$layout_parse = explode('/',$layout_path);
|
||||
switch($layout_parse[1]){
|
||||
case 'themes' : {
|
||||
$layout_info->name = $theme_name.'.'.$layout_parse[count($layout_parse)-1];
|
||||
$layout_info->name = $theme_name.'|@|'.$layout_parse[count($layout_parse)-1];
|
||||
break;
|
||||
}
|
||||
case 'layouts' : {
|
||||
|
|
@ -255,6 +254,7 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
$layout_info->title = $layout_parse[count($layout_parse)-1];
|
||||
$layout_info->path = $layout_path;
|
||||
|
||||
$site_info = Context::get('site_module_info');
|
||||
|
|
@ -278,7 +278,7 @@
|
|||
$args->site_srl = (int)$site_module_info->site_srl;
|
||||
$args->layout_srl = getNextSequence();
|
||||
$args->layout = $layout_info->name;
|
||||
$args->title = $layout_info->name;
|
||||
$args->title = $layout_info->title;
|
||||
$args->layout_type = "P";
|
||||
// Insert into the DB
|
||||
$oLayoutAdminController = &getAdminController('layout');
|
||||
|
|
@ -302,7 +302,7 @@
|
|||
case 'themes' : {
|
||||
$is_theme = true;
|
||||
$module_name = $skin_parse[count($skin_parse)-1];
|
||||
$skin_info->name = $theme_name.'.'.$module_name;
|
||||
$skin_info->name = $theme_name.'|@|'.$module_name;
|
||||
break;
|
||||
}
|
||||
case 'modules' : {
|
||||
|
|
@ -469,6 +469,31 @@
|
|||
$output = executeQueryArray('admin.getSiteAllList', $args, $columnList);
|
||||
if($output->toBool()) $siteList = $output->data;
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
foreach($siteList as $key => $value)
|
||||
{
|
||||
$args->site_srl = $value->site_srl;
|
||||
$list = $oModuleModel->getModuleSrlList($args);
|
||||
|
||||
if(!is_array($list))
|
||||
{
|
||||
$list = array($list);
|
||||
}
|
||||
|
||||
foreach($list as $k => $v)
|
||||
{
|
||||
if(!is_dir('./modules/' . $v->module))
|
||||
{
|
||||
unset($list[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
if(!count($list))
|
||||
{
|
||||
unset($siteList[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$this->add('site_list', $siteList);
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -3,7 +3,7 @@
|
|||
<p class="power">
|
||||
Powered by <strong><a href="{_XE_LOCATION_SITE_}" target="_blank">XE</a></strong>. <span class="vr">|</span>
|
||||
<strong>Your version</strong>: {__XE_VERSION__} <span class="vr">|</span>
|
||||
<!--@if(isset($latestVersion))--><strong>Latest version</strong>: <a href="{$latestVersion->url}" target="_blank" title="{zdate($latestVersion->date, 'Y-m-d')}">{$latestVersion->title}</a><!--@end-->
|
||||
<!--@if(isset($latestVersion))--><strong>Latest version</strong>: <a href="{htmlspecialchars(html_entity_decode($latestVersion->url))}" target="_blank" title="{zdate($latestVersion->date, 'Y-m-d')}">{$latestVersion->title}</a><!--@end-->
|
||||
</p>
|
||||
<p class="cache">
|
||||
<button type="button" class="text" onclick="doResetAdminMenu();">{$lang->cmd_admin_menu_reset}</button> <span class="vr">|</span>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
<div class="gnb">
|
||||
<ul class="nav">
|
||||
<ul class="nav-gnb">
|
||||
<li loop="$gnbUrlList=>$key,$value" class="activeOn"|cond="$parentSrl==$key"><a href="{getFullUrl('')}{$value['href']}"><span>{$value['text']}</span></a>
|
||||
<ul cond="count($value['list'])">
|
||||
<li loop="$value['list']=>$key2,$value2"><a href="{getFullUrl('')}{$value2['href']}">{$value2['text']}</a></li>
|
||||
|
|
@ -31,23 +31,6 @@
|
|||
<option cond="count($value['list']) == 0" value="{getFullUrl('')}{$value['href']}" selected="selected"|cond="!$subMenuTitle">{$value['text']}</option>
|
||||
</block>
|
||||
</select>
|
||||
<div class="bmk active">
|
||||
<a href="#bmk" class="bmAnchor" data-effect="fade" data-duration="200">{$lang->favorite}</a>
|
||||
<ul id="bmk" class="bmContent">
|
||||
<li loop="$favorite_list => $favorite">
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</a>
|
||||
<form class="action" action="">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procAdminToggleFavorite" />
|
||||
<input type="hidden" name="site_srl" value="0" />
|
||||
<input type="hidden" name="module_name" value="{$favorite->module}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" class="text" title="{$lang->cmd_delete}">x</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($favorite_list) || count($favorite_list) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<select class="mnv">
|
||||
<option>{$lang->favorite}</option>
|
||||
<option loop="$favorite_list => $favorite" value="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</option>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<ul>
|
||||
<!--@if(count($gnbUrlList[$parentSrl]['list']) > 0)-->
|
||||
<!--@foreach($gnbUrlList[$parentSrl]['list'] AS $key=>$value)-->
|
||||
<li <!--@if($value['text'] == $subMenuTitle)-->class="active"<!--@end-->><a href="{html_entity_decode($value['href'])}">{$value['text']}</a></li>
|
||||
<li <!--@if($value['text'] == $subMenuTitle)-->class="active"<!--@end-->><a href="{htmlspecialchars(html_entity_decode($value['href']))}">{$value['text']}</a></li>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</ul>
|
||||
|
|
|
|||
17
modules/admin/tpl/_spShortcut.html
Normal file
17
modules/admin/tpl/_spShortcut.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<div class="sct well">
|
||||
<h2>{$lang->favorite}</h2>
|
||||
<ul class="nav nav-list">
|
||||
<li loop="$favorite_list => $favorite">
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', $favorite->admin_index_act)}">{$favorite->title}</a>
|
||||
<form class="action" action="./">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procAdminToggleFavorite" />
|
||||
<input type="hidden" name="site_srl" value="0" />
|
||||
<input type="hidden" name="module_name" value="{$favorite->module}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" class="text" title="{$lang->cmd_delete}">×</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($favorite_list) || count($favorite_list) < 1"><a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}">{$lang->no_data}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
<h2 class="h2">{$lang->admin_menu_add}</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<p class="q"><label for="name">{$lang->module}</label></p>
|
||||
<p class="q"><label for="menuNameList">{$lang->module}</label></p>
|
||||
<div class="a">
|
||||
<select name="menu_name" id="menuNameList">
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -30,21 +30,21 @@
|
|||
<p class="a"><input type="text" name="ftp_port" id="ftp_port" value="{$ftp_info->ftp_port}" /><span class="desc">Default : 21</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="ftp_passive">{$lang->about_use_ftp_passive_mode}</label></p>
|
||||
<p class="q"><label>{$lang->about_use_ftp_passive_mode}</label></p>
|
||||
<p class="a">
|
||||
<input type="radio" name="ftp_pasv" id="ftp_passive_y" value="Y" <!--@if($ftp_info->ftp_pasv == 'Y')-->checked="checked" <!--@end-->/> <label for="ftp_passive_y">{$lang->cmd_yes}</label>
|
||||
<input type="radio" name="ftp_pasv" id="ftp_passive_n" value="N" <!--@if($ftp_info->ftp_pasv != 'Y')-->checked="checked" <!--@end-->/> <label for="ftp_passive_n">{$lang->cmd_no}</label>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="sftp">{$lang->about_use_sftp_support}</label><span cond="!$sftp_support"><label for="sftp"> ({$lang->disable_sftp_support})</label></span></p>
|
||||
<p class="q"><label>{$lang->about_use_sftp_support}</label><span cond="!$sftp_support"><label> ({$lang->disable_sftp_support})</label></span></p>
|
||||
<p class="a">
|
||||
<input type="radio" name="sftp" id="sftp_y" value="Y" <!--@if($ftp_info->sftp == 'Y')-->checked="checked" <!--@end--> <!--@if(!$sftp_support)-->disabled<!--@end-->/> <label for="sftp_y">{$lang->cmd_yes}</label>
|
||||
<input type="radio" name="sftp" id="sftp_y" value="Y" <!--@if($ftp_info->sftp == 'Y')-->checked="checked" <!--@end--><!--@if(!$sftp_support)-->disabled <!--@end-->/> <label for="sftp_y">{$lang->cmd_yes}</label>
|
||||
<input type="radio" name="sftp" id="sftp_n" value="N" <!--@if($ftp_info->sftp != 'Y')-->checked="checked" <!--@end-->/> <label for="sftp_n">{$lang->cmd_no}</label>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="ftp_path">{$lang->msg_ftp_installed_ftp_realpath}</label></p>
|
||||
<p class="q"><label for="ftp_root_path">{$lang->msg_ftp_installed_ftp_realpath}</label></p>
|
||||
<p class="a">
|
||||
<input type="text" name="ftp_root_path" id="ftp_root_path" value="{$ftp_info->ftp_root_path}" />
|
||||
<a href="#ftpSuggestion" onclick="getFTPList(); return false;" class="tgAnchor">{$lang->ftp_get_list}</a>
|
||||
|
|
|
|||
|
|
@ -20,33 +20,64 @@ jQuery(function($){
|
|||
<load target="../install/lang/lang.xml" usecdn="true" />
|
||||
<load target="../../session/tpl/js/session.js" usecdn="true" />
|
||||
|
||||
<form action="" method="post" id="ftp_form" class="form" enctype="multipart/form-data">
|
||||
<script>
|
||||
jQuery(function($){
|
||||
$('.moduleSearch').bind('moduleSelect', function(e, aSelected){
|
||||
var sType, sName, sSrl;
|
||||
|
||||
sType = aSelected[0].type;
|
||||
sName = aSelected[0].browser_title;
|
||||
sSrl = aSelected[0].module_srl;
|
||||
|
||||
$('#_target_module').val(sName);
|
||||
$('#index_module_srl').val(sSrl);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<form action="./" method="post" id="ftp_form" class="form" enctype="multipart/form-data">
|
||||
<input type="hidden" name="module" value="install" />
|
||||
<input type="hidden" name="act" value="procInstallAdminConfig" />
|
||||
<h1 class="h1">{$lang->menu_gnb_sub['adminConfigurationGeneral']}</h1>
|
||||
<fieldset class="section">
|
||||
<h2 class="h2">{$lang->subtitle_primary}</h2>
|
||||
<ul>
|
||||
<li class="modulefinder">
|
||||
<li class="modulefinder moduleSearch">
|
||||
<p class="q">{$lang->about_start_module}</p>
|
||||
<p class="a">
|
||||
<div class="a">
|
||||
<input type="hidden" name="index_module_srl" id="index_module_srl" value="{$start_module->index_module_srl}" />
|
||||
<input type="text" name="_target_module" id="_target_module" value="{$start_module->browser_title} ({$start_module->mid})" readonly />
|
||||
<a href="#modalWindow" class="modalAnchor" onClick="viewSiteSearch()">{$lang->cmd_find}</a> </p>
|
||||
<p class="site_keyword_search" style="display:none">
|
||||
<input type="text" name="site_keyword" /> <a href="#suggestion3" class="tgAnchor findsite">{$lang->cmd_confirm}</a>
|
||||
<div id="suggestion3" class="tgContent suggestion" >
|
||||
<ul></ul>
|
||||
<a href="#moduleSearchWindow" class="tgAnchor moduleSearch">{$lang->cmd_find}</a>
|
||||
<div id="moduleSearchWindow" class="moduleSearchWindow tgContent">
|
||||
<div class="siteList sectionDiv">
|
||||
<h2>{$lang->select_site}</h2>
|
||||
<div class="siteListSearchBox">
|
||||
<div class="siteListSearchBoxBorder">
|
||||
<div class="searchImg icon-search"></div>
|
||||
<input type="text" class="siteListSearchInput" name="site_filter">
|
||||
</div>
|
||||
</div>
|
||||
<div class="siteListUL">
|
||||
<ul>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<select class="moduleList" style="width:290px"></select>
|
||||
</p>
|
||||
<p>
|
||||
<select class="moduleIdList" style="width:290px"></select>
|
||||
<a href="#" id="sitefind_addBtn" onclick="setStartModule()" style="display:none;">{$lang->cmd_select}</a>
|
||||
</p>
|
||||
</p>
|
||||
<div class="moduleTypeList sectionDiv">
|
||||
<h2>{$lang->select_module_type}</h2>
|
||||
<div>
|
||||
<ul class="moduleTypeListUL">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="moduleInstanceList sectionDiv">
|
||||
<h2>{$lang->select_module_instance}</h2>
|
||||
<div>
|
||||
<select class="moduleInstanceListSelect" size="8">
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn_primary moduleSearch_ok">{$lang->cmd_select}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q">{$lang->about_lang_select}</p>
|
||||
|
|
@ -64,13 +95,13 @@ jQuery(function($){
|
|||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="">{$lang->about_default_lang}</label></p>
|
||||
<p class="q"><label for="change_lang_type">{$lang->about_default_lang}</label></p>
|
||||
<p class="a">
|
||||
<select name="change_lang_type">
|
||||
<select name="change_lang_type" id="change_lang_type">
|
||||
<!--@foreach($lang_supported as $key => $val)-->
|
||||
<option value="{$key}" <!--@if($key==$selected_lang)-->selected="selected"<!--@end-->>{$val}</option>
|
||||
<!--@endforeach-->
|
||||
</select>
|
||||
</select>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
|
|
@ -132,7 +163,7 @@ jQuery(function($){
|
|||
<h2 class="h2">{$lang->subtitle_advanced}</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<p class="q"><label for="admin_ip">{$lang->about_admin_ip_limit}</label>[<a href="#helpAdminip" class="tgAnchor">?</a>]</p>
|
||||
<p class="q"><label for="admin_ip_list">{$lang->about_admin_ip_limit}</label>[<a href="#helpAdminip" class="tgAnchor">?</a>]</p>
|
||||
<div class="tgContent layer" id="helpAdminip">
|
||||
<p>{$lang->detail_about_admin_ip_limit}</p>
|
||||
</div>
|
||||
|
|
@ -148,7 +179,7 @@ jQuery(function($){
|
|||
<p class="a"><input type="text" name="default_url" id="default_url" value="{$default_url}"/></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="use_ssl">{$lang->use_ssl}</label>[<a href="#helpUsessl" class="tgAnchor">?</a>]</p>
|
||||
<p class="q"><label>{$lang->use_ssl}</label>[<a href="#helpUsessl" class="tgAnchor">?</a>]</p>
|
||||
<div class="tgContent layer" id="helpUsessl">
|
||||
<p>{$lang->about_use_ssl}</p>
|
||||
</div>
|
||||
|
|
@ -159,11 +190,11 @@ jQuery(function($){
|
|||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q">{$lang->server_ports}</p>
|
||||
<p class="q"><label>{$lang->server_ports}</label></p>
|
||||
<p class="a">
|
||||
<label for="">HTTP:</label> <input type="text" name="http_port" id="http_port" size="5" value="{$http_port}" style="width:40px" />
|
||||
<label for="http_port">HTTP:</label> <input type="text" name="http_port" id="http_port" size="5" value="{$http_port}" style="width:40px" />
|
||||
|
||||
<label for="">HTTPS:</label> <input type="text" name="https_port" id="https_port" size="5" value="{$https_port}" style="width:40px" />
|
||||
<label for="https_port">HTTPS:</label> <input type="text" name="https_port" id="https_port" size="5" value="{$https_port}" style="width:40px" />
|
||||
</p>
|
||||
</li>
|
||||
<li cond="__XE_CDN_VERSION__!='%__XE_CDN_VERSION__%'">
|
||||
|
|
@ -174,14 +205,14 @@ jQuery(function($){
|
|||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="">{$lang->about_use_rewrite}</label></p>
|
||||
<p class="q"><label>{$lang->about_use_rewrite}</label></p>
|
||||
<p class="a">
|
||||
<input type="radio" name="use_rewrite" id="use_rewrite_y" value="Y" <!--@if($use_rewrite == 'Y')-->checked="checked" <!--@end-->/> <label for="use_rewrite_y">{$lang->cmd_yes}</label>
|
||||
<input type="radio" name="use_rewrite" id="use_rewrite_n" value="N" <!--@if($use_rewrite != 'Y')-->checked="checked" <!--@end-->/> <label for="use_rewrite_n">{$lang->cmd_no}</label>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="use_sso">{$lang->about_use_sso}</label>[<a href="#helpUsesso" class="tgAnchor">?</a>]</p>
|
||||
<p class="q"><label>{$lang->about_use_sso}</label>[<a href="#helpUsesso" class="tgAnchor">?</a>]</p>
|
||||
<div class="tgContent layer" id="helpUsesso">
|
||||
<p>{$lang->about_sso}</p>
|
||||
</div>
|
||||
|
|
@ -191,7 +222,7 @@ jQuery(function($){
|
|||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="">{$lang->use_db_session}</label>[<a href="#helpUsedbSession" class="tgAnchor">?</a>]</p>
|
||||
<p class="q"><label>{$lang->use_db_session}</label>[<a href="#helpUsedbSession" class="tgAnchor">?</a>]</p>
|
||||
<div class="tgContent layer" id="helpUsedbSession">
|
||||
<p>{$lang->about_db_session}</p>
|
||||
</div>
|
||||
|
|
@ -201,7 +232,7 @@ jQuery(function($){
|
|||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="">{$lang->qmail_compatibility}</label>[<a href="#helpQmail" class="tgAnchor">?</a>]</p>
|
||||
<p class="q"><label>{$lang->qmail_compatibility}</label>[<a href="#helpQmail" class="tgAnchor">?</a>]</p>
|
||||
<div class="tgContent layer" id="helpQmail">
|
||||
<p>{$lang->about_qmail_compatibility}</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
@charset "utf-8";
|
||||
@charset "utf-8";
|
||||
/* Element Reset */
|
||||
header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{display:block}
|
||||
.x,
|
||||
|
|
@ -6,7 +6,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
|
|||
.x input,
|
||||
.x textarea,
|
||||
.x select,
|
||||
.x button{font-family:Tahoma,Geneva,sans-serif;font-size:12px;color:#333}
|
||||
.x button{font-size:13px;color:#333}
|
||||
.x button,
|
||||
.x input[type=submit],
|
||||
.x input[type=reset],
|
||||
|
|
@ -15,11 +15,10 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
|
|||
.x p{line-height:1.5}
|
||||
/* Section & Heading */
|
||||
.x .section{margin:1em 0;padding:0;border:0}
|
||||
.x .h1,
|
||||
.x .h2,
|
||||
.x .h3,
|
||||
.x .h4{position:relative;border-style:solid;border-top:0;border-right:0;zoom:1;padding-left:8px}
|
||||
.x .h1{border-width:4px;font-size:24px;border-color:#666}
|
||||
.x .h1{background:#444;border-radius:4px;color:#fff;margin:0 0 1em 0;font-size:16px;padding:0 15px;line-height:36px}
|
||||
.x .h2{border-width:3px;font-size:20px;border-color:#888}
|
||||
.x .h3{border-width:2px;font-size:16px;border-color:#aaa}
|
||||
.x .h4{border-width:1px;font-size:12px;border-color:#ccc}
|
||||
|
|
@ -74,7 +73,7 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
|
|||
.x .table th.text,
|
||||
.x .table td.text{width:100%}
|
||||
/* Form */
|
||||
.x .form{margin:1em 0;padding:0}
|
||||
.x .form{margin:0 0 1em 0;padding:0}
|
||||
.x .form fieldset{margin:0 0 2em 0;padding:0;border:0}
|
||||
.x .form.search fieldset{border:1px solid #ccc;padding:5px 15px;border-radius:3px}
|
||||
.x .form em{font-style:normal;color:#e00}
|
||||
|
|
@ -119,49 +118,40 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
|
|||
/* Global Navigation Bar */
|
||||
.x .gnb{height:34px;clear:both;border:1px solid #c1c1c1;border-left:0;border-right:0;background-color:#efefef;background:#efefef -webkit-gradient(linear, 0% 0%, 0% 100%, from(#efefef), to(#dcdcdc));background:#efefef -moz-linear-gradient(top, #efefef, #dcdcdc);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#efefef, endColorStr=#dcdcdc);zoom:1}
|
||||
.x .gnb:after{content:"";display:block;clear:both}
|
||||
.x .gnb .nav{float:left;position:relative;display:inline-block;*display:inline;zoom:1;margin:0 0 0 20px;padding:1px;list-style:none}
|
||||
.x .gnb .nav ul{_position:absolute;display:block;_display:inline;zoom:1;clear:both;margin:0;padding:0;border:0;overflow:hidden}
|
||||
.x .gnb.active .nav{top:-5px;padding:5px 5px 5px 0;margin:0 0 -100% 20px;border:1px solid #aaa;background:#fff;box-shadow:0 0 10px #999;border-radius:5px}
|
||||
.x .gnb.active .nav ul{top:0;_position:relative;box-shadow:none;display:block;_display:inline;clear:both;padding:0;margin:0;border:0}
|
||||
.x .gnb .nav:after{content:"";display:block;clear:both}
|
||||
.x .gnb .nav li{position:relative;display:inline-block;*display:inline;zoom:1;vertical-align:top;overflow:hidden;margin:0}
|
||||
.x .gnb .nav li.activeOn{z-index:10}
|
||||
.x .gnb .nav li.activeOn>a{border:1px solid #ccc}
|
||||
.x .gnb .nav li li{display:block;_float:left;clear:both;overflow:hidden;border:0;margin:0}
|
||||
.x .gnb .nav li li:first-child{border:0}
|
||||
.x .gnb .nav li a{display:block;_float:left;font-weight:bold;color:#333;font-size:12px;height:14px;padding:9px 0;white-space:nowrap;text-decoration:none;text-shadow:0 1px 0 #fff;zoom:1}
|
||||
.x .gnb .nav li a span{padding:0 15px;border-left:1px solid #fff}
|
||||
.x .gnb.active .nav li a span,
|
||||
.x .gnb .nav li:first-child a span,
|
||||
.x .gnb .nav li.activeOn+li a span{border:0;margin:0 0 0 1px}
|
||||
.x .gnb .nav li a:hover,
|
||||
.x .gnb .nav li a:active,
|
||||
.x .gnb .nav li a:focus{background:#f4f4f4}
|
||||
.x .gnb .nav li.activeOn>a{background:#fff;padding:8px 0}
|
||||
.x .gnb .nav li li a{color:#555;background:#fff;padding:5px 15px !important;font-weight:normal !important;border:0 !important}
|
||||
.x .gnb .nav li li a:hover,
|
||||
.x .gnb .nav li li a:active,
|
||||
.x .gnb .nav li li a:focus{border:0;background:#eee}
|
||||
.x .gnb .bmk{position:relative;float:right;padding:8px 15px;margin:0 20px -100% 0;text-align:right;display:inline}
|
||||
.x .gnb .bmk.active{top:-5px;padding:12px 14px 10px 15px;background-color:#fff;border:1px solid #aaa;box-shadow:0 0 10px #999;border-radius:5px}
|
||||
.x .gnb .bmk .bmAnchor{height:16px;text-shadow:0 1px 0 #fff;display:inline-block;padding:0 0 0 20px;background:url(../img/iconFavorite.gif) no-repeat 0 -16px}
|
||||
.x .gnb .bmk ul{display:none}
|
||||
.x .gnb .bmk.active ul{position:relative;list-style:none;display:block !important;text-align:left;background:none;margin:0 !important;padding:10px 0 0 0 !important;border:0;box-shadow:none;border-radius:0}
|
||||
.x .gnb .bmk li{display:block;position:relative;padding:3px 15px 3px 0 !important;white-space:nowrap}
|
||||
.x .gnb .bmk li a{display:inline;padding:0;background:none !important;font-weight:normal}
|
||||
.x .gnb .bmk li .action{position:absolute;top:0;right:0}
|
||||
.x .gnb .bmk li .action .text{text-decoration:none;width:16px;text-align:center;margin:0;padding:0;border:0;background:none;overflow:visible}
|
||||
.x .gnb .nav-gnb{float:left;position:relative;display:inline-block;*display:inline;zoom:1;margin:0 0 0 20px;padding:1px;list-style:none}
|
||||
.x .gnb .nav-gnb ul{_position:absolute;display:block;_display:inline;zoom:1;clear:both;margin:0;padding:0;border:0;overflow:hidden;height:0}
|
||||
.x .gnb.active .nav-gnb{top:-5px;padding:5px 5px 5px 0;margin:0 0 -100% 20px;border:1px solid #aaa;background:#fff;box-shadow:0 0 10px #999;border-radius:5px}
|
||||
.x .gnb.active .nav-gnb ul{top:0;_position:relative;box-shadow:none;display:block;_display:inline;clear:both;padding:0;margin:0;border:0}
|
||||
.x .gnb .nav-gnb:after{content:"";display:block;clear:both}
|
||||
.x .gnb .nav-gnb li{position:relative;display:inline-block;*display:inline;zoom:1;vertical-align:top;overflow:hidden;margin:0}
|
||||
.x .gnb .nav-gnb li.activeOn{z-index:10}
|
||||
.x .gnb .nav-gnb li.activeOn>a{border:1px solid #ccc}
|
||||
.x .gnb .nav-gnb li li{display:block;_float:left;clear:both;overflow:hidden;border:0;margin:0}
|
||||
.x .gnb .nav-gnb li li:first-child{border:0}
|
||||
.x .gnb .nav-gnb li a{display:block;_float:left;font-weight:bold;color:#333;font-size:12px;height:14px;padding:9px 0;white-space:nowrap;text-decoration:none;text-shadow:0 1px 0 #fff;zoom:1}
|
||||
.x .gnb .nav-gnb li a span{padding:0 15px;border-left:1px solid #fff}
|
||||
.x .gnb.active .nav-gnb li a span,
|
||||
.x .gnb .nav-gnb li:first-child a span,
|
||||
.x .gnb .nav-gnb li.activeOn+li a span{border:0;margin:0 0 0 1px}
|
||||
.x .gnb .nav-gnb li a:hover,
|
||||
.x .gnb .nav-gnb li a:active,
|
||||
.x .gnb .nav-gnb li a:focus{background:#f4f4f4}
|
||||
.x .gnb .nav-gnb li.activeOn>a{background:#fff;padding:8px 0}
|
||||
.x .gnb .nav-gnb li li a{color:#555;background:#fff;padding:5px 15px !important;font-weight:normal !important;border:0 !important}
|
||||
.x .gnb .nav-gnb li li a:hover,
|
||||
.x .gnb .nav-gnb li li a:active,
|
||||
.x .gnb .nav-gnb li li a:focus{border:0;background:#eee}
|
||||
.x .gnb .mnv{width:100%;height:32px;display:none}
|
||||
@media only all and (max-width:860px){
|
||||
@media all and (max-width:860px){
|
||||
.x .gnb{height:auto}
|
||||
.x .gnb .nav,
|
||||
.x .gnb .bmk{display:none}
|
||||
.x .gnb .nav-gnb,
|
||||
.x .sct{display:none}
|
||||
.x .gnb .mnv{display:block}
|
||||
}
|
||||
/* Local Navigation */
|
||||
.x .lnb{position:relative;float:left;width:210px;margin:1em 0 1em -240px;line-height:normal;zoom:1;display:inline}
|
||||
.x .lnb .h2{margin-top:0;border-left:0;padding-left:0}
|
||||
.x .lnb ul{margin:0 !important;padding:0;list-style:none}
|
||||
.x .lnb{position:relative;float:left;width:210px;margin:0 0 1em -230px;line-height:normal;zoom:1;display:inline}
|
||||
.x .lnb .h2{position:relative;z-index:2;margin:0 0 -1px 0;padding:0 10px;border:1px solid #444;border-bottom:0;border-radius:4px 4px 0 0;background:#555;font-size:13px;color:#fff;line-height:36px}
|
||||
.x .lnb ul{margin:0 !important;padding:0;list-style:none;position:relative;z-index:1}
|
||||
.x .lnb li{position:relative;margin:0 0 -1px 0;vertical-align:top;zoom:1}
|
||||
.x .lnb li a{display:block;position:relative;padding:8px 10px;text-decoration:none;color:#666;font-weight:bold;background:#fafafa;border:1px solid #eee;zoom:1}
|
||||
.x .lnb li a .i{position:absolute;top:50%;left:100%;margin:-4px 0 0 -16px;width:8px;height:8px;color:#ccc;background:url(../img/iconNavVr.gif) no-repeat left top}
|
||||
|
|
@ -177,6 +167,19 @@ header,footer,section,article,aside,nav,hgroup,details,menu,figure,figcaption{di
|
|||
.x .lnb li.active li a{border:0}
|
||||
.x .lnb li.active ul{display:block;border-top:1px solid #eee}
|
||||
.x .lnb li.active li.active a span{color:#13b200;font-weight:bold;letter-spacing:-1px}
|
||||
.x .lnb li:last-child a,
|
||||
.x .lnb li.active:last-child{border-radius:0 0 4px 4px !important}
|
||||
/* Shortcut */
|
||||
.x .sct{float:right;width:138px;position:relative;right:-160px;margin:0 0 0 -140px;padding:8px 0}
|
||||
.x .sct h2{margin:0 0 5px 15px;font-size:13px}
|
||||
.x .sct ul{margin:0;font-size:12px}
|
||||
.x .sct li{position:relative}
|
||||
.x .sct a{text-decoration:none}
|
||||
.x .sct form{position:absolute;margin:0;padding:0;top:2px;right:-10px}
|
||||
.x .sct .text{text-decoration:none;font-weight:bold;color:#999 !important;width:16px;height:16px;margin:0}
|
||||
.x .sct .text:hover,
|
||||
.x .sct .text:active,
|
||||
.x .sct .text:focus{color:#333 !important}
|
||||
/* Content Navigation */
|
||||
.x .cnb{margin:1em 0;position:relative;zoom:1}
|
||||
.x .cnb:after{content:"";display:block;clear:both}
|
||||
|
|
@ -252,7 +255,7 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x .h2Anchor{position:absolute;right:0;border:0;background:none;color:#00f;text-decoration:underline}
|
||||
/* Skip Navigation */
|
||||
.x .skipNav{margin:0;text-align:center}
|
||||
@media only all and (max-width:860px){
|
||||
@media all and (max-width:860px){
|
||||
.x .skipNav{display:none}
|
||||
}
|
||||
.x .skipNav a{position:absolute;width:1px;height:1px;display:block;padding:10px 0;font-weight:bold;overflow:hidden}
|
||||
|
|
@ -281,7 +284,7 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x .header .account a{color:#fff;display:inline-block;height:14px}
|
||||
.x .header .account a.language{padding-right:16px;background:url(../img/iconArrow.gif) no-repeat right -160px}
|
||||
.x .header #language{position:absolute;top:19px;right:-20px;padding:6px 4px !important;border:1px solid #666;border-top:0;background:#333}
|
||||
@media only all and (max-width:860px){
|
||||
@media all and (max-width:860px){
|
||||
.x .header #language{right:-10px}
|
||||
}
|
||||
.x .header #language li{border:0;display:block;padding:1px 8px 1px 10px;text-align:left;line-height:1}
|
||||
|
|
@ -295,16 +298,17 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x .header .account a:focus{color:#6e9cf2;text-decoration:underline}
|
||||
/* Footer */
|
||||
.x .footer{border-top:1px solid #ddd;text-align:center;font-size:12px;padding:1.5em 0;zoom:1}
|
||||
.x .footer *{font-size:12px}
|
||||
.x .footer:after{content:"";display:block;clear:both}
|
||||
.x .footer p{margin:0}
|
||||
.x .footer .power{float:left}
|
||||
.x .footer .cache{float:right}
|
||||
.x .footer .vr{color:#ccc}
|
||||
/* Body */
|
||||
.x .body{position:relative;z-index:1;padding:1em 20px 1em 260px;zoom:1}
|
||||
.x .body{position:relative;z-index:1;padding:30px 170px 30px 240px;zoom:1}
|
||||
.x .body:after{content:"";display:block;clear:both}
|
||||
/* Content */
|
||||
.x .content{float:right;width:100%;margin-left:-230px;zoom:1}
|
||||
.x .content{float:right;width:100%;margin-left:-100%;zoom:1;outline:0}
|
||||
.x .content:after{content:"";display:block;clear:both}
|
||||
.x .content a{color:#33a}
|
||||
.x .content a:hover,
|
||||
|
|
@ -315,15 +319,16 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x .content .portlet a:active,
|
||||
.x .content .portlet a:focus{text-decoration:underline}
|
||||
/* Dashboard */
|
||||
.x .dashboard{position:relative;float:none;width:auto;margin-left:-230px}
|
||||
.x .dashboard .portlet{float:left;width:48%;margin-right:1em}
|
||||
.x .dashboard .section{margin-top:0}
|
||||
.x .dashboard .portlet{float:left;width:48%;margin-right:1em;margin-top:0}
|
||||
.x .dashboard .portlet:nth-of-type(odd){float:left;width:49%;margin-right:0}
|
||||
.x .dashboard .portlet:nth-of-type(even){float:right;width:49%;margin-right:0}
|
||||
@media only all and (min-width:1300px){
|
||||
@media all and (min-width:1300px){
|
||||
.x .dashboard .portlet{float:left !important;width:32% !important;margin-right:1em !important}
|
||||
}
|
||||
/* Single Column*/
|
||||
.x .single{position:relative;float:none;width:auto;margin-left:-240px}
|
||||
.x .single{padding-left:10px}
|
||||
.x .single .content{position:relative;float:left;width:100%;margin:0}
|
||||
/* Search */
|
||||
.x .search{zoom:1}
|
||||
.x .search:after{content:"";display:block;clear:both}
|
||||
|
|
@ -578,9 +583,9 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x a.cMenu{display:inline-block;width:16px;height:0;padding:16px 0 0 0;overflow:hidden;vertical-align:middle;background:url(../../../../common/img/icon.bubble.png) no-repeat}
|
||||
.x .sTog{float:right;border:0;background-color:transparent;width:28px;height:18px;opacity:.5;filter:alpha(opacity=50)}
|
||||
/* Responsive Layout */
|
||||
@media only all and (max-width:860px){
|
||||
@media all and (max-width:860px){
|
||||
.x .header .account ul{padding-right:10px}
|
||||
.x .body{padding:0}
|
||||
.x .body{padding:1em 0 0 0}
|
||||
.x .content{float:none;margin-left:0}
|
||||
.x .lnb{float:none;width:auto;margin:1em 0}
|
||||
.x .dashboard .portlet{float:none !important;width:auto !important;margin-right:0}
|
||||
|
|
@ -678,6 +683,28 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.x .crossTable input[type=file]{height:22px;line-height:22px;vertical-align:middle;padding:0 4px}
|
||||
.x .clear:after{content:"";display:block;clear:both}
|
||||
|
||||
.x .moduleSearchWindow{position:absolute;width:700px;z-index:100}
|
||||
.x .moduleSearchWindow, .moduleSearchWindow div{margin:0;padding:0;color:#2d2c2d;font-size:12px}
|
||||
.x .moduleSearchWindow h2{margin:0;padding:4px;height:24px;line-height:24px;background:#666;text-align:left;color:#fff;font-size:12px}
|
||||
.x .moduleSearchWindow .sectionDiv{position:relative;margin:0px;background:#fff;border:1px solid}
|
||||
.x .moduleSearchWindow .siteList{float:left;width:295px}
|
||||
.x .moduleSearchWindow .highlight{background:yellow;color:red;font-style:italic}
|
||||
.x .moduleSearchWindow .moduleTypeList{margin-left:5px;float:left;width:200px}
|
||||
.x .moduleSearchWindow .moduleInstanceList{float:right;width:190px}
|
||||
.x .moduleSearchWindow ul{margin:0;padding:0;border:0}
|
||||
.x .moduleSearchWindow li{font-size:12px;border:0;border-bottom:1px solid #ccc;margin:0;padding: 4px 4px;font-family: 나눔고딕,NanumGothic,"맑은 고딕","Malgun Gothic",AppleGothic,돋움,Dotum,굴림,Gulim,sans-serif}
|
||||
.x .moduleSearchWindow li:hover, .moduleSearchWindow li.on{background:#eee;cursor:pointer}
|
||||
.x .moduleSearchWindow li div{margin:0;padding:0;display:inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis}
|
||||
.x .moduleSearchWindow .siteList li div{width:270px}
|
||||
.x .moduleSearchWindow .siteListSearchBox{margin:0;padding:4px 0;height:24px;border-bottom:1px solid #888}
|
||||
.x .moduleSearchWindow .siteListSearchBoxBorder{margin-left:3px;height: 22px;width: 287px;border: 1px solid #ccc}
|
||||
.x .moduleSearchWindow input.siteListSearchInput{margin:0;padding:0;position:relative;float:right;width: 260px;margin-right:4px;border:0}
|
||||
.x .moduleSearchWindow .siteListSearchBox .searchImg{position:relative;float:left;margin-top:4px;margin-left:4px}
|
||||
.x .moduleSearchWindow .moduleTypeList li div{width:170px}
|
||||
.x .moduleSearchWindow .moduleInstanceList li div{width:190px}
|
||||
.x .moduleSearchWindow .moduleSearch_ok {float:right}
|
||||
.x .moduleSearchWindow select.moduleInstanceListSelect {width:100%}
|
||||
|
||||
/*!
|
||||
* Bootstrap v2.0.4
|
||||
*
|
||||
|
|
@ -687,7 +714,7 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
*
|
||||
* Designed and built with all the love in the world@twitter by@mdo and@fat.
|
||||
*/
|
||||
/* Bootstrap - Icon */
|
||||
/* Bootstrap - Icons */
|
||||
[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}
|
||||
[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0}
|
||||
.icon-white{background-image:url("../img/glyphicons-halflings-white.png")}
|
||||
|
|
@ -830,4 +857,69 @@ body.modalContainer{_height:100%;_width:100%} /* IE6 only */
|
|||
.icon-tasks{background-position:-384px -144px}
|
||||
.icon-filter{background-position:-408px -144px}
|
||||
.icon-briefcase{background-position:-432px -144px}
|
||||
.icon-fullscreen{background-position:-456px -144px}
|
||||
.icon-fullscreen{background-position:-456px -144px}
|
||||
/* Bootstrap - Nav */
|
||||
.nav{margin-bottom:18px;margin-left:0;list-style:none}
|
||||
.nav > li > a{display:block}
|
||||
.nav > li > a:hover{text-decoration:none;background-color:#eeeeee}
|
||||
.nav > .pull-right{float:right}
|
||||
.nav .nav-header{display:block;padding:3px 15px;font-weight:bold;line-height:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase}
|
||||
.nav li + .nav-header{margin-top:9px}
|
||||
.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}
|
||||
.nav-list > li > a,
|
||||
.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5)}
|
||||
.nav-list > li > a{padding:3px 15px}
|
||||
.nav-list > .active > a,
|
||||
.nav-list > .active > a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc}
|
||||
.nav-list [class^="icon-"]{margin-right:2px}
|
||||
.nav-list .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff}
|
||||
.nav-tabs,
|
||||
.nav-pills{ *zoom:1}
|
||||
.nav-tabs:before,
|
||||
.nav-pills:before,
|
||||
.nav-tabs:after,
|
||||
.nav-pills:after{display:table;content:""}
|
||||
.nav-tabs:after,
|
||||
.nav-pills:after{clear:both}
|
||||
.nav-tabs > li,
|
||||
.nav-pills > li{float:left}
|
||||
.nav-tabs > li > a,
|
||||
.nav-pills > li > a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}
|
||||
.nav-tabs{border-bottom:1px solid #ddd}
|
||||
.nav-tabs > li{margin-bottom:-1px}
|
||||
.nav-tabs > li > a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}
|
||||
.nav-tabs > li > a:hover{border-color:#eeeeee #eeeeee #dddddd}
|
||||
.nav-tabs > .active > a,
|
||||
.nav-tabs > .active > a:hover{color:#555555;cursor:default;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent}
|
||||
.nav-pills > li > a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
|
||||
.nav-pills > .active > a,
|
||||
.nav-pills > .active > a:hover{color:#ffffff;background-color:#0088cc}
|
||||
.nav-stacked > li{float:none}
|
||||
.nav-stacked > li > a{margin-right:0}
|
||||
.nav-tabs.nav-stacked{border-bottom:0}
|
||||
.nav-tabs.nav-stacked > li > a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||
.nav-tabs.nav-stacked > li:first-child > a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}
|
||||
.nav-tabs.nav-stacked > li:last-child > a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}
|
||||
.nav-tabs.nav-stacked > li > a:hover{z-index:2;border-color:#ddd}
|
||||
.nav-pills.nav-stacked > li > a{margin-bottom:3px}
|
||||
.nav-pills.nav-stacked > li:last-child > a{margin-bottom:1px}
|
||||
.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}
|
||||
.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
|
||||
.nav-tabs .dropdown-toggle .caret,
|
||||
.nav-pills .dropdown-toggle .caret{margin-top:6px;border-top-color:#0088cc;border-bottom-color:#0088cc}
|
||||
.nav-tabs .dropdown-toggle:hover .caret,
|
||||
.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}
|
||||
.nav-tabs .active .dropdown-toggle .caret,
|
||||
.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333}
|
||||
.nav > .dropdown.active > a:hover{color:#000000;cursor:pointer}
|
||||
.nav-tabs .open .dropdown-toggle,
|
||||
.nav-pills .open .dropdown-toggle,
|
||||
.nav > li.dropdown.open.active > a:hover{color:#ffffff;background-color:#999999;border-color:#999999}
|
||||
.nav li.dropdown.open .caret,
|
||||
.nav li.dropdown.open.active .caret,
|
||||
.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100)}
|
||||
/* Bootstrap - Miscellaneous */
|
||||
.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05)}
|
||||
.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15)}
|
||||
.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
|
||||
.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
|
||||
|
|
|
|||
3
modules/admin/tpl/css/admin.min.css
vendored
3
modules/admin/tpl/css/admin.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,7 @@
|
|||
@charset "utf-8";
|
||||
.x,
|
||||
.x table,
|
||||
.x input,
|
||||
.x textarea,
|
||||
.x select,
|
||||
.x button{font-family:Tahoma,Geneva,sans-serif}
|
||||
|
|
@ -4,4 +4,4 @@
|
|||
.x input,
|
||||
.x textarea,
|
||||
.x select,
|
||||
.x button{font-family:나눔고딕,NanumGothic,"맑은 고딕","Malgun Gothic",AppleGothic,돋움,Dotum,굴림,Gulim,sans-serif}
|
||||
.x button{font-family:나눔고딕,NanumGothic,"맑은 고딕","Malgun Gothic",돋움,Dotum,sans-serif}
|
||||
|
|
|
|||
|
|
@ -101,4 +101,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include target="./_spShortcut.html" />
|
||||
<include target="./_spFooter.html" />
|
||||
|
|
|
|||
|
|
@ -154,14 +154,13 @@ jQuery(function($){
|
|||
$.fn.xeMenu = function(){
|
||||
this
|
||||
.attr('role', 'navigation') // WAI-ARIA role
|
||||
.find('>.nav>li')
|
||||
.find('>.nav-gnb>li')
|
||||
.attr('role', 'menuitem') // WAI-ARIA role
|
||||
.find('>ul').css('height','0').end()
|
||||
.filter(':has(>ul)')
|
||||
.attr('aria-haspopup', 'true') // WAI-ARIA
|
||||
.end()
|
||||
.end()
|
||||
.find('>.nav')
|
||||
.find('>.nav-gnb')
|
||||
.mouseover(function(){
|
||||
$(this)
|
||||
.parent('.gnb').addClass('active').end()
|
||||
|
|
@ -185,28 +184,6 @@ jQuery(function($){
|
|||
$(this).mouseover();
|
||||
}
|
||||
});
|
||||
this
|
||||
.find('>.bmk')
|
||||
.removeClass('active')
|
||||
.mouseover(function(){
|
||||
$(this).addClass('active')
|
||||
})
|
||||
.mouseleave(function(){
|
||||
$(this).removeClass('active')
|
||||
})
|
||||
.focusout(function(){
|
||||
var $this = $(this);
|
||||
setTimeout(function(){
|
||||
if(!$this.find(':focus').length) {
|
||||
$this.mouseleave();
|
||||
}
|
||||
}, 1);
|
||||
})
|
||||
.delegate('a', {
|
||||
focus : function(){
|
||||
$(this).mouseover();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$('div.gnb').xeMenu();
|
||||
|
|
@ -576,6 +553,202 @@ $('.modulefinder').xeModuleFinder();
|
|||
|
||||
});
|
||||
|
||||
// Module Search : A New Version Of Module Finder
|
||||
jQuery(function($){
|
||||
|
||||
_xeModuleSearch = function(){
|
||||
var t = this;
|
||||
var $t = $(this);
|
||||
|
||||
var $moduleSearchWindow = $t.find(".moduleSearchWindow");
|
||||
|
||||
var $siteListDiv = $moduleSearchWindow.find('.siteList');
|
||||
var $moduleTypeListDiv = $moduleSearchWindow.find('.moduleTypeList');
|
||||
var $moduleInstanceListDiv = $moduleSearchWindow.find('.moduleInstanceList');
|
||||
|
||||
var $siteList = $siteListDiv.find('UL');
|
||||
var $moduleTypeList = $moduleTypeListDiv.find('UL');
|
||||
var $moduleInstanceList = $moduleInstanceListDiv.find('SELECT');
|
||||
|
||||
var $siteListSearchInput = $moduleSearchWindow.find('INPUT.siteListSearchInput');
|
||||
var aSiteListData;
|
||||
|
||||
var MAX_LIST_HEIGHT = 280;
|
||||
|
||||
function setListSize($UL, nHeight){
|
||||
var nWidth, $div;
|
||||
$UL.find('li div').width('');
|
||||
$UL.css('height', '');
|
||||
$UL.css('overflow-y', '');
|
||||
if($UL.height() > nHeight){
|
||||
$div = $UL.find('li div');
|
||||
$div.width($div.width()-20+'px');
|
||||
$UL.css('height', nHeight+'px');
|
||||
$UL.css('overflow-y', 'auto');
|
||||
}
|
||||
}
|
||||
|
||||
function setSiteList(sFilter){
|
||||
var sDomain;
|
||||
var rxFilter = new RegExp(sFilter, "ig");
|
||||
var list = aSiteListData;
|
||||
|
||||
$siteList.empty();
|
||||
|
||||
for(i=0,c=list.length; i < c; i++) {
|
||||
sDomain = list[i].domain;
|
||||
if(sFilter){
|
||||
if(!sDomain.match(rxFilter)) continue;
|
||||
sDomain = sDomain.replace(rxFilter, function(sKeyword){
|
||||
return '<span class="highlight">'+sKeyword+'</span>';
|
||||
});
|
||||
}
|
||||
|
||||
$li = $('<li />').appendTo($siteList);
|
||||
$('<a>').attr('href', '#').html(
|
||||
'<div>' + sDomain + '</div>' +
|
||||
'<span class="icon-circle-arrow-right" style="display:inline-block;float:right;width:16px;height:16px;"></span>'
|
||||
).data('site_srl', list[i].site_srl).appendTo($li);
|
||||
}
|
||||
|
||||
setListSize($siteList, MAX_LIST_HEIGHT - $siteListSearchInput.parent("DIV").height());
|
||||
}
|
||||
|
||||
$siteListSearchInput.keyup(function(){
|
||||
setSiteList($siteListSearchInput.val());
|
||||
});
|
||||
|
||||
if(typeof console == 'undefined'){
|
||||
console={log:function(){}};
|
||||
}
|
||||
|
||||
$t
|
||||
.not('.xe-module-search')
|
||||
.addClass('xe-module-search')
|
||||
.find('a.tgAnchor.moduleSearch')
|
||||
.bind('before-open.tc', function(){
|
||||
var $this;
|
||||
|
||||
$this = $(this);
|
||||
|
||||
function on_complete(data) {
|
||||
var $li, list = data.site_list, i, c;
|
||||
|
||||
if(data.error || !$.isArray(list)) {
|
||||
$this.trigger('close.tc');
|
||||
return;
|
||||
}
|
||||
|
||||
aSiteListData = list;
|
||||
|
||||
setSiteList($siteListSearchInput.val());
|
||||
|
||||
$siteListSearchInput.focus();
|
||||
};
|
||||
|
||||
$siteList.empty();
|
||||
$moduleInstanceList.empty();
|
||||
$moduleTypeListDiv.hide();
|
||||
$moduleInstanceListDiv.hide();
|
||||
$.exec_json('admin.getSiteAllList', {domain:""}, on_complete);
|
||||
})
|
||||
.end()
|
||||
.find('.tgContent .siteListUL')
|
||||
.delegate('a','click',function(oEvent){
|
||||
var $this, $finder;
|
||||
|
||||
$this = $(this);
|
||||
$finder = $this.closest('.modulefinder');
|
||||
|
||||
function on_complete(data) {
|
||||
|
||||
var list = data.module_list, x;
|
||||
|
||||
if(data.error || !list) return;
|
||||
|
||||
for(x in list) {
|
||||
if(!list.hasOwnProperty(x)) continue;
|
||||
$li = $('<li />').appendTo($moduleTypeList);
|
||||
$('<a>').attr('href', '#').html(
|
||||
'<div>'+list[x].title+'</div>' +
|
||||
'<span class="icon-circle-arrow-right" style="display:inline-block;float:right;width:16px;height:16px;"></span>'
|
||||
).data('moduleInstanceList', list[x].list).appendTo($li);
|
||||
//$('<option />').attr('value', x).text(list[x].title).appendTo($mod_select);
|
||||
}
|
||||
|
||||
$moduleSearchWindow.find('.moduleTypeList').show();
|
||||
setListSize($moduleTypeList, MAX_LIST_HEIGHT);
|
||||
|
||||
$siteList.find('li').removeClass('on');
|
||||
$this.parent('li').addClass('on');
|
||||
};
|
||||
|
||||
//$finder.find('a.tgAnchor.findsite').trigger('close.tc');
|
||||
$moduleTypeList.empty();
|
||||
$moduleInstanceListDiv.hide();
|
||||
|
||||
$.exec_json('module.procModuleAdminGetList', {site_srl:$this.data('site_srl')}, on_complete);
|
||||
|
||||
oEvent.preventDefault();
|
||||
})
|
||||
.end()
|
||||
//.find('.moduleList,.moduleIdList').hide().end()
|
||||
.find('.moduleTypeListUL')
|
||||
.delegate('a', 'click', function(oEvent){
|
||||
|
||||
var $this, $mid_select, val, list;
|
||||
|
||||
$this = $(this);
|
||||
list = $this.data('moduleInstanceList');
|
||||
if(!list) return;
|
||||
|
||||
t.sSelectedModuleType = $this.text();
|
||||
$moduleInstanceList.empty();
|
||||
|
||||
for(var x in list) {
|
||||
if(!list.hasOwnProperty(x)) continue;
|
||||
|
||||
$li = $('<option />').html(list[x].browser_title).appendTo($moduleInstanceList).val(list[x].module_srl).data('mid', list[x].module_srl)
|
||||
.data('module_srl', list[x].module_srl).data('layout_srl', list[x].layout_srl).data('browser_title', list[x].browser_title);
|
||||
}
|
||||
|
||||
$moduleInstanceListDiv.show();
|
||||
setListSize($moduleInstanceList, MAX_LIST_HEIGHT);
|
||||
|
||||
$moduleTypeList.find('li').removeClass('on');
|
||||
$this.parent('li').addClass('on');
|
||||
|
||||
oEvent.preventDefault();
|
||||
})
|
||||
.end()
|
||||
.find('.moduleSearch_ok').click(function(oEvent){
|
||||
var aSelected = [];
|
||||
$t.find('.moduleInstanceListSelect option:selected').each(function(){
|
||||
aSelected.push({
|
||||
'type' : t.sSelectedModuleType,
|
||||
'module_srl' : $(this).data('module_srl'),
|
||||
'layout_srl' : $(this).data('layout_srl'),
|
||||
'browser_title' : $(this).data('browser_title')
|
||||
});
|
||||
});
|
||||
|
||||
$t.trigger('moduleSelect', [aSelected]);
|
||||
$('.tgAnchor.moduleSearch').trigger('close.tc');
|
||||
|
||||
oEvent.preventDefault();
|
||||
});
|
||||
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
$.fn.xeModuleSearch = function(){
|
||||
$(this).each(_xeModuleSearch);
|
||||
};
|
||||
|
||||
$('.moduleSearch').xeModuleSearch();
|
||||
});
|
||||
|
||||
// Sortable table
|
||||
jQuery(function($){
|
||||
|
||||
|
|
@ -769,10 +942,10 @@ $('.multiLangEdit')
|
|||
function on_complete(data, idx){
|
||||
var results = data.results, $btn, i, c;
|
||||
|
||||
if(data.error || !results || (r_idx != idx+1)) return;
|
||||
|
||||
$this.removeClass('loading');
|
||||
|
||||
if(data.error || !results || results.length === 0 || (r_idx != idx+1)) return;
|
||||
|
||||
$ul.empty();
|
||||
for(i=0,c=results.length; i < c; i++) {
|
||||
$btn = $('<button type="button" class="_btnLang" />').data('langkey', results[i].name).text(results[i].value);
|
||||
|
|
@ -799,6 +972,8 @@ $('.multiLangEdit')
|
|||
$active = $ul.find('button.active');
|
||||
|
||||
if(key == ENTER) {
|
||||
if($active.length === 0) return true;
|
||||
|
||||
$active.click();
|
||||
return false;
|
||||
}
|
||||
|
|
@ -904,8 +1079,17 @@ $('.multiLangEdit')
|
|||
var $li = $('<li />').appendTo($langlist);
|
||||
|
||||
var anchor_id = $layer.data('layer_index');
|
||||
|
||||
var lang_text = this[xe.current_lang];
|
||||
if(!lang_text) {
|
||||
for(lang_code in this) {
|
||||
lang_text = this[lang_code];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$('<a href="#langInput_'+anchor_id+'" class="langItem" />')
|
||||
.text(this[xe.current_lang])
|
||||
.text(lang_text)
|
||||
.data('multilang-name', key)
|
||||
.appendTo($li);
|
||||
});
|
||||
|
|
@ -1204,17 +1388,11 @@ function completeInstallModule(ret_obj) {
|
|||
|
||||
jQuery(function($){
|
||||
$('body').ajaxComplete(function(){ hideWaitingFogLayer() });
|
||||
});
|
||||
|
||||
// admin single column layout
|
||||
jQuery(function($){
|
||||
if($('.x>.body>.lnb').length == 0){ // When it have no lnb
|
||||
$('.x>.body>.content').addClass('single'); // Add class single
|
||||
if($('.x>.body .lnb').length == 0){ // When it have no lnb
|
||||
$('.x>.body').addClass('single'); // Add class single
|
||||
}
|
||||
});
|
||||
|
||||
// Details toggle in admin table
|
||||
jQuery(function($){
|
||||
var viewBtn = $('.x .dsTg span.side>button.text');
|
||||
var tdTitle = $('.x .dsTg td.title');
|
||||
tdTitle.each(function(){
|
||||
|
|
@ -1230,10 +1408,7 @@ jQuery(function($){
|
|||
viewBtn.toggleClass('details');
|
||||
details.slideToggle(200);
|
||||
});
|
||||
});
|
||||
|
||||
// Toggle Content
|
||||
jQuery(function($){
|
||||
var $h2h3 = $('.x .content .h2, .x .content .h3').not('.portlet .h2, .modal .h2');
|
||||
$h2h3.each(function(){
|
||||
var $sTog = $('<button type="button" class="sTog" title="Open/Close"><i class="icon-chevron-up"></i></button>');
|
||||
|
|
@ -1250,4 +1425,4 @@ jQuery(function($){
|
|||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
47
modules/admin/tpl/js/admin.min.js
vendored
47
modules/admin/tpl/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
2
modules/admin/tpl/js/menu_setup.min.js
vendored
2
modules/admin/tpl/js/menu_setup.min.js
vendored
|
|
@ -2,7 +2,7 @@ jQuery(function(b){function k(a){if(moduleList=a.menuList){var c=b("#menuNameLis
|
|||
b(this).parent().prevAll("._parent_key").val();a.find("input[name=menu_item_srl]").val(i);a.submit()});b("a._child_delete").click(function(){var i=b(this).parents("li").find("._item_key").val();a.find("input[name=menu_item_srl]").val(i);a.submit()})});
|
||||
jQuery(function(b){function k(a,b){for(var c=0,e=0;a&&a!=b;)c+=a.offsetTop,e+=a.offsetLeft,a=a.offsetParent;return{top:c,left:e}}b("form.siteMap").delegate("li:not(.placeholder)","dropped.st",function(){var a=b(this),d;d=a.find(">input._parent_key");a.parent("ul").parent("li").length?d.val(a.parent("ul").parent("li").find(">input._item_key").val()):d.val("0")});var d=!1,h=b('<li class="placeholder">');b("div.adminMenu").delegate("li:not(.placeholder,.parent)",{"mousedown.st":function(a){var i,c,e,
|
||||
f,m,n,j,l,g;if(!(b(a.target).is("a,input,label,textarea")||1!=a.which)){d=!0;c=b(this);n=c.height();m=c.width();e=c.parentsUntil(".siteMap").filter("ul");f=e.eq(-1);f.css("position","relative");i=a.pageY;j=k(this,f.get(0));$clone=c.clone(!0).attr("target",!0);for(a=e.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();l=[];f.find("li").each(function(){if(c[0]===this||c.has(this).length)return!0;var a=k(this,f.get(0));l.push({top:a.top,bottom:a.top+32,$item:b(this)})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",
|
||||
opacity:0.6,width:m,height:n,left:j.left,top:j.top,zIndex:100}).appendTo(f.eq(0));h.css({position:"absolute",opacity:0.6,width:m,height:"10px",left:j.left,top:j.top,zIndex:99}).appendTo(f.eq(0));c.css("opacity",0.6);b(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,d;g=null;a=j.top-(i-a.pageY);for(b=0,c=l.length;b<c;b++)d=l[b],d.top>a||d.bottom<a||(g={element:d.$item},d.$item.hasClass("parent")?(g.state="prepend",h.css("top",d.bottom-5)):d.top>a-12?(g.state="before",
|
||||
opacity:0.6,width:m,height:n,left:j.left,top:j.top,zIndex:100}).appendTo(f.eq(0));h.css({position:"absolute",opacity:0.6,width:m,height:"10px",left:j.left,top:j.top,zIndex:99}).appendTo(f.eq(0));c.css("opacity",0.6);b(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,d;g=null;a=j.top-(i-a.pageY);b=0;for(c=l.length;b<c;b++)d=l[b],d.top>a||d.bottom<a||(g={element:d.$item},d.$item.hasClass("parent")?(g.state="prepend",h.css("top",d.bottom-5)):d.top>a-12?(g.state="before",
|
||||
h.css("top",d.top-5)):(g.state="after",h.css("top",d.bottom-5)));$clone.css({top:a})}).bind("mouseup.st",function(){var a,e;d=!1;b(document).unbind("mousemove.st mouseup.st");c.css("opacity","");$clone.remove();h.remove();e=b("<li />").height(c.height());if(g){a=b(g.element);c.before(e);if("prepend"==g.state)a.find(">ul").length||a.find(">.side").after("<ul>"),a.find(">ul").prepend(c.hide());else a[g.state](c.hide());c.slideDown(100,function(){c.removeClass("active")});e.slideUp(100,function(){var a=
|
||||
e.parent();e.remove();a.children("li").length||a.remove()});c.trigger("dropped.st")}});return!1}},"mouseover.st":function(){d||b(this).addClass("active");return!1},"mouseout.st":function(){d||b(this).removeClass("active");return!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').filter(".parent").find(">button.moveTo").css({visibility:"hidden","margin-left":"-12px"}).end().end().end();b('<div id="dropzone-marker" />').css({display:"none",position:"absolute",backgroundColor:"#000",
|
||||
opacity:0.7}).appendTo("body")});
|
||||
|
|
|
|||
2
modules/admin/tpl/js/sitemap.min.js
vendored
2
modules/admin/tpl/js/sitemap.min.js
vendored
|
|
@ -1,6 +1,6 @@
|
|||
jQuery(function(c){function o(a,c){for(var b=0,g=0;a&&a!=c;)b+=a.offsetTop,g+=a.offsetLeft,a=a.offsetParent;return{top:b,left:g}}var l=!1,k=c('<li class="placeholder">');c("form.siteMap").delegate("li:not(.placeholder)",{"mousedown.st":function(a){var d,b,g,h,n,p,i,m,j;if(!(c(a.target).is("a,input,label,textarea")||1!=a.which)){l=!0;b=c(this);p=b.height();n=b.width();g=b.parentsUntil(".siteMap").filter("ul");h=g.eq(-1);h.css("position","relative");d=a.pageY;i=o(this,h.get(0));$clone=b.clone(!0).attr("target",
|
||||
!0);for(a=g.length-1;a;a--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();m=[];h.find("li").each(function(){if(b[0]===this||b.has(this).length)return!0;var a=o(this,h.get(0));m.push({top:a.top,bottom:a.top+32,item:this})});$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:0.6,width:n,height:p,left:i.left,top:i.top,zIndex:100}).appendTo(h.eq(0));k.css({position:"absolute",opacity:0.6,width:n,height:"5px",left:i.left,top:i.top,zIndex:99}).appendTo(h.eq(0));
|
||||
b.css("opacity",0.6);c(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f;j=null;a=i.top-(d-a.pageY);for(b=0,c=m.length;b<c;b++)if(f=a,e=m[b],0==b&&f<e.top&&(f=e.top),b==c-1&&f>e.bottom&&(f=e.bottom),e.top<=f&&e.bottom>=f){b=e.item;3>=Math.abs(e.top-f)?(k.css({top:e.top-3,height:"5px"}),f="before"):3>=Math.abs(e.bottom-f)?(k.css({top:e.bottom-3,height:"5px"}),f="after"):(k.css({top:e.top+3,height:"27px"}),f="prepend");j={element:b,state:f};break}$clone.css({top:a})}).bind("mouseup.st",
|
||||
b.css("opacity",0.6);c(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f;j=null;a=i.top-(d-a.pageY);b=0;for(c=m.length;b<c;b++)if(f=a,e=m[b],0==b&&f<e.top&&(f=e.top),b==c-1&&f>e.bottom&&(f=e.bottom),e.top<=f&&e.bottom>=f){b=e.item;3>=Math.abs(e.top-f)?(k.css({top:e.top-3,height:"5px"}),f="before"):3>=Math.abs(e.bottom-f)?(k.css({top:e.bottom-3,height:"5px"}),f="after"):(k.css({top:e.top+3,height:"27px"}),f="prepend");j={element:b,state:f};break}$clone.css({top:a})}).bind("mouseup.st",
|
||||
function(){var a,d;l=!1;c(document).unbind("mousemove.st mouseup.st");b.css("opacity","");$clone.remove();k.remove();d=c("<li />").height(b.height());if(j){a=c(j.element);b.before(d);if("prepend"==j.state)a.find(">ul").length||a.find(">.side").after("<ul>"),a.find(">ul").prepend(b.hide());else a[j.state](b.hide());b.slideDown(100,function(){b.removeClass("active")});d.slideUp(100,function(){var a=d.parent();d.remove();a.children("li").length||a.remove()});b.trigger("dropped.st")}});return!1}},"mouseover.st":function(){l||
|
||||
c(this).addClass("active");return!1},"mouseout.st":function(){l||c(this).removeClass("active");return!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').append('<span class="vr"></span><span class="hr"></span>').find("input:text").focus(function(){var a=c(this),d=a.prev("label"),b=a.parent();a.width(b.width()-(parseInt(b.css("text-indent"))||0)-a.next(".side").width()-60).css("opacity","");d.hide()}).blur(function(){var a=c(this),d=a.prev("label"),b=a.val();a.width(0).css("opacity",
|
||||
0);d.removeClass("no-text").empty().text(b).show();b||d.addClass("no-text").text("---")}).each(function(a){var d=c(this),a="sitemap-id-"+a;d.attr("id",a).css({width:0,opacity:0,overflow:"hidden"}).before("<label />").prev("label").attr("for",a).text(d.val())}).end().end()});
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
<!--#include("./_spHeader.html")-->
|
||||
<div class="content" id="content">
|
||||
<include target="./_spHeader.html" />
|
||||
<div class="content" id="content" tabindex="0">
|
||||
{$content}
|
||||
</div>
|
||||
<!--@if($parentSrl != 0)-->
|
||||
<!--#include("./_spLnb.content.html")-->
|
||||
<!--@end-->
|
||||
<!--#include("./_spFooter.html")-->
|
||||
<include target="./_spLnb.content.html" cond="$parentSrl != 0" />
|
||||
<include target="./_spShortcut.html" />
|
||||
<include target="./_spFooter.html" />
|
||||
|
|
|
|||
|
|
@ -323,6 +323,11 @@
|
|||
{
|
||||
$package->depends[$key]->need_update = true;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
|
||||
if($dep->path === '.')
|
||||
{
|
||||
Context::set('contain_core', TRUE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -338,6 +343,11 @@
|
|||
$package->need_update = version_compare($package->version, $installedPackage->current_version, ">");
|
||||
}
|
||||
Context::set("package", $package);
|
||||
|
||||
if($package->path === '.')
|
||||
{
|
||||
Context::set('contain_core', TRUE);
|
||||
}
|
||||
}
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
|
|
|
|||
|
|
@ -328,4 +328,7 @@
|
|||
<value xml:lang="en"><![CDATA[Cannot delete this package (no moduleUninstall() in the module class).]]></value>
|
||||
<value xml:lang="jp"><![CDATA[このパッケージは、削除をサポートしません(モジュールクラスにmoduleUninstall()がありません)。]]></value>
|
||||
</item>
|
||||
<item name="msg_update_core">
|
||||
<value xml:lang="ko"><![CDATA[<strong style="color:red">XE core가 업데이트 됩니다.</strong><br />core 업데이트 시 설치된 프로그램의 호환성을 반드시 점검하시기 바랍니다.]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
<load target="js/waiting.js" usecdn="true" />
|
||||
|
||||
<h2 class="h2">{$package->title} ver. {$package->version}</h2>
|
||||
<div cond="$contain_core" class="message info">
|
||||
<p>{$lang->msg_update_core}</p>
|
||||
</div>
|
||||
<p cond="$package->installed">{$lang->current_version}: {$package->cur_version} <block cond="$package->need_update">({$lang->require_update})</block></p>
|
||||
<p cond="!$package->installed">{$lang->require_installation}</p>
|
||||
<block cond="$package->depends">
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@
|
|||
$document_srl = $obj->document_srl;
|
||||
if(!$document_srl) return new Object();
|
||||
|
||||
return $this->deleteComments($document_srl, true);
|
||||
return $this->deleteComments($document_srl, $obj);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -206,7 +206,11 @@
|
|||
$obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);
|
||||
if(Mobile::isFromMobilePhone())
|
||||
{
|
||||
$obj->content = nl2br(htmlspecialchars($obj->content));
|
||||
if($obj->use_html != 'Y')
|
||||
{
|
||||
$obj->content = htmlspecialchars($obj->content);
|
||||
}
|
||||
$obj->content = nl2br($obj->content);
|
||||
}
|
||||
if(!$obj->regdate) $obj->regdate = date("YmdHis");
|
||||
// remove iframe and script if not a top administrator on the session.
|
||||
|
|
@ -545,16 +549,55 @@
|
|||
$oCommentModel = &getModel('comment');
|
||||
// check if comment already exists
|
||||
$comment = $oCommentModel->getComment($comment_srl);
|
||||
if($comment->comment_srl != $comment_srl) return new Object(-1, 'msg_invalid_request');
|
||||
if($comment->comment_srl != $comment_srl)
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
$document_srl = $comment->document_srl;
|
||||
// call a trigger (before)
|
||||
$output = ModuleHandler::triggerCall('comment.deleteComment', 'before', $comment);
|
||||
if(!$output->toBool()) return $output;
|
||||
// check if child comment exists on the comment
|
||||
$child_count = $oCommentModel->getChildCommentCount($comment_srl);
|
||||
if($child_count>0) return new Object(-1, 'fail_to_delete_have_children');
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
// check if permission is granted
|
||||
if(!$is_admin && !$comment->isGranted()) return new Object(-1, 'msg_not_permitted');
|
||||
if(!$is_admin && !$comment->isGranted())
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
|
||||
// check if child comment exists on the comment
|
||||
$childs = $oCommentModel->getChildComments($comment_srl);
|
||||
if(count($childs) > 0)
|
||||
{
|
||||
$deleteAllComment = true;
|
||||
if (!$is_admin)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
foreach($childs as $val)
|
||||
{
|
||||
if($val->member_srl != $logged_info->member_srl)
|
||||
{
|
||||
$deleteAllComment = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$deleteAllComment)
|
||||
{
|
||||
return new Object(-1, 'fail_to_delete_have_children');
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($childs as $val)
|
||||
{
|
||||
$output = $this->deleteComment($val->comment_srl, $is_admin, $isMoveToTrash);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// begin transaction
|
||||
$oDB = &DB::getInstance();
|
||||
|
|
@ -623,12 +666,21 @@
|
|||
* @param int $document_srl
|
||||
* @return object
|
||||
*/
|
||||
function deleteComments($document_srl) {
|
||||
function deleteComments($document_srl, $obj = NULL) {
|
||||
// create the document model object
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oCommentModel = &getModel('comment');
|
||||
// check if permission is granted
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
|
||||
// check if permission is granted
|
||||
if(is_object($obj))
|
||||
{
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
}
|
||||
if(!$oDocument->isExists() || !$oDocument->isGranted()) return new Object(-1, 'msg_not_permitted');
|
||||
// get a list of comments and then execute a trigger(way to reduce the processing cost for delete all)
|
||||
$args->document_srl = $document_srl;
|
||||
|
|
@ -742,6 +794,10 @@
|
|||
return new Object(-1, $failed_voted);
|
||||
}
|
||||
|
||||
// begin transaction
|
||||
$oDB = DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// update the number of votes
|
||||
if($point < 0) {
|
||||
$args->blamed_count = $oComment->get('blamed_count') + $point;
|
||||
|
|
@ -753,6 +809,23 @@
|
|||
// leave logs
|
||||
$args->point = $point;
|
||||
$output = executeQuery('comment.insertCommentVotedLog', $args);
|
||||
|
||||
$obj->member_srl = $oComment->get('member_srl');
|
||||
$obj->module_srl = $oComment->get('module_srl');
|
||||
$obj->comment_srl = $oComment->get('comment');
|
||||
$obj->update_target = ($point < 0) ? 'blamed_count' : 'voted_count';
|
||||
$obj->point = $point;
|
||||
$obj->before_point = ($point < 0) ? $oComment->get('blamed_count') : $oComment->get('voted_count');
|
||||
$obj->after_point = ($point < 0) ? $args->blamed_count : $args->voted_count;
|
||||
$trigger_output = ModuleHandler::triggerCall('comment.updateVotedCount', 'after', $obj);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
// leave into session information
|
||||
$_SESSION['voted_comment'][$comment_srl] = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
$url = getUrl('','module','admin','act','dispCommentAdminList','search_target','ipaddress','search_keyword',$oComment->getIpAddress());
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_search_by_ipaddress',$icon_path,'TraceByIpaddress');
|
||||
|
||||
$url = sprintf("var params = new Array(); params['ipaddress']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oComment->getIpAddress());
|
||||
$url = sprintf("var params = new Array(); params['ipaddress_list']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oComment->getIpAddress());
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_add_ip_to_spamfilter','','javascript');
|
||||
}
|
||||
}
|
||||
|
|
@ -107,6 +107,17 @@
|
|||
return (int)$output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of child comments
|
||||
* @param int $comment_srl
|
||||
* @return int
|
||||
*/
|
||||
function getChildComments($comment_srl) {
|
||||
$args->comment_srl = $comment_srl;
|
||||
$output = executeQueryArray('comment.getChildComments', $args);
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the comment
|
||||
* @param int $comment_srl
|
||||
|
|
|
|||
|
|
@ -251,9 +251,11 @@
|
|||
<item name="published_name_list" type="array">
|
||||
<item name="Y">
|
||||
<value xml:lang="en"><![CDATA[Published]]></value>
|
||||
<value xml:lang="ko"><![CDATA[공개 발행]]></value>
|
||||
</item>
|
||||
<item name="N">
|
||||
<value xml:lang="en"><![CDATA[Unpublished]]></value>
|
||||
<value xml:lang="ko"><![CDATA[발행 대기]]></value>
|
||||
</item>
|
||||
</item>
|
||||
<item name="comment_manager">
|
||||
|
|
@ -266,7 +268,7 @@
|
|||
<value xml:lang="ko"><![CDATA[선택한 댓글]]></value>
|
||||
<value xml:lang="en"><![CDATA[Selected Comment]]></value>
|
||||
<value xml:lang="jp"><![CDATA[選択したコメント]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[已選回覆]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[已選回覆]]></value>
|
||||
</item>
|
||||
<item name="cmd_comment_validation">
|
||||
<value xml:lang="en"><![CDATA[Use comment validation]]></value>
|
||||
|
|
@ -276,11 +278,22 @@
|
|||
</item>
|
||||
<item name="published">
|
||||
<value xml:lang="en"><![CDATA[Publish status]]></value>
|
||||
<value xml:lang="ko"><![CDATA[발행 상태]]></value>
|
||||
</item>
|
||||
<item name="cmd_publish">
|
||||
<value xml:lang="en"><![CDATA[Publish]]></value>
|
||||
<value xml:lang="ko"><![CDATA[발행]]></value>
|
||||
</item>
|
||||
<item name="cmd_unpublish">
|
||||
<value xml:lang="en"><![CDATA[Unpublish]]></value>
|
||||
<value xml:lang="ko"><![CDATA[발행 중지]]></value>
|
||||
</item>
|
||||
<item name="select_module">
|
||||
<value xml:lang="ko"><![CDATA[모듈 선택]]></value>
|
||||
<value xml:lang="en"><![CDATA[Select Module]]></value>
|
||||
</item>
|
||||
<item name="page">
|
||||
<value xml:lang="ko"><![CDATA[페이지]]></value>
|
||||
<value xml:lang="en"><![CDATA[Page]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
12
modules/comment/queries/getChildComments.xml
Normal file
12
modules/comment/queries/getChildComments.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<query id="getChildComments" action="select">
|
||||
<tables>
|
||||
<table name="comments" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="comment_srl" />
|
||||
<column name="member_srl" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="parent_srl" var="comment_srl" filter="number" notnull="notnull" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -18,8 +18,8 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
| <a href="{getUrl('search_target','is_published','search_keyword', 'Y')}" <!--@if($search_target == 'is_published' && $search_keyword == 'Y')-->class="active"<!--@end-->>{$lang->published_name_list['Y']}</a>
|
||||
|
||||
<block cond="$modules_list">
|
||||
| <label for="comment_modules" <!--@if($search_target == 'module')-->class="active"<!--@end-->>Select Module:
|
||||
<select id="comment_modules" name="comment_modules" onchange="location.href='{getUrl('search_target','module','search_keyword','')}&search_keyword='+this.value">
|
||||
| <label for="comment_modules" <!--@if($search_target == 'module')-->class="active"<!--@end-->>{$lang->select_module}:
|
||||
<select id="comment_modules" name="comment_modules" onchange="location.href='{getUrl('search_target','module','search_keyword','')}&search_keyword='+this.value">
|
||||
<option></option>
|
||||
<!--@foreach($modules_list as $key => $node)-->
|
||||
<option value="{$key}"<!--@if($key==$search_keyword)-->selected<!--@end-->>{$node}</option>
|
||||
|
|
@ -136,14 +136,14 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</form>
|
||||
</div>
|
||||
<div class="search">
|
||||
<form action="" class="pagination">
|
||||
<form action="./" class="pagination">
|
||||
<input type="hidden" name="error_return_url" value="" />
|
||||
<input type="hidden" name="module" value="{$module}" />
|
||||
<input type="hidden" name="act" value="{$act}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
|
||||
|
||||
<a href="{getUrl('page', '')}" class="direction">« FIRST</a>
|
||||
<a href="{getUrl('page', '')}" class="direction">« {$lang->first_page}</a>
|
||||
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
|
||||
{@$isGoTo = true}
|
||||
<a href="{getUrl('page', '')}">1</a>
|
||||
|
|
@ -159,7 +159,7 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
|
||||
</block>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">LAST »</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">{$lang->last_page} »</a>
|
||||
<span cond="$isGoTo" id="goTo" class="tgContent">
|
||||
<input name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit">Go</button>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<!-- 목록 -->
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
|
||||
<caption>{$lang->all} {number_format($total_count)}, {$lang->page} {number_format($page)}/{number_format($total_page)}</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col"><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></th>
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div class="pagination">
|
||||
<a href="{getUrl('page','','module_srl','')}" class="direction">‹ {$lang->first_page}</a>
|
||||
<a href="{getUrl('page','','module_srl','')}" class="direction">« {$lang->first_page}</a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
<strong>{$page_no}</strong>
|
||||
|
|
@ -57,5 +57,5 @@
|
|||
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} ›</a>
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} »</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -19,11 +19,13 @@
|
|||
**/
|
||||
function procCommunicationAdminInsertConfig() {
|
||||
// get the default information
|
||||
$args = Context::gets('skin','colorset','editor_skin','editor_colorset');
|
||||
$args = Context::gets('skin','colorset','editor_skin','editor_colorset', 'mskin');
|
||||
|
||||
if(!$args->skin) $args->skin = 'default';
|
||||
if(!$args->colorset) $args->colorset = 'white';
|
||||
if(!$args->editor_skin) $args->editor_skin = 'default';
|
||||
if(!$args->mskin) $args->mskin = 'default';
|
||||
|
||||
if(!$args->skin) $args->skin = "default";
|
||||
if(!$args->colorset) $args->colorset = "white";
|
||||
if(!$args->editor_skin) $args->editor_skin = "default";
|
||||
// create the module module Controller object
|
||||
$oModuleController = &getController('module');
|
||||
$output = $oModuleController->insertModuleConfig('communication',$args);
|
||||
|
|
|
|||
|
|
@ -28,10 +28,14 @@
|
|||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
|
||||
// get a list of communication skins
|
||||
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path) );
|
||||
// get a list of communication skins
|
||||
Context::set('communication_mobile_skin_list', $oModuleModel->getSkins($this->module_path, 'm.skins') );
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('communication_config..');
|
||||
$security->encodeHTML('editor_skin_list..');
|
||||
$security->encodeHTML('communication_skin_list..title');
|
||||
$security->encodeHTML('communication_skin_list..title');
|
||||
$security->encodeHTML('communication_mobile_skin_list..title');
|
||||
|
||||
// specify a template
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
|
|
|
|||
|
|
@ -23,6 +23,19 @@
|
|||
**/
|
||||
function checkUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags")) return true;
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -33,6 +46,24 @@
|
|||
function moduleUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path))
|
||||
{
|
||||
$config->skin = implode('|@|', $config_parse);
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleConfig('communication', $config);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
68
modules/communication/communication.mobile.php
Normal file
68
modules/communication/communication.mobile.php
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
require_once(_XE_PATH_.'modules/communication/communication.view.php');
|
||||
class communicationMobile extends communicationView {
|
||||
function init() {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->mskin;
|
||||
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
|
||||
$tpl_path = sprintf('%sm.skins/%s', $this->module_path, $skin);
|
||||
$this->setTemplatePath($tpl_path);
|
||||
}
|
||||
|
||||
function dispCommunicationMessages()
|
||||
{
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!array_key_exists('dispCommunicationMessages', $logged_info->menu_list))
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// Set the variables
|
||||
$message_srl = Context::get('message_srl');
|
||||
$message_type = 'R';
|
||||
Context::set('message_type', $message_type);
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
// extract contents if message_srl exists
|
||||
if($message_srl)
|
||||
{
|
||||
$templateFile = 'read_message';
|
||||
$columnList = array('message_srl', 'sender_srl', 'receiver_srl', 'message_type', 'title', 'content', 'readed', 'regdate');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl, $columnList);
|
||||
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl) )
|
||||
{
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$templateFile = 'messages';
|
||||
}
|
||||
// Extract a list
|
||||
$columnList = array('message_srl', 'readed', 'title', 'member.member_srl', 'member.nick_name', 'message.regdate', 'readed_date');
|
||||
$output = $oCommunicationModel->getMessages($message_type, $columnList);
|
||||
|
||||
// set a template file
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('message_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('message_list..nick_name');
|
||||
|
||||
$this->setTemplateFile($templateFile);
|
||||
}
|
||||
}
|
||||
|
|
@ -25,6 +25,7 @@
|
|||
if(!$communication_config->skin) $communication_config->skin = 'default';
|
||||
if(!$communication_config->colorset) $communication_config->colorset = 'white';
|
||||
if(!$communication_config->editor_skin) $communication_config->editor_skin = 'default';
|
||||
if(!$communication_config->mskin) $communication_config->mskin = 'default';
|
||||
|
||||
return $communication_config;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
|
||||
$config_parse = explode('.', $skin);
|
||||
$config_parse = explode('|@|', $skin);
|
||||
if (count($config_parse) > 1){
|
||||
$tpl_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
}else{
|
||||
|
|
|
|||
127
modules/communication/m.skins/default/css/mcommunication.css
Normal file
127
modules/communication/m.skins/default/css/mcommunication.css
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
@charset "utf-8";
|
||||
/* Mobile XE (/modules/board/m.skins/default) */
|
||||
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
|
||||
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
|
||||
img{border:0}
|
||||
em{font-style:normal}
|
||||
form{margin:0;padding:0}
|
||||
fieldset{margin:0;padding:0;border:0}
|
||||
textarea{resize:vertical}
|
||||
input[type=checkbox],
|
||||
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
|
||||
/* Common */
|
||||
.fl{float:left}
|
||||
.fr{float:right}
|
||||
/* Background */
|
||||
.rp li li,
|
||||
.rp .answer,
|
||||
.rp .btn,
|
||||
/* Body */
|
||||
.bd{background:#f8f8f8;padding:1px 0}
|
||||
.co{margin:10px;line-height:1.4;font-size:14px;color:#333}
|
||||
.co:after{content:"";display:block;clear:both;zoom:1}
|
||||
/* Hx */
|
||||
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
|
||||
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
|
||||
.hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff;padding-right:40px}
|
||||
.hx.h2 em{font-size:12px;color:#6352d2}
|
||||
.hx.h3{background:#868686;color:#fff}
|
||||
.hx.h3 em{font-size:12px}
|
||||
.hx h2, .hx h3{margin:0 10px 0 0;display:inline}
|
||||
.hx h2{font-size:16px;line-height:1.4}
|
||||
.hx h3{font-size:14px}
|
||||
.hx a{color:#000}
|
||||
.hx .ex{font-size:12px}
|
||||
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;background:none}
|
||||
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
|
||||
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
|
||||
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:-28px}
|
||||
/* Global Navigation */
|
||||
.gn{margin:0;padding:0;list-style:none;background:#d3d1cc;text-shadow:1px 1px 0 #fff}
|
||||
.gn li{background:#c3c3c3;border:1px solid #a3a09a;border-left:0;border-right:0;margin:0 0 -1px 0}
|
||||
.gn li li{background:#f8f8f8;border:1px solid #c9c9c9;border-left:0;border-right:0}
|
||||
.gn li li li{background:#e8e8e8}
|
||||
.gn ul{margin:0 0 -1px 0;padding:0;list-style:none}
|
||||
.gn a{position:relative;text-decoration:none;display:block;padding:10px;font-size:16px}
|
||||
.gn li a{color:#333}
|
||||
.gn li a:after{position:absolute;top:7px;right:10px;content:"›";color:#888;font-size:18px;font-weight:bold;font-family:Verdana, Geneva, sans-serif}
|
||||
.gn li li a:before{content:"";display:inline-block;width:6px;height:6px;border:1px dotted #666;border-top:0;border-right:0;margin:0 4px 0 0;vertical-align:top}
|
||||
.gn li li a{padding-left:15px}
|
||||
.gn li li li a{padding-left:30px}
|
||||
.gn li li li li a{padding-left:45px}
|
||||
.gn li li li li li a{padding-left:60px}
|
||||
.gn em{color:#6352d2;font-size:12px}
|
||||
/* List */
|
||||
.lt{margin:0;padding:0;list-style:none;background:#f8f8f8;font-size:14px}
|
||||
.lt li{border-bottom:1px solid #ccc8be;overflow:hidden}
|
||||
.lt .read{background:url(../img/read.png) no-repeat 10px center;padding:5px 5px 5px 52px}
|
||||
.lt .unread{background:url(../img/unread.png) no-repeat 10px center;padding:5px 5px 5px 52px}
|
||||
.lt a{float:left;display:inline-block;text-decoration:none;color:#000;padding:5px}
|
||||
.lt .memberInfo{float:right;padding:5px 5px 5px 34px;background:url(../img/member.png) no-repeat 10px center;}
|
||||
.lt .notice{display:inline-block;background:#a06acd;font-weight:bold;color:#fff;font-size:12px;padding:1px;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}
|
||||
.lt .title{display:block;margin:0 0 5px 0}
|
||||
.lt .title strong{font-size:14px;font-weight:bold}
|
||||
.lt .title em{font-size:12px;color:#333;color:#6352d2}
|
||||
.lt .auth{display:block;font-size:12px}
|
||||
.lt .auth .time{padding:0 5px;border-left:1px solid #bfbfbf}
|
||||
/* Toggle Open */
|
||||
.tgo{display:none;background:#f8f8f8;color:#333;margin:0;padding:0;list-style:none;font-size:14px;color:#333}
|
||||
.tgo.open{display:block}
|
||||
.file{margin:0;padding:0;list-style:none}
|
||||
.file li{border-top:1px solid #c9c9c9;border-bottom:1px solid #c9c9c9;margin:0 0 -1px 0}
|
||||
.file a{text-decoration:none;display:block;padding:10px 0 10px 10px;color:#333}
|
||||
.file .size{font-size:12px;border-left:1px solid #bfbfbf;margin:0 5px;padding:0 10px;color:#666}
|
||||
.rp ul{margin:10px 0 -11px -10px;padding:0;list-style:none}
|
||||
.rp li{border-top:1px solid #c9c9c9;border-bottom:1px solid #c9c9c9;padding:10px 0 10px 10px;margin:0 0 -1px 0}
|
||||
.rp .xe_content, .rp p{margin:0 0 5px 0}
|
||||
.rp ul ul{margin-left:-25px}
|
||||
.rp ul ul ul{margin-left:-40px}
|
||||
.rp ul ul ul ul{margin-left:-55px}
|
||||
.rp ul ul ul ul ul{margin-left:-70px}
|
||||
.rp ul ul ul ul ul ul{margin-left:-85px}
|
||||
.rp li li,
|
||||
.rp .answer{padding-left:25px;background-position:10px -145px}
|
||||
.rp li li li{padding-left:40px;background-position:25px -145px}
|
||||
.rp li li li li{padding-left:55px;background-position:40px -145px}
|
||||
.rp li li li li li{padding-left:70px;background-position:55px -145px}
|
||||
.rp li li li li li li{padding-left:85px;background-position:70px -145px}
|
||||
.rp .btn{display:inline-block;width:15px;height:15px;overflow:hidden;vertical-align:middle;text-indent:15px}
|
||||
.rp .btn.ed{background-position:0 -32px}
|
||||
.rp .btn.de{background-position:-15px -32px}
|
||||
.rp .btn.re{background-position:-30px -32px}
|
||||
.rp .auth{font-size:12px}
|
||||
.rp .auth .time{padding:0 5px;border-left:1px solid #bfbfbf}
|
||||
/* Form Field */
|
||||
.origin{padding:10px 0;margin:0 10px;font-size:14px}
|
||||
.ff{margin:0;padding:10px 0}
|
||||
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
|
||||
.ff li{margin:0 0 5px 0;padding:0}
|
||||
.ff label{margin-right:10px}
|
||||
.ff label+input[type=text],
|
||||
.ff label+input[type=password],
|
||||
.ff label+textarea,
|
||||
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
|
||||
.ff label+input[type=text],
|
||||
.ff label+input[type=password],
|
||||
.ff label+textarea{padding:5px}
|
||||
/* Button Area */
|
||||
.bna{text-align:center;padding:0 10px;margin:10px 0;zoom:1}
|
||||
.bna:after{content:"";display:block;clear:both}
|
||||
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
|
||||
.bn[type=submit],
|
||||
.bn[type=button]{height:28px}
|
||||
.bn[href]{height:26px}
|
||||
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
|
||||
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}
|
||||
/* Pagination */
|
||||
.pn{font-size:12px;text-align:center;background:#f2f0ec;padding:15px 0;border-top:1px solid #fff}
|
||||
.pn a{color:#333;text-decoration:none}
|
||||
.pn strong{margin:0 10px}
|
||||
.pn .prev:before{content:"";display:inline-block;width:0;height:0;margin:0 4px 0 0;border:4px solid;border-color:transparent;border-right-color:#999}
|
||||
.pn .next:after{content:"";display:inline-block;width:0;height:0;margin:0 0 0 4px;border:4px solid;border-color:transparent;border-left-color:#999}
|
||||
/* Search */
|
||||
.sh{border:1px solid #bfbfbf;border-left:0;border-right:0;background:#e8e8e8;padding:10px;text-align:center}
|
||||
.sh *{vertical-align:top}
|
||||
.sh select{width:80px;font-size:14px;margin:0 0 5px 0}
|
||||
.sh input[type=text]{width:160px;margin:0;font-size:14px;padding:5px}
|
||||
.sh .shbn{width:28px;height:28px;border:1px solid #666;background:#777 url(../img/mx.png) no-repeat 5px -60px;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer}
|
||||
BIN
modules/communication/m.skins/default/img/member.png
Normal file
BIN
modules/communication/m.skins/default/img/member.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1 KiB |
BIN
modules/communication/m.skins/default/img/read.png
Normal file
BIN
modules/communication/m.skins/default/img/read.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
BIN
modules/communication/m.skins/default/img/unread.png
Normal file
BIN
modules/communication/m.skins/default/img/unread.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1 KiB |
17
modules/communication/m.skins/default/messages.html
Normal file
17
modules/communication/m.skins/default/messages.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<load target="css/mcommunication.css" />
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->message_box['R']}</h2>
|
||||
</div>
|
||||
<ul class="lt">
|
||||
<li loop="$message_list => $no,$val" class="read"|cond="$val->readed == 'Y'" class="unread"|cond="$val->readed != 'Y'">
|
||||
<a href="{getUrl('message_srl', $val->message_srl)}">{$val->title}</a>
|
||||
<span class="memberInfo">{$val->nick_name} ({zdate($val->regdate,"Y-m-d")})</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="pn">
|
||||
<a cond="$page != 1" href="{getUrl('page',$page-1,'document_srl','')}" class="prev">{$lang->cmd_prev}</a>
|
||||
<strong>{$page} / {$page_navigation->last_page}</strong>
|
||||
<a cond="$page != $page_navigation->last_page" href="{getUrl('page',$page+1,'document_srl','')}" class="next">{$lang->cmd_next}</a>
|
||||
</div>
|
||||
</div>
|
||||
12
modules/communication/m.skins/default/read_message.html
Normal file
12
modules/communication/m.skins/default/read_message.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<load target="css/mcommunication.css" />
|
||||
|
||||
<div class="hx h2">
|
||||
<h2>{$message->title}</h2><span class="ex">{$message->nick_name} | {zdate($message->regdate, "Y.m.d H:i")}</span>
|
||||
</div>
|
||||
<div class="co">
|
||||
<div class="xe_content">{$message->content}</div>
|
||||
</div>
|
||||
<div class="bna">
|
||||
<span class="fl"><a href="{getUrl('message_srl', '')}" class="bn white">{$lang->cmd_list}</a></span>
|
||||
</div>
|
||||
|
||||
18
modules/communication/m.skins/default/skin.xml
Normal file
18
modules/communication/m.skins/default/skin.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE 커뮤니케이션 모바일 기본 스킨</title>
|
||||
<description xml:lang="ko">
|
||||
XE 커뮤니케이션 모바일 기본 스킨입니다.
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2012-08-07</date>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="tr">NHN</name>
|
||||
</author>
|
||||
<extra_vars />
|
||||
</skin>
|
||||
|
|
@ -39,6 +39,14 @@
|
|||
<th scope="row">{$lang->colorset}</th>
|
||||
<td><div id="communication_colorset"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->mobile_skin}</th>
|
||||
<td>
|
||||
<select name="mskin">
|
||||
<option loop="$communication_mobile_skin_list => $key,$val" value="{$key}" selected="selected"|cond="$key==$communication_config->mskin" >{$val->title}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
|
|
|
|||
|
|
@ -235,7 +235,11 @@ class documentController extends document {
|
|||
$obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);
|
||||
if(Mobile::isFromMobilePhone())
|
||||
{
|
||||
$obj->content = nl2br(htmlspecialchars($obj->content));
|
||||
if($obj->use_html != 'Y')
|
||||
{
|
||||
$obj->content = htmlspecialchars($obj->content);
|
||||
}
|
||||
$obj->content = nl2br($obj->content);
|
||||
}
|
||||
// Remove iframe and script if not a top adminisrator in the session.
|
||||
if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);
|
||||
|
|
@ -408,7 +412,10 @@ class documentController extends document {
|
|||
}
|
||||
}
|
||||
// Remove iframe and script if not a top adminisrator in the session.
|
||||
if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);
|
||||
if($logged_info->is_admin != 'Y')
|
||||
{
|
||||
$obj->content = removeHackTag($obj->content);
|
||||
}
|
||||
// if temporary document, regdate is now setting
|
||||
if($source_obj->get('status') == $this->getConfigStatus('temp')) $obj->regdate = date('YmdHis');
|
||||
|
||||
|
|
@ -882,7 +889,10 @@ class documentController extends document {
|
|||
if($point > 0) $failed_voted = 'failed_voted';
|
||||
else $failed_voted = 'failed_blamed';
|
||||
// Return fail if session already has information about votes
|
||||
if($_SESSION['voted_document'][$document_srl]) return new Object(-1, $failed_voted);
|
||||
if($_SESSION['voted_document'][$document_srl])
|
||||
{
|
||||
return new Object(-1, $failed_voted);
|
||||
}
|
||||
// Get the original document
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl, false, false);
|
||||
|
|
@ -891,11 +901,13 @@ class documentController extends document {
|
|||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
return new Object(-1, $failed_voted);
|
||||
}
|
||||
|
||||
// Create a member model object
|
||||
$oMemberModel = &getModel('member');
|
||||
$member_srl = $oMemberModel->getLoggedMemberSrl();
|
||||
|
||||
// Check if document's author is a member.
|
||||
if($oDocument->get('member_srl')) {
|
||||
// Create a member model object
|
||||
$oMemberModel = &getModel('member');
|
||||
$member_srl = $oMemberModel->getLoggedMemberSrl();
|
||||
// Pass after registering a session if author's information is same as the currently logged-in user's.
|
||||
if($member_srl && $member_srl == $oDocument->get('member_srl')) {
|
||||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
|
|
@ -915,6 +927,11 @@ class documentController extends document {
|
|||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
return new Object(-1, $failed_voted);
|
||||
}
|
||||
|
||||
// begin transaction
|
||||
$oDB = DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// Update the voted count
|
||||
if($point < 0)
|
||||
{
|
||||
|
|
@ -931,8 +948,6 @@ class documentController extends document {
|
|||
$args->point = $point;
|
||||
$output = executeQuery('document.insertDocumentVotedLog', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
// Leave in the session information
|
||||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
|
||||
$obj->member_srl = $oDocument->get('member_srl');
|
||||
$obj->module_srl = $oDocument->get('module_srl');
|
||||
|
|
@ -941,8 +956,17 @@ class documentController extends document {
|
|||
$obj->point = $point;
|
||||
$obj->before_point = ($point < 0) ? $oDocument->get('blamed_count') : $oDocument->get('voted_count');
|
||||
$obj->after_point = ($point < 0) ? $args->blamed_count : $args->voted_count;
|
||||
$output = ModuleHandler::triggerCall('document.updateVotedCount', 'after', $obj);
|
||||
if(!$output->toBool()) return $output;
|
||||
$trigger_output = ModuleHandler::triggerCall('document.updateVotedCount', 'after', $obj);
|
||||
if(!$trigger_output->toBool()) {
|
||||
$oDB->rollback();
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
// Leave in the session information
|
||||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
|
||||
// Return result
|
||||
if($point > 0)
|
||||
{
|
||||
|
|
@ -959,52 +983,99 @@ class documentController extends document {
|
|||
* @param int $document_srl
|
||||
* @return void|Object
|
||||
*/
|
||||
function declaredDocument($document_srl) {
|
||||
function declaredDocument($document_srl)
|
||||
{
|
||||
// Fail if session information already has a reported document
|
||||
if($_SESSION['declared_document'][$document_srl]) return new Object(-1, 'failed_declared');
|
||||
|
||||
$trigger_obj = new stdClass();
|
||||
$trigger_obj->document_srl = $document_srl;
|
||||
|
||||
// Call a trigger (before)
|
||||
$trigger_output = ModuleHandler::triggerCall('document.declaredDocument', 'before', $trigger_obj);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
// Check if previously reported
|
||||
$args->document_srl = $document_srl;
|
||||
$output = executeQuery('document.getDeclaredDocument', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$declared_count = $output->data->declared_count;
|
||||
|
||||
// Get the original document
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl, false, false);
|
||||
|
||||
// Pass if the author's IP address is as same as visitor's.
|
||||
/*if($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR']) {
|
||||
$_SESSION['declared_document'][$document_srl] = true;
|
||||
return new Object(-1, 'failed_declared');
|
||||
}*/
|
||||
|
||||
// Check if document's author is a member.
|
||||
if($oDocument->get('member_srl')) {
|
||||
if($oDocument->get('member_srl'))
|
||||
{
|
||||
// Create a member model object
|
||||
$oMemberModel = &getModel('member');
|
||||
$member_srl = $oMemberModel->getLoggedMemberSrl();
|
||||
// Pass after registering a session if author's information is same as the currently logged-in user's.
|
||||
if($member_srl && $member_srl == $oDocument->get('member_srl')) {
|
||||
if($member_srl && $member_srl == $oDocument->get('member_srl'))
|
||||
{
|
||||
$_SESSION['declared_document'][$document_srl] = true;
|
||||
return new Object(-1, 'failed_declared');
|
||||
}
|
||||
}
|
||||
|
||||
// Use member_srl for logged-in members and IP address for non-members.
|
||||
if($member_srl) {
|
||||
if($member_srl)
|
||||
{
|
||||
$args->member_srl = $member_srl;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
$args->document_srl = $document_srl;
|
||||
$output = executeQuery('document.getDocumentDeclaredLogInfo', $args);
|
||||
|
||||
// Pass after registering a sesson if reported/declared documents are in the logs.
|
||||
if($output->data->count) {
|
||||
if($output->data->count)
|
||||
{
|
||||
$_SESSION['declared_document'][$document_srl] = true;
|
||||
return new Object(-1, 'failed_declared');
|
||||
}
|
||||
|
||||
// begin transaction
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// Add the declared document
|
||||
if($declared_count > 0) $output = executeQuery('document.updateDeclaredDocument', $args);
|
||||
else $output = executeQuery('document.insertDeclaredDocument', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
// Leave logs
|
||||
$output = executeQuery('document.insertDocumentDeclaredLog', $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Call a trigger (after)
|
||||
$trigger_obj->declared_count = $declared_count + 1;
|
||||
$trigger_output = ModuleHandler::triggerCall('document.declaredDocument', 'after', $trigger_obj);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
// commit
|
||||
$oDB->commit();
|
||||
|
||||
// Leave in the session information
|
||||
$_SESSION['declared_document'][$document_srl] = true;
|
||||
|
||||
|
|
@ -1261,17 +1332,23 @@ class documentController extends document {
|
|||
$js_code = array();
|
||||
$js_code[] = '<script type="text/javascript">//<![CDATA[';
|
||||
$js_code[] = '(function($){';
|
||||
$js_code[] = 'var validator = xe.getApp("validator")[0];';
|
||||
$js_code[] = 'if(!validator) return false;';
|
||||
$js_code[] = 'var validator = xe.getApp("validator")[0];';
|
||||
$js_code[] = 'if(!validator) return false;';
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
foreach($extra_keys as $idx => $val) {
|
||||
$js_code[] = sprintf('validator.cast("ADD_MESSAGE", ["extra_vars%s","%s"]);', $val->idx, $val->name);
|
||||
if($val->is_required == 'Y') $js_code[] = sprintf('validator.cast("ADD_EXTRA_FIELD", ["extra_vars%s", { required:true }]);', $val->idx);
|
||||
}
|
||||
foreach($extra_keys as $idx => $val)
|
||||
{
|
||||
$idx = $val->idx;
|
||||
if($val->type == 'kr_zip')
|
||||
{
|
||||
$idx .= '[]';
|
||||
}
|
||||
$js_code[] = sprintf('validator.cast("ADD_MESSAGE", ["extra_vars%s","%s"]);', $idx, $val->name);
|
||||
if($val->is_required == 'Y') $js_code[] = sprintf('validator.cast("ADD_EXTRA_FIELD", ["extra_vars%s", { required:true }]);', $idx);
|
||||
}
|
||||
|
||||
$js_code[] = '})(jQuery);';
|
||||
$js_code[] = '})(jQuery);';
|
||||
$js_code[] = '//]]></script>';
|
||||
$js_code = implode("\n", $js_code);
|
||||
|
||||
|
|
|
|||
|
|
@ -193,224 +193,102 @@
|
|||
*/
|
||||
function getDocumentList($obj, $except_notice = false, $load_extra_vars=true, $columnList = array()) {
|
||||
$sort_check = $this->_setSortIndex($obj, $load_extra_vars);
|
||||
$obj->sort_index = $sort_check->sort_index;
|
||||
$obj->sort_index = $sort_check->sort_index;
|
||||
// cache controll
|
||||
$oCacheHandler = &CacheHandler::getInstance('object');
|
||||
if($oCacheHandler->isSupport()){
|
||||
$object_key = 'object:'.$obj->module_srl.'_category_srl:'.$obj->category_srl.'_list_count:'.$obj->list_count.'_search_target:'.$obj->search_target.'_search_keyword:'.$obj->search_keyword.'_page'.$obj->page.'_sort_index:'.$obj->sort_index.'_order_type:'.$obj->order_type;
|
||||
$cache_key = $oCacheHandler->getGroupKey('documentList', $object_key);
|
||||
$output = $oCacheHandler->get($cache_key);
|
||||
$output = $oCacheHandler->get($cache_key);
|
||||
|
||||
if($output)
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
if(!$output){
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$sort_check = $this->_setSortIndex($obj, $load_extra_vars);
|
||||
$this->_setSearchOption($obj, $args, $query_id, $use_division);
|
||||
|
||||
$obj->sort_index = $sort_check->sort_index;
|
||||
// Check the target and sequence alignment
|
||||
if(!in_array($obj->order_type, array('desc','asc'))) $obj->order_type = 'asc';
|
||||
// If that came across mid module_srl instead of a direct module_srl guhaejum
|
||||
if($obj->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($obj->mid);
|
||||
}
|
||||
// Module_srl passed the array may be a check whether the array
|
||||
if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl);
|
||||
else $args->module_srl = $obj->module_srl;
|
||||
// Except for the test module_srl
|
||||
if(is_array($obj->exclude_module_srl)) $args->exclude_module_srl = implode(',', $obj->exclude_module_srl);
|
||||
else $args->exclude_module_srl = $obj->exclude_module_srl;
|
||||
// Variable check
|
||||
$args->category_srl = $obj->category_srl?$obj->category_srl:null;
|
||||
$args->sort_index = $obj->sort_index;
|
||||
$args->order_type = $obj->order_type;
|
||||
$args->page = $obj->page?$obj->page:1;
|
||||
$args->list_count = $obj->list_count?$obj->list_count:20;
|
||||
$args->page_count = $obj->page_count?$obj->page_count:10;
|
||||
$args->start_date = $obj->start_date?$obj->start_date:null;
|
||||
$args->end_date = $obj->end_date?$obj->end_date:null;
|
||||
$args->member_srl = $obj->member_srl;
|
||||
if ($sort_check->isExtraVars)
|
||||
{
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
// document.getDocumentList query execution
|
||||
// Query_id if you have a group by clause getDocumentListWithinTag getDocumentListWithinComment or used again to perform the query because
|
||||
$groupByQuery = array('document.getDocumentListWithinComment' => 1, 'document.getDocumentListWithinTag' => 1);
|
||||
if(isset($groupByQuery[$query_id])) {
|
||||
$group_args = clone($args);
|
||||
$group_args->sort_index = 'documents.'.$args->sort_index;
|
||||
$output = executeQueryArray($query_id, $group_args);
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
|
||||
// only admin document list, temp document showing
|
||||
if($obj->statusList) $args->statusList = $obj->statusList;
|
||||
else
|
||||
{
|
||||
if($logged_info->is_admin == 'Y' && !$obj->module_srl)
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'), $this->getConfigStatus('temp'));
|
||||
else
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'));
|
||||
}
|
||||
|
||||
// Category is selected, further sub-categories until all conditions
|
||||
if($args->category_srl) {
|
||||
$category_list = $this->getCategoryList($args->module_srl);
|
||||
$category_info = $category_list[$args->category_srl];
|
||||
$category_info->childs[] = $args->category_srl;
|
||||
$args->category_srl = implode(',',$category_info->childs);
|
||||
}
|
||||
// Used to specify the default query id (based on several search options to query id modified)
|
||||
$query_id = 'document.getDocumentList';
|
||||
// If the search by specifying the document division naeyonggeomsaekil processed for
|
||||
$use_division = false;
|
||||
|
||||
// Search options
|
||||
$searchOpt->search_target = $obj->search_target;
|
||||
$searchOpt->search_keyword = $obj->search_keyword;
|
||||
$this->_setSearchOption($searchOpt, $args, $query_id, $use_division);
|
||||
|
||||
if ($sort_check->isExtraVars)
|
||||
{
|
||||
$query_id = 'document.getDocumentListExtraSort';
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* list_order asc sort of division that can be used only when
|
||||
*/
|
||||
if($args->sort_index != 'list_order' || $args->order_type != 'asc') $use_division = false;
|
||||
|
||||
/**
|
||||
* If it is true, use_division changed to use the document division
|
||||
*/
|
||||
if($use_division) {
|
||||
// Division begins
|
||||
$division = (int)Context::get('division');
|
||||
|
||||
// order by list_order and (module_srl===0 or module_srl many count), therefore case table full scan
|
||||
if($args->sort_index == 'list_order' && ($args->exclude_module_srl === '0' || count(explode(',', $args->module_srl)) > 5))
|
||||
{
|
||||
$listSqlID = 'document.getDocumentListUseIndex';
|
||||
$divisionSqlID = 'document.getDocumentDivisionUseIndex';
|
||||
}
|
||||
else
|
||||
{
|
||||
$listSqlID = 'document.getDocumentList';
|
||||
$divisionSqlID = 'document.getDocumentDivision';
|
||||
}
|
||||
|
||||
// If you do not value the best division top
|
||||
if(!$division) {
|
||||
$division_args->module_srl = $args->module_srl;
|
||||
$division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$division_args->list_count = 1;
|
||||
$division_args->sort_index = $args->sort_index;
|
||||
$division_args->order_type = $args->order_type;
|
||||
$division_args->statusList = $args->statusList;
|
||||
$output = executeQuery($listSqlID, $division_args, $columnList);
|
||||
if($output->data) {
|
||||
$item = array_pop($output->data);
|
||||
$division = $item->list_order;
|
||||
}
|
||||
$division_args = null;
|
||||
}
|
||||
// The last division
|
||||
$last_division = (int)Context::get('last_division');
|
||||
// Division after division from the 5000 value of the specified Wanted
|
||||
if(!$last_division) {
|
||||
$last_division_args->module_srl = $args->module_srl;
|
||||
$last_division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$last_division_args->list_count = 1;
|
||||
$last_division_args->sort_index = $args->sort_index;
|
||||
$last_division_args->order_type = $args->order_type;
|
||||
$last_division_args->list_order = $division;
|
||||
$last_division_args->page = 5001;
|
||||
$output = executeQuery($divisionSqlID, $last_division_args, $columnList);
|
||||
if($output->data) {
|
||||
$item = array_pop($output->data);
|
||||
$last_division = $item->list_order;
|
||||
}
|
||||
}
|
||||
// Make sure that after last_division article
|
||||
if($last_division) {
|
||||
$last_division_args = null;
|
||||
$last_division_args->module_srl = $args->module_srl;
|
||||
$last_division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$last_division_args->list_order = $last_division;
|
||||
$output = executeQuery("document.getDocumentDivisionCount", $last_division_args);
|
||||
if($output->data->count<1) $last_division = null;
|
||||
}
|
||||
|
||||
$args->division = $division;
|
||||
$args->last_division = $last_division;
|
||||
Context::set('division', $division);
|
||||
Context::set('last_division', $last_division);
|
||||
foreach($output->data as $key => $val) {
|
||||
if($val->document_srl) $target_srls[] = $val->document_srl;
|
||||
}
|
||||
// document.getDocumentList query execution
|
||||
// Query_id if you have a group by clause getDocumentListWithinTag getDocumentListWithinComment or used again to perform the query because
|
||||
if(in_array($query_id, array('document.getDocumentListWithinComment', 'document.getDocumentListWithinTag'))) {
|
||||
$group_args = clone($args);
|
||||
$group_args->sort_index = 'documents.'.$args->sort_index;
|
||||
$output = executeQueryArray($query_id, $group_args);
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
|
||||
foreach($output->data as $key => $val) {
|
||||
if($val->document_srl) $target_srls[] = $val->document_srl;
|
||||
}
|
||||
|
||||
$page_navigation = $output->page_navigation;
|
||||
$keys = array_keys($output->data);
|
||||
$virtual_number = $keys[0];
|
||||
|
||||
$target_args->document_srls = implode(',',$target_srls);
|
||||
$target_args->list_order = $args->sort_index;
|
||||
$target_args->order_type = $args->order_type;
|
||||
$target_args->list_count = $args->list_count;
|
||||
$target_args->page = 1;
|
||||
$output = executeQueryArray('document.getDocuments', $target_args);
|
||||
$output->page_navigation = $page_navigation;
|
||||
$output->total_count = $page_navigation->total_count;
|
||||
$output->total_page = $page_navigation->total_page;
|
||||
$output->page = $page_navigation->cur_page;
|
||||
} else {
|
||||
$output = executeQueryArray($query_id, $args, $columnList);
|
||||
}
|
||||
}
|
||||
// Return if no result or an error occurs
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
$idx = 0;
|
||||
$data = $output->data;
|
||||
unset($output->data);
|
||||
|
||||
if(!isset($virtual_number))
|
||||
{
|
||||
$keys = array_keys($data);
|
||||
$page_navigation = $output->page_navigation;
|
||||
$keys = array_keys($output->data);
|
||||
$virtual_number = $keys[0];
|
||||
|
||||
$target_args->document_srls = implode(',',$target_srls);
|
||||
$target_args->list_order = $args->sort_index;
|
||||
$target_args->order_type = $args->order_type;
|
||||
$target_args->list_count = $args->list_count;
|
||||
$target_args->page = 1;
|
||||
$output = executeQueryArray('document.getDocuments', $target_args);
|
||||
$output->page_navigation = $page_navigation;
|
||||
$output->total_count = $page_navigation->total_count;
|
||||
$output->total_page = $page_navigation->total_page;
|
||||
$output->page = $page_navigation->cur_page;
|
||||
} else {
|
||||
$output = executeQueryArray($query_id, $args, $columnList);
|
||||
}
|
||||
|
||||
if($except_notice) {
|
||||
foreach($data as $key => $attribute) {
|
||||
if($attribute->is_notice == 'Y') $virtual_number --;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($data as $key => $attribute) {
|
||||
if($except_notice && $attribute->is_notice == 'Y') continue;
|
||||
$document_srl = $attribute->document_srl;
|
||||
if(!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) {
|
||||
$oDocument = null;
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($attribute, false);
|
||||
if($is_admin) $oDocument->setGrant();
|
||||
$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
|
||||
}
|
||||
|
||||
$output->data[$virtual_number] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl];
|
||||
$virtual_number --;
|
||||
|
||||
}
|
||||
|
||||
if($load_extra_vars) $this->setToAllDocumentExtraVars();
|
||||
|
||||
if(count($output->data)) {
|
||||
foreach($output->data as $number => $document) {
|
||||
$output->data[$number] = $GLOBALS['XE_DOCUMENT_LIST'][$document->document_srl];
|
||||
}
|
||||
}
|
||||
//insert in cache
|
||||
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key,$output);
|
||||
}
|
||||
// Return if no result or an error occurs
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
$idx = 0;
|
||||
$data = $output->data;
|
||||
unset($output->data);
|
||||
|
||||
if(!isset($virtual_number))
|
||||
{
|
||||
$keys = array_keys($data);
|
||||
$virtual_number = $keys[0];
|
||||
}
|
||||
|
||||
if($except_notice) {
|
||||
foreach($data as $key => $attribute) {
|
||||
if($attribute->is_notice == 'Y') $virtual_number --;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($data as $key => $attribute) {
|
||||
if($except_notice && $attribute->is_notice == 'Y') continue;
|
||||
$document_srl = $attribute->document_srl;
|
||||
if(!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) {
|
||||
$oDocument = null;
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($attribute, false);
|
||||
if($is_admin) $oDocument->setGrant();
|
||||
$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
|
||||
}
|
||||
|
||||
$output->data[$virtual_number] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl];
|
||||
$virtual_number --;
|
||||
|
||||
}
|
||||
|
||||
if($load_extra_vars) $this->setToAllDocumentExtraVars();
|
||||
|
||||
if(count($output->data)) {
|
||||
foreach($output->data as $number => $document) {
|
||||
$output->data[$number] = $GLOBALS['XE_DOCUMENT_LIST'][$document->document_srl];
|
||||
}
|
||||
}
|
||||
//insert in cache
|
||||
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key,$output);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
|
@ -596,7 +474,7 @@
|
|||
$url = getUrl('','module','admin','act','dispDocumentAdminList','search_target','ipaddress','search_keyword',$oDocument->getIpAddress());
|
||||
$oDocumentController->addDocumentPopupMenu($url,'cmd_search_by_ipaddress',$icon_path,'TraceByIpaddress');
|
||||
|
||||
$url = sprintf("var params = new Array(); params['ipaddress']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oDocument->getIpAddress());
|
||||
$url = sprintf("var params = new Array(); params['ipaddress_list']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oDocument->getIpAddress());
|
||||
$oDocumentController->addDocumentPopupMenu($url,'cmd_add_ip_to_spamfilter','','javascript');
|
||||
}
|
||||
}
|
||||
|
|
@ -654,6 +532,23 @@
|
|||
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
function getDocumentExtraVarsCount($module_srl, $search_obj = NULL)
|
||||
{
|
||||
// Additional search options
|
||||
$args->module_srl = $module_srl;
|
||||
|
||||
$args->category_srl = $search_obj->category_srl;
|
||||
$args->var_idx = $search_obj->s_var_idx;
|
||||
$args->var_eid = $search_obj->s_var_eid;
|
||||
$args->var_value = $search_obj->s_var_value;
|
||||
|
||||
$output = executeQuery('document.getDocumentExtraVarsCount', $args);
|
||||
// Return total number of
|
||||
$total_count = $output->data->count;
|
||||
return (int)$total_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Import page of the document, module_srl Without throughout ..
|
||||
* @param documentItem $oDocument
|
||||
|
|
@ -661,62 +556,34 @@
|
|||
* @return int
|
||||
*/
|
||||
function getDocumentPage($oDocument, $opt) {
|
||||
// Sort type changes depending on the query args
|
||||
switch($opt->sort_index) {
|
||||
case 'update_order' :
|
||||
if($opt->order_type == 'desc') $args->rev_update_order = $oDocument->get('update_order');
|
||||
else $args->update_order = $oDocument->get('update_order');
|
||||
break;
|
||||
case 'regdate' :
|
||||
if($opt->order_type == 'asc') $args->rev_regdate = $oDocument->get('regdate');
|
||||
else $args->regdate = $oDocument->get('regdate');
|
||||
break;
|
||||
case 'voted_count' :
|
||||
case 'blamed_count' :
|
||||
case 'readed_count' :
|
||||
case 'comment_count' :
|
||||
case 'title' :
|
||||
return 1;
|
||||
break;
|
||||
default :
|
||||
if($opt->order_type == 'desc') $args->rev_list_order = $oDocument->get('list_order');
|
||||
else $args->list_order = $oDocument->get('list_order');
|
||||
break;
|
||||
}
|
||||
$args->module_srl = $oDocument->get('module_srl');
|
||||
$args->sort_index = $opt->sort_index;
|
||||
$args->order_type = $opt->order_type;
|
||||
$this->_setSearchOption($opt, $args, $query_id, $use_division);
|
||||
$sort_check = $this->_setSortIndex($args, TRUE);
|
||||
|
||||
if($opt->statusList) $args->statusList = $opt->statusList;
|
||||
if($sort_check->isExtraVars)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->is_admin == 'Y' && !$args->module_srl)
|
||||
if($sort_check->sort_index === 'list_order' || $sort_check->sort_index === 'update_order')
|
||||
{
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'), $this->getConfigStatus('temp'));
|
||||
if($args->order_type === 'desc')
|
||||
{
|
||||
$args->{'rev_' . $sort_check->sort_index} = $oDocument->get($sort_check->sort_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->{$sort_check->sort_index} = $oDocument->get($sort_check->sort_index);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'));
|
||||
}
|
||||
}
|
||||
|
||||
// Category is selected, further sub-categories until all conditions
|
||||
if($opt->category_srl)
|
||||
{
|
||||
$categoryList = $this->getCategoryList($opt->module_srl);
|
||||
|
||||
if(array_key_exists($opt->category_srl, $categoryList))
|
||||
{
|
||||
$categoryInfo = $categoryList[$opt->category_srl];
|
||||
|
||||
$args->categorySrlList = $categoryInfo->childs;
|
||||
array_push($args->categorySrlList, $opt->category_srl);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Guhanhu total number of the article search page
|
||||
$output = executeQuery('document.getDocumentPage', $args);
|
||||
$output = executeQuery($query_id . 'Page', $args);
|
||||
$count = $output->data->count;
|
||||
$page = (int)(($count-1)/$opt->list_count)+1;
|
||||
return $page;
|
||||
|
|
@ -1081,8 +948,8 @@
|
|||
if(is_array($output->data)) return $output->data[0]->document_srl;
|
||||
return $output->data->document_srl;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return docuent's alias
|
||||
* @param int $document_srl
|
||||
|
|
@ -1299,9 +1166,9 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* 게시물 목록의 검색 옵션을 Setting함(2011.03.08 - cherryfilter)
|
||||
* page변수가 없는 상태에서 page 값을 알아오는 method(getDocumentPage)는 검색하지 않은 값을 return해서 검색한 값을 가져오도록 검색옵션이 추가 됨.
|
||||
* 검색옵션의 중복으로 인해 private method로 별도 분리
|
||||
* 게시ë¬?목ë¡<EFBFBD>??ê²€???µì…˜??Setting??2011.03.08 - cherryfilter)
|
||||
* pageë³€?˜ê? ?†ëŠ” ?<EFBFBD>태?<EFBFBD>서 page ê°’ì<EFBFBD>„ ?Œì•„?¤ëŠ” method(getDocumentPage)??ê²€?‰í•˜ì§€ ?Šì? ê°’ì<EFBFBD>„ return?´ì„œ ê²€?‰í•œ ê°’ì<EFBFBD>„ ê°€?¸ì˜¤?„ë¡<EFBFBD> ê²€?‰ì˜µ?˜ì<EFBFBD>´ ì¶”ê? ??
|
||||
* ê²€?‰ì˜µ?˜ì<EFBFBD>˜ 중복?¼ë¡œ ?¸í•´ private methodë¡?별ë<EFBFBD>„ 분리
|
||||
* @param object $searchOpt
|
||||
* @param object $args
|
||||
* @param string $query_id
|
||||
|
|
@ -1310,6 +1177,66 @@
|
|||
*/
|
||||
function _setSearchOption($searchOpt, &$args, &$query_id, &$use_division)
|
||||
{
|
||||
// Variable check
|
||||
$args->category_srl = $searchOpt->category_srl?$searchOpt->category_srl:null;
|
||||
$args->order_type = $searchOpt->order_type;
|
||||
$args->page = $searchOpt->page?$searchOpt->page:1;
|
||||
$args->list_count = $searchOpt->list_count?$searchOpt->list_count:20;
|
||||
$args->page_count = $searchOpt->page_count?$searchOpt->page_count:10;
|
||||
$args->start_date = $searchOpt->start_date?$searchOpt->start_date:null;
|
||||
$args->end_date = $searchOpt->end_date?$searchOpt->end_date:null;
|
||||
$args->member_srl = $searchOpt->member_srl;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$sort_check = $this->_setSortIndex($searchOpt, $load_extra_vars);
|
||||
|
||||
$args->sort_index = $sort_check->sort_index;
|
||||
|
||||
// Check the target and sequence alignment
|
||||
$orderType = array('desc' => 1, 'asc' => 1);
|
||||
if(!isset($orderType[$args->order_type])) $args->order_type = 'asc';
|
||||
|
||||
// If that came across mid module_srl instead of a direct module_srl guhaejum
|
||||
if($searchOpt->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$args->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($searchOpt->mid);
|
||||
}
|
||||
|
||||
// Module_srl passed the array may be a check whether the array
|
||||
if(is_array($searchOpt->module_srl)) $args->module_srl = implode(',', $searchOpt->module_srl);
|
||||
else $args->module_srl = $searchOpt->module_srl;
|
||||
|
||||
// Except for the test module_srl
|
||||
if(is_array($searchOpt->exclude_module_srl)) $args->exclude_module_srl = implode(',', $searchOpt->exclude_module_srl);
|
||||
else $args->exclude_module_srl = $searchOpt->exclude_module_srl;
|
||||
|
||||
|
||||
// only admin document list, temp document showing
|
||||
if($searchOpt->statusList) $args->statusList = $searchOpt->statusList;
|
||||
else
|
||||
{
|
||||
if($logged_info->is_admin == 'Y' && !$searchOpt->module_srl)
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'), $this->getConfigStatus('temp'));
|
||||
else
|
||||
$args->statusList = array($this->getConfigStatus('secret'), $this->getConfigStatus('public'));
|
||||
}
|
||||
|
||||
// Category is selected, further sub-categories until all conditions
|
||||
if($args->category_srl) {
|
||||
$category_list = $this->getCategoryList($args->module_srl);
|
||||
$category_info = $category_list[$args->category_srl];
|
||||
$category_info->childs[] = $args->category_srl;
|
||||
$args->category_srl = implode(',',$category_info->childs);
|
||||
}
|
||||
|
||||
// Used to specify the default query id (based on several search options to query id modified)
|
||||
$query_id = 'document.getDocumentList';
|
||||
|
||||
// If the search by specifying the document division naeyonggeomsaekil processed for
|
||||
$use_division = false;
|
||||
|
||||
// Search options
|
||||
$search_target = $searchOpt->search_target;
|
||||
$search_keyword = $searchOpt->search_keyword;
|
||||
|
||||
|
|
@ -1380,6 +1307,93 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($sort_check->isExtraVars)
|
||||
{
|
||||
$query_id = 'document.getDocumentListExtraSort';
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* list_order asc sort of division that can be used only when
|
||||
*/
|
||||
if($args->sort_index != 'list_order' || $args->order_type != 'asc') $use_division = false;
|
||||
|
||||
/**
|
||||
* If it is true, use_division changed to use the document division
|
||||
*/
|
||||
if($use_division) {
|
||||
// Division begins
|
||||
$division = (int)Context::get('division');
|
||||
|
||||
// order by list_order and (module_srl===0 or module_srl may count), therefore case table full scan
|
||||
if($args->sort_index == 'list_order' && ($args->exclude_module_srl === '0' || count(explode(',', $args->module_srl)) > 5))
|
||||
{
|
||||
$listSqlID = 'document.getDocumentListUseIndex';
|
||||
$divisionSqlID = 'document.getDocumentDivisionUseIndex';
|
||||
}
|
||||
else
|
||||
{
|
||||
$listSqlID = 'document.getDocumentList';
|
||||
$divisionSqlID = 'document.getDocumentDivision';
|
||||
}
|
||||
|
||||
// If you do not value the best division top
|
||||
if(!$division)
|
||||
{
|
||||
$division_args->module_srl = $args->module_srl;
|
||||
$division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$division_args->list_count = 1;
|
||||
$division_args->sort_index = $args->sort_index;
|
||||
$division_args->order_type = $args->order_type;
|
||||
$division_args->statusList = $args->statusList;
|
||||
|
||||
$output = executeQuery($divisionSqlID, $division_args, array('list_order'));
|
||||
if($output->data)
|
||||
{
|
||||
$item = array_pop($output->data);
|
||||
$division = $item->list_order;
|
||||
}
|
||||
$division_args = null;
|
||||
}
|
||||
|
||||
// The last division
|
||||
$last_division = (int)Context::get('last_division');
|
||||
|
||||
// Division after division from the 5000 value of the specified Wanted
|
||||
if(!$last_division) {
|
||||
$last_division_args->module_srl = $args->module_srl;
|
||||
$last_division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$last_division_args->list_count = 1;
|
||||
$last_division_args->sort_index = $args->sort_index;
|
||||
$last_division_args->order_type = $args->order_type;
|
||||
$last_division_args->list_order = $division;
|
||||
$last_division_args->page = 5001;
|
||||
|
||||
$output = executeQuery($divisionSqlID, $last_division_args, array('list_order'));
|
||||
if($output->data) {
|
||||
$item = array_pop($output->data);
|
||||
$last_division = $item->list_order;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure that after last_division article
|
||||
if($last_division)
|
||||
{
|
||||
$last_division_args = new stdClass();
|
||||
$last_division_args->module_srl = $args->module_srl;
|
||||
$last_division_args->exclude_module_srl = $args->exclude_module_srl;
|
||||
$last_division_args->list_order = $last_division;
|
||||
$output = executeQuery('document.getDocumentDivisionCount', $last_division_args);
|
||||
if($output->data->count<1) $last_division = null;
|
||||
}
|
||||
|
||||
$args->division = $division;
|
||||
$args->last_division = $last_division;
|
||||
Context::set('division', $division);
|
||||
Context::set('last_division', $last_division);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
29
modules/document/queries/getDocumentExtraVarsCount.xml
Normal file
29
modules/document/queries/getDocumentExtraVarsCount.xml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<query id="getDocumentExtraVarsCount" action="select">
|
||||
<tables>
|
||||
<table query="true" alias="A">
|
||||
<tables>
|
||||
<table name="documents" />
|
||||
<table name="document_extra_vars" alias="extra_vars" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(*)" alias="count" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
|
||||
<condition operation="in" column="documents.category_srl" var="category_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.module_srl" default="documents.module_srl" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.document_srl" default="documents.document_srl" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.var_idx" var="var_idx" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.eid" var="var_eid" pipe="and" />
|
||||
<condition operation="in" column="documents.status" var="statusList" pipe="and" />
|
||||
<condition operation="like" column="extra_vars.value" var="var_value" notnull="notnull" pipe="and" />
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="extra_vars.document_srl" />
|
||||
</groups>
|
||||
</table>
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(A.count)" alias="count" />
|
||||
</columns>
|
||||
</query>
|
||||
|
|
@ -1,30 +1,21 @@
|
|||
<query id="getDocumentPage" action="select">
|
||||
<query id="getDocumentListPage" action="select">
|
||||
<tables>
|
||||
<table name="documents" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(*)" alias="count" />
|
||||
<column name="count(document_srl)" alias="count" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module_srl" var="module_srl" />
|
||||
<condition operation="in" column="category_srl" var="categorySrlList" pipe="and" />
|
||||
<condition operation="more" column="comment_count" var="comment_count" filter="number" pipe="and" />
|
||||
<condition operation="less" column="comment_count" var="rev_comment_count" filter="number" pipe="and" />
|
||||
<condition operation="more" column="voted_count" var="voted_count" filter="number" pipe="and" />
|
||||
<condition operation="less" column="voted_count" var="rev_voted_count" filter="number" pipe="and" />
|
||||
<condition operation="less" column="blamed_count" var="blamed_count" filter="number" pipe="and" />
|
||||
<condition operation="more" column="blamed_count" var="rev_blamed_count" filter="number" pipe="and" />
|
||||
<condition operation="more" column="readed_count" var="readed_count" filter="number" pipe="and" />
|
||||
<condition operation="less" column="readed_count" var="rev_readed_count" filter="number" pipe="and" />
|
||||
<condition operation="less" column="list_order" var="list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="list_order" var="rev_list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="title" var="title" filter="number" pipe="and" />
|
||||
<condition operation="less" column="title" var="rev_title" filter="number" pipe="and" />
|
||||
<condition operation="more" column="regdate" var="regdate" filter="number" pipe="and" />
|
||||
<condition operation="less" column="regdate" var="rev_regdate" filter="number" pipe="and" />
|
||||
<condition operation="less" column="update_order" var="update_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="update_order" var="rev_update_order" filter="number" pipe="and" />
|
||||
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
|
||||
<condition operation="notin" column="module_srl" var="exclude_module_srl" filter="number" pipe="and" />
|
||||
<condition operation="in" column="category_srl" var="category_srl" pipe="and" />
|
||||
<condition operation="equal" column="is_notice" var="s_is_notice" pipe="and" />
|
||||
<condition operation="equal" column="member_srl" var="member_srl" filter="number" pipe="and" />
|
||||
<condition operation="in" column="status" var="statusList" pipe="and" />
|
||||
<group pipe="and">
|
||||
<condition operation="more" column="list_order" var="division" pipe="and" />
|
||||
<condition operation="below" column="list_order" var="last_division" pipe="and" />
|
||||
</group>
|
||||
<group pipe="and">
|
||||
<condition operation="like" column="title" var="s_title" />
|
||||
<condition operation="like" column="content" var="s_content" pipe="or" />
|
||||
|
|
@ -45,5 +36,15 @@
|
|||
<condition operation="like_prefix" column="last_update" var="s_last_update" pipe="or" />
|
||||
<condition operation="like_prefix" column="ipaddress" var="s_ipaddress" pipe="or" />
|
||||
</group>
|
||||
<group pipe="and">
|
||||
<condition operation="more" column="last_update" var="start_date" pipe="and" />
|
||||
<condition operation="less" column="last_update" var="end_date" pipe="and" />
|
||||
</group>
|
||||
<group pipe="and">
|
||||
<condition operation="less" column="list_order" var="list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="list_order" var="rev_list_order" filter="number" pipe="and" />
|
||||
<condition operation="less" column="update_order" var="update_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="update_order" var="rev_update_order" filter="number" pipe="and" />
|
||||
</group>
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<query id="getDocumentListWithExtraVarsPage" action="select">
|
||||
<tables>
|
||||
<table name="documents" />
|
||||
<table name="document_extra_vars" alias="extra_vars" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(distinct documents.document_srl)" alias="count" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
|
||||
<condition operation="in" column="documents.category_srl" var="category_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.module_srl" default="documents.module_srl" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.document_srl" default="documents.document_srl" pipe="and" />
|
||||
<condition operation="equal" column="extra_vars.var_idx" var="var_idx" notnull="notnull" pipe="and" />
|
||||
<condition operation="in" column="documents.status" var="statusList" pipe="and" />
|
||||
<condition operation="like" column="extra_vars.value" var="var_value" notnull="notnull" pipe="and" />
|
||||
<group pipe="and">
|
||||
<condition operation="less" column="documents.list_order" var="list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.list_order" var="rev_list_order" filter="number" pipe="and" />
|
||||
<condition operation="less" column="documents.update_order" var="update_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.update_order" var="rev_update_order" filter="number" pipe="and" />
|
||||
</group>
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<query id="getDocumentListWithinCommentPage" action="select">
|
||||
<tables>
|
||||
<table name="documents" alias="documents" />
|
||||
<table name="comments" alias="comments" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(distinct documents.document_srl)" alias="count" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
|
||||
<condition operation="notin" column="documents.module_srl" var="exclude_module_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="documents.category_srl" var="category_srl" pipe="and" />
|
||||
<condition operation="equal" column="documents.document_srl" default="comments.document_srl" notnull="notnull" pipe="and" />
|
||||
<condition operation="equal" column="documents.member_srl" var="member_srl" filter="number" pipe="and" />
|
||||
<condition operation="in" column="documents.status" var="statusList" pipe="and" />
|
||||
<group pipe="and">
|
||||
<condition operation="more" column="documents.list_order" var="division" pipe="and" />
|
||||
<condition operation="below" column="documents.list_order" var="last_division" pipe="and" />
|
||||
</group>
|
||||
<condition operation="like" column="comments.content" var="s_comment" notnull="notnull" pipe="and" />
|
||||
<group pipe="and">
|
||||
<condition operation="less" column="documents.list_order" var="list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.list_order" var="rev_list_order" filter="number" pipe="and" />
|
||||
<condition operation="less" column="documents.update_order" var="update_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.update_order" var="rev_update_order" filter="number" pipe="and" />
|
||||
</group>
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -21,4 +21,7 @@
|
|||
<page_count var="page_count" default="10" />
|
||||
<page var="page" default="1" />
|
||||
</navigation>
|
||||
<groups>
|
||||
<group column="documents.document_srl" />
|
||||
</groups>
|
||||
</query>
|
||||
|
|
|
|||
23
modules/document/queries/getDocumentListWithinTagPage.xml
Normal file
23
modules/document/queries/getDocumentListWithinTagPage.xml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<query id="getDocumentListWithinTagPage" action="select">
|
||||
<tables>
|
||||
<table name="documents" alias="documents" />
|
||||
<table name="tags" alias="tags" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="count(distinct documents.document_srl)" alias="count" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
|
||||
<condition operation="notin" column="documents.module_srl" var="exclude_module_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="documents.document_srl" default="tags.document_srl" notnull="notnull" pipe="and" />
|
||||
<condition operation="in" column="documents.category_srl" var="category_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="documents.member_srl" var="member_srl" filter="number" pipe="and" />
|
||||
<condition operation="like" column="tags.tag" var="s_tags" notnull="notnull" pipe="and" />
|
||||
<group pipe="and">
|
||||
<condition operation="less" column="documents.list_order" var="list_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.list_order" var="rev_list_order" filter="number" pipe="and" />
|
||||
<condition operation="less" column="documents.update_order" var="update_order" filter="number" pipe="and" />
|
||||
<condition operation="more" column="documents.update_order" var="rev_update_order" filter="number" pipe="and" />
|
||||
</group>
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -48,7 +48,7 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<!--@foreach($document_list as $no => $oDocument)-->
|
||||
<!--@foreach($document_list as $no => $oDocument)-->
|
||||
<tr>
|
||||
<td class="title"><a href="{getUrl('','document_srl',$oDocument->document_srl)}" target="_blank">{$oDocument->getTitle()}</a></td>
|
||||
<td class="nowr"><a href="#popup_menu_area" class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</a></td>
|
||||
|
|
@ -122,14 +122,14 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</div>
|
||||
<div class="search">
|
||||
|
||||
<form action="" class="pagination">
|
||||
<form action="./" class="pagination">
|
||||
<input type="hidden" name="error_return_url" value="" />
|
||||
<input type="hidden" name="module" value="{$module}" />
|
||||
<input type="hidden" name="act" value="{$act}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
|
||||
|
||||
<a href="{getUrl('page', '')}" class="direction">« FIRST</a>
|
||||
<a href="{getUrl('page', '')}" class="direction">« {$lang->first_page}</a>
|
||||
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
|
||||
{@$isGoTo = true}
|
||||
<a href="{getUrl('page', '')}">1</a>
|
||||
|
|
@ -145,7 +145,7 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
|
||||
</block>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">LAST »</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">{$lang->last_page} »</a>
|
||||
<span cond="$isGoTo" id="goTo" class="tgContent">
|
||||
<input name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit">Go</button>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<!--@foreach($document_list as $no => $oDocument)-->
|
||||
<!--@foreach($document_list as $no => $oDocument)-->
|
||||
<tr>
|
||||
<td class="title"><a href="{getUrl('','document_srl',$oDocument->document_srl)}" target="_blank"><!--@if(trim($oDocument->getTitle()))-->{$oDocument->getTitle()}<!--@else--><em>{$lang->no_title_document}</em><!--@end--></a></td>
|
||||
<td class="nowr"><a href="#popup_menu_area" class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</a></td>
|
||||
|
|
@ -133,14 +133,14 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</div>
|
||||
<div class="search">
|
||||
|
||||
<form action="" class="pagination">
|
||||
<form action="./" class="pagination">
|
||||
<input type="hidden" name="error_return_url" value="" />
|
||||
<input type="hidden" name="module" value="{$module}" />
|
||||
<input type="hidden" name="act" value="{$act}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
<input cond="$search_target" type="hidden" name="search_target" value="{$search_target}" />
|
||||
|
||||
<a href="{getUrl('page', '')}" class="direction">« FIRST</a>
|
||||
<a href="{getUrl('page', '')}" class="direction">« {$lang->first_page}</a>
|
||||
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
|
||||
{@$isGoTo = true}
|
||||
<a href="{getUrl('page', '')}">1</a>
|
||||
|
|
@ -156,7 +156,7 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
<a href="#goTo" class="tgAnchor" title="{$lang->cmd_go_to_page}">...</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
|
||||
</block>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">LAST »</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">{$lang->last_page} »</a>
|
||||
<span cond="$isGoTo" id="goTo" class="tgContent">
|
||||
<input name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit">Go</button>
|
||||
|
|
|
|||
|
|
@ -22,6 +22,13 @@ var listShow = xe.createPlugin('list', {
|
|||
w1 = im.$obj.prop('width');
|
||||
h1 = im.$obj.prop('height');
|
||||
|
||||
if (w1 == 0){
|
||||
w1 = im.$obj.attr('width');
|
||||
}
|
||||
if(h1 ==0){
|
||||
h1 = im.$obj.attr('height');
|
||||
}
|
||||
|
||||
if(w1 > width - 25) {
|
||||
w2 = width - 25;
|
||||
scale = w2 / w1;
|
||||
|
|
|
|||
|
|
@ -3,4 +3,5 @@
|
|||
* @brief List-type image gallery
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
**/
|
||||
(function(k){var h=xe.createPlugin("list",{API_SHOW_LIST:function(i,h){var c=h[0],d,e,j,b,a,g,f;d=this.cast("GET_IMAGES",[c]);if(d.length){c=k("#zone_list_gallery_"+c).empty();width=c.innerWidth();e=0;for(j=d.length;e<j;e++)b=d[e],a=b.$obj.prop("width"),f=b.$obj.prop("height"),a>width-25&&(g=width-25,a=g/a,f=Math.floor(f*a),a=g,b.$obj.attr("rel","xe_gallery")),c.append(b.$obj),b.$obj.css({width:a+"px",height:f,margin:"0 10px",display:"block"})}}}),i=xe.getApp("Gallery")[0];i&&i.registerPlugin(new h)})(jQuery);
|
||||
(function(k){var h=xe.createPlugin("list",{API_SHOW_LIST:function(i,h){var d=h[0],e,f,j,b,a,g,c;e=this.cast("GET_IMAGES",[d]);if(e.length){d=k("#zone_list_gallery_"+d).empty();width=d.innerWidth();f=0;for(j=e.length;f<j;f++)b=e[f],a=b.$obj.prop("width"),c=b.$obj.prop("height"),0==a&&(a=b.$obj.attr("width")),0==c&&(c=b.$obj.attr("height")),a>width-25&&(g=width-25,a=g/a,c=Math.floor(c*a),a=g,b.$obj.attr("rel","xe_gallery")),d.append(b.$obj),b.$obj.css({width:a+"px",height:c,margin:"0 10px",display:"block"})}}}),
|
||||
i=xe.getApp("Gallery")[0];i&&i.registerPlugin(new h)})(jQuery);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
var selected_node=null;
|
||||
function getSlideShow(){var c,b,d="",e,a,f,g;if(typeof opener!="undefined"){c=opener.editorPrevNode;b=jQuery(c);if(b.is("img"))selected_node=c,d=$(c).width()-4,c=b.attr("gallery_style"),e=b.attr("gallery_align")||"center",a=b.attr("border_color"),f=b.attr("bg_color"),g=b.attr("border_thickness")||1,get_by_id("width").value=d,get_by_id("gallery_style").selectedIndex=c=="list"?1:0,get_by_id("gallery_align").selectedIndex=e=="left"?1:e=="right"?2:0,get_by_id("border_thickness").value=g,get_by_id("border_color_input").value=
|
||||
a,manual_select_color("border",get_by_id("border_color_input")),get_by_id("bg_color_input").value=f,manual_select_color("bg",get_by_id("bg_color_input")),d=b.attr("images_list");b=get_by_id("fo").editor_sequence.value;if(b=opener.get_by_id("uploaded_file_list_"+b)){c=get_by_id("image_list");for(e=0;e<b.length;e++){a=b.options[e];f=a.value;if(!f)break;f=opener.uploadedFiles[f].download_url.replace(request_uri,"");/(jpg|jpeg|gif|png)$/i.test(f)&&(g=!1,d.indexOf(f)!=-1&&(g=!0),a=new Option(a.text,a.value,
|
||||
!1,g),c.options.add(a))}}}}
|
||||
function insertSlideShow(){if(typeof opener!="undefined"){for(var c=[],b=get_by_id("image_list"),d=0;d<b.length;d++){var e=b.options[d];e.selected&&(e=opener.uploadedFiles[e.value].download_url.replace(request_uri,""),c[c.length]=e)}if(c.length){for(var b=get_by_id("width").value,e=get_by_id("gallery_style").options[get_by_id("gallery_style").selectedIndex].value,a=get_by_id("gallery_align").options[get_by_id("gallery_align").selectedIndex].value,f=get_by_id("border_thickness").value,g=get_by_id("border_color_input").value,
|
||||
function getSlideShow(){var c,b,d="",e,a,f,g;if("undefined"!=typeof opener&&(c=opener.editorPrevNode,b=jQuery(c),b.is("img")&&(selected_node=c,d=$(c).width()-4,c=b.attr("gallery_style"),e=b.attr("gallery_align")||"center",a=b.attr("border_color"),f=b.attr("bg_color"),g=b.attr("border_thickness")||1,get_by_id("width").value=d,get_by_id("gallery_style").selectedIndex="list"==c?1:0,get_by_id("gallery_align").selectedIndex="left"==e?1:"right"==e?2:0,get_by_id("border_thickness").value=g,get_by_id("border_color_input").value=
|
||||
a,manual_select_color("border",get_by_id("border_color_input")),get_by_id("bg_color_input").value=f,manual_select_color("bg",get_by_id("bg_color_input")),d=b.attr("images_list")),b=get_by_id("fo").editor_sequence.value,b=opener.get_by_id("uploaded_file_list_"+b))){c=get_by_id("image_list");for(e=0;e<b.length;e++){a=b.options[e];f=a.value;if(!f)break;f=opener.uploadedFiles[f].download_url.replace(request_uri,"");/(jpg|jpeg|gif|png)$/i.test(f)&&(g=!1,-1!=d.indexOf(f)&&(g=!0),a=new Option(a.text,a.value,
|
||||
!1,g),c.options.add(a))}}}
|
||||
function insertSlideShow(){if("undefined"!=typeof opener){for(var c=[],b=get_by_id("image_list"),d=0;d<b.length;d++){var e=b.options[d];e.selected&&(e=opener.uploadedFiles[e.value].download_url.replace(request_uri,""),c[c.length]=e)}if(c.length){for(var b=get_by_id("width").value,e=get_by_id("gallery_style").options[get_by_id("gallery_style").selectedIndex].value,a=get_by_id("gallery_align").options[get_by_id("gallery_align").selectedIndex].value,f=get_by_id("border_thickness").value,g=get_by_id("border_color_input").value,
|
||||
i=get_by_id("bg_color_input").value,h="",d=0;d<c.length;d++)h+=c[d].trim()+" ";selected_node?(selected_node.setAttribute("width",b),selected_node.setAttribute("gallery_style",e),selected_node.setAttribute("align",a),selected_node.setAttribute("gallery_align",a),selected_node.setAttribute("border_thickness",f),selected_node.setAttribute("border_color",g),selected_node.setAttribute("bg_color",i),selected_node.setAttribute("images_list",h),selected_node.style.width=b+"px"):(c='<img src="../../../../common/img/blank.gif" editor_component="image_gallery" width="'+
|
||||
b+'" gallery_style="'+e+'" align="'+a+'" gallery_align="'+a+'" border_thickness="'+f+'" border_color="'+g+'" bg_color="'+i+'" style="width:'+b+'px;border:2px dotted #4371B9;background:url(./modules/editor/components/image_gallery/tpl/image_gallery_component.gif) no-repeat center;" images_list="'+h+'" />',opener.editorFocus(opener.editorPrevSrl),d=opener.editorGetIFrame(opener.editorPrevSrl),opener.editorReplaceHTML(d,c));opener.editorFocus(opener.editorPrevSrl)}window.close()}}
|
||||
function select_color(c,b){get_by_id(c+"_preview_color").style.backgroundColor="#"+b;get_by_id(c+"_color_input").value=b}function manual_select_color(c,b){if(b.value.length==6)code=b.value,get_by_id(c+"_preview_color").style.backgroundColor="#"+code}
|
||||
function printColor(c,b){for(var d=["22","44","66","88","AA","CC","EE"],e="",a=0;a<8;a+=1)e+=printColorBlock(c,a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16),b);for(a=0;a<d.length;a+=3)for(var f=0;f<d.length;f+=2)for(var g=0;g<d.length;g++)e+=printColorBlock(c,d[a]+d[f]+d[g],b);for(a=8;a<16;a+=1)e+=printColorBlock(c,a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16),b);document.write(e)}
|
||||
function select_color(c,b){get_by_id(c+"_preview_color").style.backgroundColor="#"+b;get_by_id(c+"_color_input").value=b}function manual_select_color(c,b){6==b.value.length&&(code=b.value,get_by_id(c+"_preview_color").style.backgroundColor="#"+code)}
|
||||
function printColor(c,b){for(var d="22 44 66 88 AA CC EE".split(" "),e="",a=0;8>a;a+=1)e+=printColorBlock(c,a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16),b);for(a=0;a<d.length;a+=3)for(var f=0;f<d.length;f+=2)for(var g=0;g<d.length;g++)e+=printColorBlock(c,d[a]+d[f]+d[g],b);for(a=8;16>a;a+=1)e+=printColorBlock(c,a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16)+a.toString(16),b);document.write(e)}
|
||||
function printColorBlock(c,b,d){return'<div style="float:left;background-color:#'+b+'"><img src="'+d+'" class="color_icon" onmouseover="this.className=\'color_icon_over\'" onmouseout="this.className=\'color_icon\'" onclick="select_color(\''+c+"','"+b+'\')" alt="color" /></div>'}jQuery(function(){getSlideShow()});
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@
|
|||
**/
|
||||
(function(k){var m=xe.createPlugin("slideShow",{_holders:{},_thumbs:{},_current:{},init:function(){this._holders={};this._thumbs={};this._current={}},API_SHOW_SLIDE:function(g,f){var b=this,a=f[0],c="@"+a,d,e,j,i,h,l;d=this.cast("GET_IMAGES",[a]);if(d.length){e=k("#zone_slide_gallery_"+a);i=e.find(".slide_gallery_placeholder").css("overflow","hidden");e.find(".slide_gallery_loading_text").remove();j=e.find(".slide_gallery_thumbnail_image_box").show();h=0;for(l=d.length;h<l;h++)d[h].$obj.clone().css({cursor:"pointer",
|
||||
width:"60px",height:"60px",margin:"5px",opacity:0.5}).click({idx:h},function(c){b.cast("SET_SLIDE",[a,c.data.idx])}).appendTo(j);k("#zone_gallery_navigator_status_"+a).click(function(){j.toggle()});e.find(".__prev").click(function(){b.cast("PREV_SLIDE",[a]);return!1}).end().find(".__next").click(function(){b.cast("NEXT_SLIDE",[a]);return!1});this._holders[c]=i;this._thumbs[c]=j;this._current[c]=0;this.cast("SET_SLIDE",[a,0])}},_showSideSlide:function(g,f){var b,a;b=this.cast("GET_IMAGES",[g]);b.length&&
|
||||
(a=this._current["@"+g]+f,0>a?a=b.length-1:a>=b.length&&(a=0),this.cast("SET_SLIDE",[g,a]))},API_NEXT_SLIDE:function(g,f){this._showSideSlide(f[0],1)},API_PREV_SLIDE:function(g,f){this._showSideSlide(f[0],-1)},API_SET_SLIDE:function(g,f){var b=f[0],a=f[1],c,d,e;c=this.cast("GET_IMAGES",[b]);if(c.length&&is_def(d=c[a]))this._current["@"+b]=a,k("#zone_gallery_navigator_status_"+b).text(a+1+"/"+c.length),this._thumbs["@"+b].find("img").eq(a).animate({opacity:1}).end().not(":eq("+a+")").animate({opacity:0.5}),
|
||||
(a=this._current["@"+g],a+=f,0>a?a=b.length-1:a>=b.length&&(a=0),this.cast("SET_SLIDE",[g,a]))},API_NEXT_SLIDE:function(g,f){this._showSideSlide(f[0],1)},API_PREV_SLIDE:function(g,f){this._showSideSlide(f[0],-1)},API_SET_SLIDE:function(g,f){var b=f[0],a=f[1],c,d,e;c=this.cast("GET_IMAGES",[b]);if(c.length&&is_def(d=c[a]))this._current["@"+b]=a,k("#zone_gallery_navigator_status_"+b).text(a+1+"/"+c.length),this._thumbs["@"+b].find("img").eq(a).animate({opacity:1}).end().not(":eq("+a+")").animate({opacity:0.5}),
|
||||
b=this._holders["@"+b],c=b.parent().innerWidth(),a=d.$obj.prop("width"),e=d.$obj.prop("height"),0==a&&(a=d.$obj.attr("width")),0==e&&(e=d.$obj.attr("height")),a>c-20&&(c-=20,e=Math.floor(e*(c/a)),a=c,d.$obj.css("cursor","pointer"),d.$obj.attr("rel","xe_gallery")),d.$obj.css({width:a,height:e,margin:"0 10px"}),b.empty().append(d.$obj)}}),i=xe.getApp("Gallery")[0];i&&i.registerPlugin(new m)})(jQuery);
|
||||
|
|
|
|||
|
|
@ -295,10 +295,10 @@
|
|||
.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_width{width:35px;height:13px}
|
||||
.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_color,
|
||||
.xpress-editor .tool li.table .layer fieldset.color dd input#table_bg_color{width:70px;height:15px;*margin-right:3px}
|
||||
.xpress-editor .tool li.table .layer table{position:absolute;top:18px;left:75px;width:137px;height:40px;table-layout:fixed}
|
||||
.xpress-editor .tool li.table .layer table{position:absolute;top:18px;left:75px;width:137px;height:40px;table-layout:fixed;border-collapse:separate;border:0}
|
||||
.xpress-editor .tool li.table .layer table *{font-size:0;line-height:0}
|
||||
.xpress-editor .tool li.table .layer table th,
|
||||
.xpress-editor .tool li.table .layer table td{text-align:center}
|
||||
.xpress-editor .tool li.table .layer table td{text-align:center;padding:0;border:0}
|
||||
.xpress-editor .tool li.table .layer .btn_area{position:absolute;bottom:12px;padding:0;z-index:1}
|
||||
.xpress-editor .tool li.table .layer .palette{display:none;position:absolute;z-index:2;left:11px;width:204px;padding:8px 7px 7px 7px;_padding-right:6px;background-color:#fbfbfb;border:1px solid #c5c5c5;border-right:1px solid #9f9f9f;border-bottom:1px solid #9f9f9f}
|
||||
.xpress-editor .tool li.table .layer.p1 .palette{display:block;top:163px}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -8,25 +8,23 @@
|
|||
<h1 class="h1">File Upload</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<p class="q">{$lang->allow_outlink}</p>
|
||||
<p class="q"><label>{$lang->allow_outlink}</label></p>
|
||||
<p class="a">
|
||||
<input type="radio" name="allow_outlink" value="Y" id="allow_outlink_y" checked="checked"|cond="$config->allow_outlink == 'Y'" /> <label for="allow_outlink_y">{$lang->cmd_yes}</label>
|
||||
<input type="radio" name="allow_outlink" value="N" id="allow_outlink_n" checked="checked"|cond="$config->allow_outlink == 'N'" /> <label for="allow_outlink_n">{$lang->cmd_no}</label>
|
||||
</p>
|
||||
</li>
|
||||
<li style="display:none"|cond="$config->allow_outlink == 'N'" class="_outLink">
|
||||
<p class="q">{$lang->allow_outlink_format}</p>
|
||||
<p class="a">
|
||||
<input type="text" name="allow_outlink_format" value="{$config->allow_outlink_format}" />
|
||||
<p>{$lang->about_allow_outlink_format}</p>
|
||||
</p>
|
||||
<p class="q"><label for="allow_outlink_format">{$lang->allow_outlink_format}</label></p>
|
||||
<p class="a"><input type="text" name="allow_outlink_format" id="allow_outlink_format" value="{$config->allow_outlink_format}" /></p>
|
||||
<p class="desc">{$lang->about_allow_outlink_format}</p>
|
||||
|
||||
</li>
|
||||
<li style="display:none"|cond="$config->allow_outlink == 'N'" class="_outLink">
|
||||
<p class="q">{$lang->allow_outlink_site}</p>
|
||||
<p class="a">
|
||||
<textarea type="text" name="allow_outlink_site" rows="8" cols="42">{$config->allow_outlink_site}</textarea>
|
||||
<p>{$lang->about_allow_outlink_site}</p>
|
||||
</p>
|
||||
<p class="q"><label for="allow_outlink_site">{$lang->allow_outlink_site}</label></p>
|
||||
<p class="a"><textarea name="allow_outlink_site" id="allow_outlink_site" rows="8" cols="42">{$config->allow_outlink_site}</textarea></p>
|
||||
<p class="desc">{$lang->about_allow_outlink_site}</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="filesize">{$lang->about_allowed_filesize}</label></p>
|
||||
|
|
@ -38,12 +36,11 @@
|
|||
</li>
|
||||
<li>
|
||||
<p class="q"><label for="allowedFiletypes">{$lang->allowed_filetypes}</label></p>
|
||||
<p class="a"><input id="allowedFiletypes" type="text" name="allowed_filetypes" value="{$config->allowed_filetypes}" />
|
||||
<p>{$lang->about_allowed_filetypes}</p>
|
||||
</p>
|
||||
<p class="a"><input id="allowedFiletypes" type="text" name="allowed_filetypes" value="{$config->allowed_filetypes}" /></p>
|
||||
<p class="desc">{$lang->about_allowed_filetypes}</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="btnArea">
|
||||
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
|
|
@ -93,15 +93,22 @@
|
|||
* @return void
|
||||
*/
|
||||
function procImporterAdminSync() {
|
||||
$oMemberModel = &getModel('member');
|
||||
$member_config = $oMemberModel->getMemberConfig();
|
||||
|
||||
$postFix = ($member_config->identifier == 'email_address') ? 'ByEmail' : '';
|
||||
|
||||
// 계정이 이메일인 경우 이메일 정보로 사용자를 싱크하도록 한다. 이때 변수명은 그대로 user_id를 사용한다.
|
||||
|
||||
/* DBMS가 CUBRID인 경우 MySQL과 동일한 방법으로는 문서 및 댓글에 대한 사용자 정보를 동기화 할 수 없으므로 예외 처리 합니다.
|
||||
CUBRID를 사용하지 않는 경우에만 보편적인 기존 질의문을 사용합니다. */
|
||||
$db_info = Context::getDBInfo ();
|
||||
if ($db_info->db_type != "cubrid") {
|
||||
$output = executeQuery('importer.updateDocumentSync');
|
||||
$output = executeQuery('importer.updateCommentSync');
|
||||
$output = executeQuery('importer.updateDocumentSync'.$postFix);
|
||||
$output = executeQuery('importer.updateCommentSync'.$postFix);
|
||||
}
|
||||
else {
|
||||
$output = executeQueryArray ('importer.getDocumentMemberSrlWithUserID');
|
||||
$output = executeQueryArray ('importer.getDocumentMemberSrlWithUserID'.$postFix);
|
||||
if (is_array ($output->data) && count ($output->data)) {
|
||||
$success_count = 0;
|
||||
$error_count = 0;
|
||||
|
|
@ -109,7 +116,7 @@
|
|||
foreach ($output->data as $val) {
|
||||
$args->user_id = $val->user_id;
|
||||
$args->member_srl = $val->member_srl;
|
||||
$tmp = executeQuery ('importer.updateDocumentSyncForCUBRID', $args);
|
||||
$tmp = executeQuery ('importer.updateDocumentSyncForCUBRID'.$postFix, $args);
|
||||
if ($tmp->toBool () === true) {
|
||||
$success_count++;
|
||||
}
|
||||
|
|
@ -120,7 +127,7 @@
|
|||
}
|
||||
} // documents section
|
||||
|
||||
$output = executeQueryArray ('importer.getCommentMemberSrlWithUserID');
|
||||
$output = executeQueryArray ('importer.getCommentMemberSrlWithUserID'.$postFix);
|
||||
if (is_array ($output->data) && count ($output->data)) {
|
||||
$success_count = 0;
|
||||
$error_count = 0;
|
||||
|
|
@ -128,7 +135,7 @@
|
|||
foreach ($output->data as $val) {
|
||||
$args->user_id = $val->user_id;
|
||||
$args->member_srl = $val->member_srl;
|
||||
$tmp = executeQuery ('importer.updateCommentSyncForCUBRID', $args);
|
||||
$tmp = executeQuery ('importer.updateCommentSyncForCUBRID'.$postFix, $args);
|
||||
if ($tmp->toBool () === true) {
|
||||
$success_count++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
<query id="getCommentMemberSrlWithUserIDByEmail" action="select">
|
||||
<tables>
|
||||
<table name="member" alias="member" />
|
||||
<table name="comments" alias="comments" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member.member_srl" alias="member_srl" />
|
||||
<column name="member.email_address" alias="user_id" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="comments.email_address" default="member.email_address" />
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="member_srl" />
|
||||
</groups>
|
||||
<navigation>
|
||||
<index var="member_srl" default="member_srl" order="asc" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<query id="getDocumentMemberSrlWithUserIDByEmail" action="select">
|
||||
<tables>
|
||||
<table name="member" alias="member" />
|
||||
<table name="documents" alias="documents" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member.member_srl" alias="member_srl" />
|
||||
<column name="member.email_address" alias="user_id" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="documents.email_address" default="member.email_address" />
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="member_srl" />
|
||||
</groups>
|
||||
<navigation>
|
||||
<index var="member_srl" default="member_srl" order="asc" />
|
||||
</navigation>
|
||||
</query>
|
||||
12
modules/importer/queries/updateCommentSyncByEmail.xml
Normal file
12
modules/importer/queries/updateCommentSyncByEmail.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<query id="updateCommentSyncByEmail" action="update">
|
||||
<tables>
|
||||
<table name="comments" alias="comments" />
|
||||
<table name="member" alias="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="comments.member_srl" default="member.member_srl" filter="number" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="comments.email_address" default="member.email_address" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<query id="updateCommentSyncForCUBRIDByEmail" action="update">
|
||||
<tables>
|
||||
<table name="comments" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member_srl" var="member_srl" filter="number" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="email_address" var="user_id" />
|
||||
</conditions>
|
||||
</query>
|
||||
12
modules/importer/queries/updateDocumentSyncByEmail.xml
Normal file
12
modules/importer/queries/updateDocumentSyncByEmail.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<query id="updateDocumentSyncByEmail" action="update">
|
||||
<tables>
|
||||
<table name="documents" alias="documents" />
|
||||
<table name="member" alias="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="documents.member_srl" default="member.member_srl" filter="number" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="documents.email_address" default="member.email_address" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<query id="updateDocumentSyncForCUBRIDByEmail" action="update">
|
||||
<tables>
|
||||
<table name="documents" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member_srl" var="member_srl" filter="number" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="email_address" var="user_id" />
|
||||
</conditions>
|
||||
</query>
|
||||
|
|
@ -9,7 +9,6 @@
|
|||
<action name="dispInstallDBForm" type="view" standalone="true" />
|
||||
<action name="dispInstallConfigForm" type="view" standalone="true" />
|
||||
<action name="dispInstallManagerForm" type="view" standalone="true" />
|
||||
<action name="procInstallAgreement" type="controller" standalone="true" />
|
||||
<action name="procCubridDBSetting" type="controller" standalone="true" ruleset="cubrid" />
|
||||
<action name="procFirebirdDBSetting" type="controller" standalone="true" ruleset="firebird" />
|
||||
<action name="procMssqlDBSetting" type="controller" standalone="true" ruleset="mssql" />
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@
|
|||
|
||||
$admin_ip_list = preg_replace("/[\r|\n|\r\n]+/",",",$admin_ip_list);
|
||||
$admin_ip_list = preg_replace("/\s+/","",$admin_ip_list);
|
||||
if(preg_match('/(<\?|<\?php|\?>)/xsm', $admin_ip_list))
|
||||
{
|
||||
$admin_ip_list = '';
|
||||
}
|
||||
|
||||
$db_info = Context::getDBInfo();
|
||||
$db_info->default_url = Context::get('default_url');
|
||||
|
|
|
|||
|
|
@ -22,26 +22,6 @@
|
|||
$this->etc_tmp_config_file = _XE_PATH_.'files/config/tmpEtc.config.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief LGPL, Enviroment gathering agreement
|
||||
**/
|
||||
function procInstallAgreement()
|
||||
{
|
||||
global $lang;
|
||||
$requestVars = Context::gets('lgpl_agree', 'enviroment_gather');
|
||||
if($requestVars->lgpl_agree != 'Y') {
|
||||
return new Object('-1', $lang->msg_license_agreement_alert);
|
||||
}
|
||||
|
||||
$_SESSION['lgpl_agree'] = $requestVars->lgpl_agree;
|
||||
if($requestVars->enviroment_gather=='Y') {
|
||||
FileHandler::writeFile('./files/env/install','1');
|
||||
}
|
||||
|
||||
$url = getNotEncodedUrl('', 'act', 'dispInstallCheckEnv');
|
||||
header('location:'.$url);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief cubrid db setting wrapper, becase Server Side Validator...
|
||||
* Server Side Validatro can use only one proc, one ruleset
|
||||
|
|
@ -195,6 +175,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
// save selected lang info
|
||||
$oInstallAdminController = &getAdminController('install');
|
||||
$oInstallAdminController->saveLangSelected(array(Context::getLangType()));
|
||||
|
||||
// Display a message that installation is completed
|
||||
$this->setMessage('msg_install_completed');
|
||||
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
Context::set('l', Context::getLangType());
|
||||
$this->setTemplateFile('introduce');
|
||||
}
|
||||
|
||||
|
|
@ -60,7 +61,6 @@
|
|||
$this->setTemplateFile('check_env');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Choose a DB
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -837,4 +837,198 @@
|
|||
<value xml:lang="en"><![CDATA[Information on '<em>web server, DBMS, PHP version and extension, XE modules and addons</em>' is sent to the XE statistics collection server. This information is collected anonymously and used to improve our software only.<em> You don't have to agree to this.</em>]]></value>
|
||||
<value xml:lang="jp"><![CDATA['<em>ウェブサーバー、DBMS、PHPバージョンおよびExtension、XEモジュール、およびアドオン</em>'情報が、XE統計収集サーバーへ転送されます。より良いソフトウェアを製作するための目的で活用されます。情報は、匿名で収集され、外部へ公開することはありません。<em>この項目は、同意しなくても構いません。</em>]]></value>
|
||||
</item>
|
||||
<item name="ftp_form_title">
|
||||
<value xml:lang="ko"><![CDATA[FTP 계정 정보 입력]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP Account Information]]></value>
|
||||
<value xml:lang="jp"><![CDATA[サーバーのFTP情報の入力]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置FTP信息]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[輸入 FTP 資訊]]></value>
|
||||
<value xml:lang="fr"><![CDATA[FTP 정보 입력]]></value>
|
||||
<value xml:lang="de"><![CDATA[FTP-Server festlegen]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Введите данные FTP]]></value>
|
||||
<value xml:lang="es"><![CDATA[Datos de conexión para FTP]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP Hesap Bilgileri]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Thông tin FTP]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP мэдээлэл оруулах]]></value>
|
||||
</item>
|
||||
<item name="ftp">
|
||||
<value xml:lang="ko"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="fr"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="de"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="ru"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="es"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="vi"><![CDATA[FTP]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP]]></value>
|
||||
</item>
|
||||
<item name="ftp_host">
|
||||
<value xml:lang="ko"><![CDATA[FTP 서버 주소]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP hostname]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPサーバーアドレス]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP服务器名]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[FTP 主機名稱]]></value>
|
||||
<value xml:lang="de"><![CDATA[FTP-Server hostname]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP sistem adı]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Tên Host FTP]]></value>
|
||||
</item>
|
||||
<item name="ftp_port">
|
||||
<value xml:lang="ko"><![CDATA[FTP port]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP port]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPポート番号(port)]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP端口]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[FTP 埠口]]></value>
|
||||
<value xml:lang="de"><![CDATA[FTP Port]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP portu]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Cổng kết nối]]></value>
|
||||
</item>
|
||||
<item name="about_ftp_password">
|
||||
<value xml:lang="ko"><![CDATA[FTP Password는 저장되지 않습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP password will not be stored.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTP情報は保存できません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP密码不会被保存。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[不會儲存 FTP 密碼]]></value>
|
||||
<value xml:lang="de"><![CDATA[Das Passwort des FTPs wird nicht gespeichert.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP şifresi saklanmayacaktır.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Mật khẩu của FTP sẽ không lưu lại]]></value>
|
||||
</item>
|
||||
<item name="cmd_check_ftp_connect">
|
||||
<value xml:lang="ko"><![CDATA[FTP 접속 확인]]></value>
|
||||
<value xml:lang="en"><![CDATA[Check FTP Connection]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTP接続を確認する]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[测试FTP连接]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[檢查 FTP 連線]]></value>
|
||||
<value xml:lang="de"><![CDATA[Verbindung des FTPs checken]]></value>
|
||||
<value xml:lang="es"><![CDATA[conexión de FTP confirmada]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP Bağlantısını kontrol ediniz]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Kiểm tra kết nối bằng FTP]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP холболт шалгах]]></value>
|
||||
</item>
|
||||
<item name="msg_safe_mode_ftp_needed">
|
||||
<value xml:lang="ko"><![CDATA[PHP의 <strong>safe_mode=On</strong>일 경우 XE의 정상적인 동작을 돕습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[When safe_mode setting of PHP is On, you should enter FTP account information to install XE.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[PHPのsafe_modeがOnの場合、FTP情報を登録することで、XEのインストール及び利用が可能になります。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[当PHP的safe_mode=On时,请必须输入相关FTP信息,否则将无法正常安装或使用XE程序。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[當 PHP 的安全模式(safe_mode)開啟時,請輸入相關 FTP 資訊,否則無法正常安裝或使用程式。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[PHP의 safe_mode가 On일 경우 FTP 정보를 꼭 입력해주셔야 XE의 설치 및 사용이 가능합니다]]></value>
|
||||
<value xml:lang="de"><![CDATA[Zur Installation und Nutzung des XEs muss die Angabe des FTPs festgestellt werden, wenn safe_mode in PHP 'An' ist.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Si la la variable safe_mode está activa[safe_mode=On], debe rellenar los datos de FTP para seguir instalando y usar con normalidad el XE.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Eğer PHP güvenli mod ayarları etkinse, XE'yi kurmak için FTP hesap bilgilerini girmelisiniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Nếu safe_mode của PHP mở, bạn có thể cài đặt các thành phần bổ xung cho XE một cách tự động qua FTP.]]></value>
|
||||
<value xml:lang="mn"><![CDATA[PHP의 safe_mode가 Onбайх тохиолдолд , FTP мэдээллийг заавал оруулснаар XE идэвжvvлэх болон хэрэглэх боломжтой болно.]]></value>
|
||||
</item>
|
||||
<item name="msg_safe_mode_ftp_needed2">
|
||||
<value xml:lang="ko"><![CDATA[모듈의 쉬운 설치 또는 업데이트가 가능해 집니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Easy installation or update of module is enabled.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[モジュールのイージーインストール、または更新が可能になります。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可用的安裝或更新。]]></value>
|
||||
</item>
|
||||
<item name="msg_safe_mode_ftp_config">
|
||||
<value xml:lang="ko"><![CDATA[이 정보는 <strong>files/config/ftp.config.php</strong> 파일에 저장 됩니다. 설치 후 환경설정 페이지에서도 등록, 변경, 제거 할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This information is stored in <strong>files/config/ftp.config.php</strong>. You can add, change or delete this on the Settings page after the installation.]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[此資料會儲存在 <strong>files/config/ftp.config.php</strong> 檔案中。 安裝後可在設定頁面中新增、更改或刪除此資訊。]]></value>
|
||||
<value xml:lang="de"><![CDATA[Die Angabe wird unter <strong>files/config/ftp.config.php</strong> gespeichert. Nach der Installation ist es auch möglich, dass die Angabe von Administrator modifiziert oder gelöscht werden kann.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_not_connected">
|
||||
<value xml:lang="ko"><![CDATA[localhost로의 FTP 접속 오류가 발생했습니다. FTP 포트 번호를 확인해주시거나 FTP 서비스가 가능한지 확인해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Connection to the localhost via FTP failed. Please check the port number and whether the FTP service is available.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[localhostへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかを確認してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[发生本地(localhost)FTP连接错误。请确认ftp端口号及支持ftp服务与否。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[本地(localhost) FTP連線錯誤。請檢查 FTP 埠口並確認是否支援 FTP 功能。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[localhost로의 FTP 접속 오류가 발생하였습니다. ftp 포트 번호를 확인해주시거나 ftp 서비스가 가능한지 확인해주세요]]></value>
|
||||
<value xml:lang="de"><![CDATA[Ein Verbindungsfehler des FTPs an localhost ist aufgetreten. Bitte FTP_Port checken, oder ob FTP_Service möglich ist.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Connection to localhost via FTP failed. Please check the port number and if FTP service is available.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Ha ocurrico un error de conexión al FTP del localhost. Verifique el puerto del FTP y/o el funcionamiento del servicio FTP.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yerel web alanına FTP bağlantısı sağlanamadı. Lütfen port numarasını ve FTP servisinin mevcut olup-olmadığını kontrol ediniz .]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Kết nối bằng FTP không thành công. Xin vui lòng kiểm tra lại thông tin tài khoản và cổng kết nối!]]></value>
|
||||
<value xml:lang="mn"><![CDATA[localhost-ын FTP холболт амжилтгvй боллоо. FTP дугаараа шалгах буюу эсвэл FTP vйлчилгээг ашиглах боломжтой эсэхээ шалгана уу.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_invalid_auth_info">
|
||||
<value xml:lang="ko"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Authentication failed. Please check the username and password.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ログインに失敗しました。FTPアクセス情報を再度確認してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP登录失败。请确认输入的FTP信息。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[FTP登入失敗。請確認輸入的 FTP 資訊。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[입력하신 FTP 정보로 로그인을 하지 못했습니다. FTP정보를 확인해주세요]]></value>
|
||||
<value xml:lang="de"><![CDATA[Anmeldungsfehler mit der Angabe des FTPs Bitte die Angabe des FTPs festlegen.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Los datos de login para el FTP no son correctos. Veriféquelos.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Kimlik doğrulama başarısız oldu. Lütfen kullanıcı adını ve şifreyi kontrol ediniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Xác nhận thất bại. Xin vui lòng kiểm tra lại tên sử dụng và mật khẩu.]]></value>
|
||||
<value xml:lang="mn"><![CDATA[Таны оруулсан FTP мэдээллээр нэвтэрч чадсангvй. FTPмэдээллээ шалгана уу.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_mkdir_fail">
|
||||
<value xml:lang="ko"><![CDATA[FTP를 이용한 디렉토리 생성 명령에 실패했습니다. FTP 서버의 설정을 확인해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Failed to create a directory using FTP. Please check the permission of FTP account.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPでのディレクトリ生成に失敗しました。FTPサーバーの設定を再度確認してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[新建文件夹失败。请确认 FTP服务器设置。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[新增資料夾失敗。請確認 FTP 主機設置。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[FTP를 이용한 디렉토리 생성 명령을 실패하였습니다. FTP 서버의 설정을 확인해주세요]]></value>
|
||||
<value xml:lang="de"><![CDATA[Der Befehl von Herstellung des Verzeichnisses durch FTP ist gescheitert. FTP_Server festlegen.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Ha fallado el comando de FTP para la creación de directorio. Verifique la configuración del servicio FTP en el servidor]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Dizin oluşturma başarısız oldu. Lütfen FTP hesap iznini kontrol ediniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Lỗi khi tạo thư mục. Xin vui lòng kiểm tra lại quyền truy cập FTP.]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP-г ашиглан eгсeн eгeгдлийг биелvvлж чадсангvй. FTP серверийн идэвхжvvлэлтээ шалгана уу.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_chmod_fail">
|
||||
<value xml:lang="ko"><![CDATA[FTP를 이용한 디렉토리의 속성 변경에 실패했습니다. FTP 서버의 설정을 확인해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Chmod failed. Please check the permission and configuration of the FTP server.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPでのディレクトリ属性変更に失敗しました。FTPサーバーの設定を再度確認してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[修改文件夹属性失败。请确认 FTP服务器设置。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[修改資料夾權限失敗。請確認 FTP 主機設置。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[FTP를 이용한 디렉토리의 속성 변경을 실패하였습니다. FTP 서버의 설정을 확인해주세요]]></value>
|
||||
<value xml:lang="de"><![CDATA[Die Modifikation der Zugriffsberechtigung des Verzeichnisses durch FTP ist gescheitert. FTP_Server festlegen.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Chmod failed. Please check the permission and configuration of FTP server.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Ha fallado el comando de FTP para la modificación de atributos de directorio. Verifique la configuración del servicio FTP en el servidor.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Chmod başarılamadı. Lütfen FTP sunucusunun izin ve yapılandırmasını kontrol ediniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[CHMOD thất bại. Xin vui lòng kiểm tra lại.]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP-г ашиглан eeрчлeлтийг хийж чадсангvй. FTP серверийн идэвхжvvлэлтээ шалгана уу.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_connect_success">
|
||||
<value xml:lang="ko"><![CDATA[FTP 접속 및 인증에 성공했습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Successfully connected to FTP server and authenticated.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTP接続、および認証に成功しました。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP连接成功。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[FTP連線成功。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[FTP 접속 및 인증 성공하였습니다]]></value>
|
||||
<value xml:lang="de"><![CDATA[Die Verbindung zu FTP ist erfolgreich und verifiziert.]]></value>
|
||||
<value xml:lang="es"><![CDATA[conexión con éxito al FTP]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP sunucusu için bağlantı ve kimlik doğrulama sağlandı.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Đã xác nhận và kết nối thành công tới máy chủ bằng FTP.]]></value>
|
||||
<value xml:lang="mn"><![CDATA[FTP холболт болон баталгаажуулалт хийгдлээ.]]></value>
|
||||
</item>
|
||||
<item name="ftp_path_title">
|
||||
<value xml:lang="ko"><![CDATA[FTP 경로 정보 입력]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP Path Information]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPパス情報入力]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[输入FTP路径信息]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[請輸入 FTP 路經]]></value>
|
||||
<value xml:lang="de"><![CDATA[Pfad des FTPs eingeben]]></value>
|
||||
<value xml:lang="tr"><![CDATA[FTP Yolu Bilgileri]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Hãy nhập thông tin đường dẫn của FTP.]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_installed_realpath">
|
||||
<value xml:lang="ko"><![CDATA[설치된 XE의 절대경로]]></value>
|
||||
<value xml:lang="en"><![CDATA[Absolute Path of XE]]></value>
|
||||
<value xml:lang="jp"><![CDATA[インストールされたXEの絶対パス]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[XE绝对路径]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[XE絕對路經]]></value>
|
||||
<value xml:lang="de"><![CDATA[absoluter Pfad, in dem XE installiert ist.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[XE Salt Yolu]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Đường dẫn thư mục đã cài đặt XE]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_installed_ftp_realpath">
|
||||
<value xml:lang="ko"><![CDATA[설치된 XE의 FTP 경로 설정]]></value>
|
||||
<value xml:lang="en"><![CDATA[Absolute FTP Path of XE]]></value>
|
||||
<value xml:lang="jp"><![CDATA[インストールされたXEのFTP絶対パス設定]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP绝对路径设置]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[XE的 FTP 絕對路經]]></value>
|
||||
<value xml:lang="fr"><![CDATA[설치된 XE의 FTP 절대경로 설정]]></value>
|
||||
<value xml:lang="de"><![CDATA[absoluten Pfad des FTPs, in dem XE installiert ist, festlegen.]]></value>
|
||||
<value xml:lang="es"><![CDATA[설치된 XE의 FTP 절대경로 설정]]></value>
|
||||
<value xml:lang="tr"><![CDATA[XE Salt FTP Yolu]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Đường dẫn tuyệt đối của thư mục cài đặt XE trên FTP]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ruleset version="1.5.0">
|
||||
<customrules>
|
||||
</customrules>
|
||||
<fields>
|
||||
<customrules>
|
||||
<rule name="mysqlUserId" type="regex" test="/^[a-z0-9_]*$/i" />
|
||||
</customrules>
|
||||
<fields>
|
||||
<field name="db_type" required="true" default="mysql" />
|
||||
<field name="db_hostname" required="true" length="1:250" default="localhost" />
|
||||
<field name="db_port" required="true" length="1:250" rule="number" default="3306" />
|
||||
<field name="db_userid" required="true" length="1:250" rule="alpha_number" />
|
||||
<field name="db_userid" required="true" length="1:250" rule="mysqlUserId" />
|
||||
<field name="db_password" required="true" length="1:250"/>
|
||||
<field name="db_database" required="true" length="1:250" />
|
||||
<field name="db_table_prefix" length="2:20" rule="alpha" />
|
||||
</fields>
|
||||
</fields>
|
||||
</ruleset>
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
<filter name="introduce" module="install" act="procInstallAgreement">
|
||||
<form>
|
||||
<node target="lgpl_agree" required="true" />
|
||||
<node target="enviroment_gather" required="false" />
|
||||
</form>
|
||||
<response callback_func="completeAgreement">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
|
|
@ -4,11 +4,7 @@
|
|||
<include target="progress_menu.html" />
|
||||
<span class="dummy"></span>
|
||||
<div id="content">
|
||||
<form action="./" class="agreement" method="post">
|
||||
<input type="hidden" name="module" value="install" />
|
||||
<input type="hidden" name="act" value="procInstallAgreement" /> <!-- UX/Remove -->
|
||||
<input type="hidden" name="lgpl_agree" value="Y" /> <!-- UX/Remove -->
|
||||
<input type="hidden" name="enviroment_gather" value="N" /> <!-- UX/Remove -->
|
||||
<div class="agreement">
|
||||
<div class="desc">
|
||||
<ul style="list-style:none">
|
||||
<li loop="$lang_supported=>$key,$val" style="position:relative; margin:0 0 4px 0">
|
||||
|
|
@ -20,10 +16,10 @@
|
|||
</div>
|
||||
<div class="ibtnArea">
|
||||
<div class="fRight">
|
||||
<span class="ibtn icon"><span class="check"></span> <input type="submit" value="{$lang->cmd_next}" /></span>
|
||||
<span class="ibtn icon"><span class="check"></span> <a href="{getUrl('', 'act', 'dispInstallCheckEnv')}" >{$lang->cmd_next}</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include target="footer.html" />
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
|
||||
class integration_searchAdminView extends integration_search {
|
||||
|
||||
/**
|
||||
* Cofiguration of integration serach module
|
||||
*
|
||||
* @var object module config
|
||||
*/
|
||||
var $config = null;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -25,7 +25,20 @@
|
|||
*
|
||||
* @return bool
|
||||
**/
|
||||
function checkUpdate() {
|
||||
function checkUpdate()
|
||||
{
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('integration_search');
|
||||
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/integration_search/', $config_parse[0]);
|
||||
if(is_dir($template_path)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +47,26 @@
|
|||
*
|
||||
* @return Object
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
function moduleUpdate()
|
||||
{
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/integration_search/', $config_parse[0]);
|
||||
if(is_dir($template_path))
|
||||
{
|
||||
$config->skin = implode('|@|', $config_parse);
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleConfig('integration_search', $config);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,15 @@
|
|||
|
||||
class integration_searchView extends integration_search {
|
||||
|
||||
/**
|
||||
* Target mid
|
||||
* @var array target mid
|
||||
*/
|
||||
var $target_mid = array();
|
||||
/**
|
||||
* Skin
|
||||
* @var string skin name
|
||||
*/
|
||||
var $skin = 'default';
|
||||
|
||||
/**
|
||||
|
|
@ -30,9 +38,27 @@
|
|||
if(!$this->grant->access) return new Object(-1,'msg_not_permitted');
|
||||
|
||||
$config = $oModuleModel->getModuleConfig('integration_search');
|
||||
if(!$config->skin) $config->skin = 'default';
|
||||
if(!$config->skin)
|
||||
{
|
||||
$config->skin = 'default';
|
||||
$template_path = sprintf('%sskins/%s', $this->module_path, $config->skin);
|
||||
}
|
||||
else
|
||||
{
|
||||
//check theme
|
||||
$config_parse = explode('|@|', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/integration_search/', $config_parse[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$template_path = sprintf('%sskins/%s', $this->module_path, $config->skin);
|
||||
}
|
||||
}
|
||||
// Template path
|
||||
$this->setTemplatePath($template_path);
|
||||
Context::set('module_info', unserialize($config->skin_vars));
|
||||
$this->setTemplatePath($this->module_path."/skins/".$config->skin."/");
|
||||
|
||||
$target = $config->target;
|
||||
if(!$target) $target = 'include';
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
<action name="dispLayoutAdminInsert" type="view" menu_name="installedLayout" />
|
||||
<action name="dispLayoutAdminModify" type="view" menu_name="installedLayout" />
|
||||
<action name="dispLayoutAdminEdit" type="view" menu_name="installedLayout" />
|
||||
<action name="dispLayoutAdminCopyLayout" type="view" />
|
||||
|
||||
<action name="dispLayoutPreview" type="view" />
|
||||
|
||||
|
|
@ -23,6 +24,8 @@
|
|||
<action name="procLayoutAdminCodeUpdate" type="controller" ruleset="codeUpdate" />
|
||||
<action name="procLayoutAdminUserImageUpload" type="controller" ruleset="imageUpload" />
|
||||
<action name="procLayoutAdminUserImageDelete" type="controller" />
|
||||
<action name="procLayoutAdminConfigImageUpload" type="controller" />
|
||||
<action name="procLayoutAdminConfigImageDelete" type="controller" />
|
||||
<action name="procLayoutAdminDelete" type="controller" ruleset="deleteLayout" />
|
||||
|
||||
<action name="procLayoutAdminInsert" type="controller" standalone="true" ruleset="insertLayout" />
|
||||
|
|
@ -32,6 +35,7 @@
|
|||
<action name="procLayoutAdminUserValueInsert" type="controller" standalone="true" />
|
||||
<action name="procLayoutAdminUserLayoutExport" type="controller" standalone="true" />
|
||||
<action name="procLayoutAdminUserLayoutImport" type="controller" standalone="true" ruleset="userLayoutImport" />
|
||||
<action name="procLayoutAdminCopyLayout" type="controller" standalone="true" />
|
||||
|
||||
</actions>
|
||||
<menus>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,10 @@
|
|||
<value xml:lang="es"><![CDATA[Editar el Diseño]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yerleşim Düzeni Düzenle]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Sửa giao diện]]></value>
|
||||
|
||||
</item>
|
||||
<item name="cmd_layout_copy">
|
||||
<value xml:lang="ko"><![CDATA[레이아웃 복사]]></value>
|
||||
<value xml:lang="en"><![CDATA[Copy Layout]]></value>
|
||||
</item>
|
||||
<item name="layout_name">
|
||||
<value xml:lang="ko"><![CDATA[레이아웃 이름]]></value>
|
||||
|
|
@ -1068,4 +1071,12 @@
|
|||
<value xml:lang="zh-TW"><![CDATA[從"已安裝版面"中建立新版面。 確認版面路徑是否上傳正確及修改版面相關設定。]]></value>
|
||||
</item>
|
||||
</item>
|
||||
<item name="msg_empty_origin_layout">
|
||||
<value xml:lang="ko"><![CDATA[원본 Layout이 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Original layout is not exist]]></value>
|
||||
</item>
|
||||
<item name="msg_empty_target_layout">
|
||||
<value xml:lang="ko"><![CDATA[복사할 Layout이 지정되어 있지 않습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Target layout is not assigned]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -143,38 +143,36 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
$tmpDir = sprintf('./files/attach/images/%s/tmp', $args->layout_srl);
|
||||
// Separately handle if a type of extra_vars is an image
|
||||
if($layout_info->extra_var) {
|
||||
foreach($layout_info->extra_var as $name => $vars) {
|
||||
if($vars->type!='image') continue;
|
||||
|
||||
$image_obj = $extra_vars->{$name};
|
||||
$extra_vars->{$name} = $layout_info->extra_var->{$name}->value;
|
||||
// Get a variable on a request to delete
|
||||
$del_var = $extra_vars->{"del_".$name};
|
||||
unset($extra_vars->{"del_".$name});
|
||||
// Delete the old file if there is a request to delete or a new file is uploaded
|
||||
if($del_var == 'Y' || $image_obj['tmp_name']) {
|
||||
FileHandler::removeFile($extra_vars->{$name});
|
||||
$extra_vars->{$name} = '';
|
||||
if($del_var == 'Y' && !$image_obj['tmp_name']) continue;
|
||||
}
|
||||
// Ignore if the file is not successfully uploaded
|
||||
if(!$image_obj['tmp_name'] || !is_uploaded_file($image_obj['tmp_name'])) continue;
|
||||
// Ignore if the file is not an image (swf the paths ~)
|
||||
if(!preg_match("/\.(jpg|jpeg|gif|png|swf)$/i", $image_obj['name'])) continue;
|
||||
// Upload the file to a path
|
||||
$path = sprintf("./files/attach/images/%s/", $args->layout_srl);
|
||||
// Create a directory
|
||||
if(!FileHandler::makeDir($path)) continue;
|
||||
$fileName = $extra_vars->{$name};
|
||||
if($vars->value == $fileName)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$filename = $path.$image_obj['name'];
|
||||
// Move the file
|
||||
if(!move_uploaded_file($image_obj['tmp_name'], $filename)) continue;
|
||||
FileHandler::removeFile($vars->value);
|
||||
|
||||
$extra_vars->{$name} = $filename;
|
||||
if(!$fileName)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$pathInfo = pathinfo($fileName);
|
||||
$tmpFileName = sprintf('%s/tmp/%s', $pathInfo['dirname'], $pathInfo['basename']);
|
||||
|
||||
if(!FileHandler::moveFile($tmpFileName, $fileName))
|
||||
{
|
||||
unset($extra_vars->{$name});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Save header script into "config" of layout module
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
|
@ -188,8 +186,9 @@
|
|||
$output = $this->updateLayout($args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setRedirectUrl(Context::get('error_return_url'));
|
||||
return $output;
|
||||
FileHandler::removeDir($tmpDir);
|
||||
|
||||
return $this->setRedirectUrl(Context::get('error_return_url'), $output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -606,6 +605,140 @@
|
|||
$this->setRedirectUrl(Context::get('error_return_url'));
|
||||
}
|
||||
|
||||
/**
|
||||
* layout copy
|
||||
* @return void
|
||||
*/
|
||||
function procLayoutAdminCopyLayout()
|
||||
{
|
||||
$sourceArgs = Context::getRequestVars();
|
||||
if($sourceArgs->layout == 'faceoff')
|
||||
{
|
||||
return $this->stop('not supported');
|
||||
}
|
||||
|
||||
if(!$sourceArgs->layout_srl)
|
||||
{
|
||||
return $this->stop('msg_empty_origin_layout');
|
||||
}
|
||||
|
||||
if(!is_array($sourceArgs->title) || count($sourceArgs->title) == 0)
|
||||
{
|
||||
return $this->stop('msg_empty_target_layout');
|
||||
}
|
||||
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$layout = $oLayoutModel->getLayout($sourceArgs->layout_srl);
|
||||
|
||||
$args->extra_vars = $oLayoutModel->getLayoutRawData($sourceArgs->layout_srl, array('extra_vars'));
|
||||
$extra_vars = unserialize($args->extra_vars);
|
||||
|
||||
$oModuleController = &getController('module');
|
||||
$layout_config->header_script = $extra_vars->header_script;
|
||||
|
||||
// Get information to create a layout
|
||||
$args->site_srl = (int)$layout->site_srl;
|
||||
$args->layout = $layout->layout;
|
||||
$args->layout_type = $layout->type;
|
||||
if(!$args->layout_type) $args->layout_type = "P";
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
if(is_array($sourceArgs->title))
|
||||
{
|
||||
foreach($sourceArgs->title AS $key=>$value)
|
||||
{
|
||||
if(!trim($value))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$args->layout_srl = getNextSequence();
|
||||
$args->title = $value;
|
||||
|
||||
// for header script
|
||||
$oModuleController->insertModulePartConfig('layout', $args->layout_srl, $layout_config);
|
||||
|
||||
// Insert into the DB
|
||||
$output = $this->insertLayout($args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
|
||||
// initiate if it is faceoff layout
|
||||
$this->initLayout($args->layout_srl, $args->layout);
|
||||
|
||||
// update layout info
|
||||
$output = $this->updateLayout($args);
|
||||
if (!$output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->_copyLayoutFile($layout->layout_srl, $args->layout_srl);
|
||||
}
|
||||
}
|
||||
$oDB->commit();
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
|
||||
global $lang;
|
||||
htmlHeader();
|
||||
alertScript($lang->success_registed);
|
||||
reload(true);
|
||||
closePopupScript();
|
||||
htmlFooter();
|
||||
Context::close();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Layout file copy
|
||||
* @param $sourceLayoutSrl origin layout number
|
||||
* @param $targetLayoutSrl origin layout number
|
||||
* @return void
|
||||
*/
|
||||
function _copyLayoutFile($sourceLayoutSrl, $targetLayoutSrl)
|
||||
{
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$sourceLayoutPath = FileHandler::getRealPath($oLayoutModel->getUserLayoutPath($sourceLayoutSrl));
|
||||
$targetLayoutPath = FileHandler::getRealPath($oLayoutModel->getUserLayoutPath($targetLayoutSrl));
|
||||
|
||||
$sourceImagePath = $oLayoutModel->getUserLayoutImagePath($sourceLayoutSrl);
|
||||
$targetImagePath = $oLayoutModel->getUserLayoutImagePath($targetLayoutSrl);
|
||||
FileHandler::makeDir($targetImagePath);
|
||||
|
||||
$sourceFileList = $oLayoutModel->getUserLayoutFileList($sourceLayoutSrl);
|
||||
foreach($sourceFileList as $key => $file)
|
||||
{
|
||||
if(is_readable($sourceLayoutPath.$file))
|
||||
{
|
||||
FileHandler::copyFile($sourceLayoutPath.$file, $targetLayoutPath.$file);
|
||||
if($file == 'layout.html' || $file == 'layout.css')
|
||||
{
|
||||
$this->_changeFilepathInSource($targetLayoutPath.$file, $sourceImagePath, $targetImagePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change resource file path in Layout file
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
function _changeFilepathInSource($file, $source, $target)
|
||||
{
|
||||
$content = FileHandler::readFile($file);
|
||||
$content = str_replace($source, $target, $content);
|
||||
FileHandler::writeFile($file, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* import layout
|
||||
* @param int $layout_srl
|
||||
|
|
@ -635,5 +768,90 @@
|
|||
// Remove uploaded file
|
||||
FileHandler::removeFile($source_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload config image
|
||||
*/
|
||||
function procLayoutAdminConfigImageUpload()
|
||||
{
|
||||
$layoutSrl = Context::get('layout_srl');
|
||||
$name = Context::get('name');
|
||||
$img = Context::get('img');
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile("after_upload_config_image.html");
|
||||
|
||||
if(!$img['tmp_name'] || !is_uploaded_file($img['tmp_name']))
|
||||
{
|
||||
Context::set('msg', Context::getLang('upload failed'));
|
||||
return;
|
||||
}
|
||||
|
||||
if(!preg_match('/\.(jpg|jpeg|gif|png|swf)$/i', $img['name']))
|
||||
{
|
||||
Context::set('msg', Context::getLang('msg_layout_image_target'));
|
||||
return;
|
||||
}
|
||||
|
||||
$path = sprintf('./files/attach/images/%s/', $layoutSrl);
|
||||
$tmpPath = $path . 'tmp/';
|
||||
if(!FileHandler::makeDir($tmpPath))
|
||||
{
|
||||
Context::set('msg', Context::getLang('make directory failed'));
|
||||
return;
|
||||
}
|
||||
|
||||
$ext = substr(strrchr($img['name'],'.'),1);
|
||||
$_fileName = md5(crypt(rand(1000000,900000), rand(0,100))).'.'.$ext;
|
||||
$fileName = $path . $_fileName;
|
||||
$tmpFileName = $tmpPath . $_fileName;
|
||||
|
||||
if(!move_uploaded_file($img['tmp_name'], $tmpFileName))
|
||||
{
|
||||
Context::set('msg', Context::getLang('move file failed'));
|
||||
return;
|
||||
}
|
||||
|
||||
Context::set('name', $name);
|
||||
Context::set('fileName', $fileName);
|
||||
Context::set('tmpFileName', $tmpFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete config image
|
||||
*/
|
||||
function procLayoutAdminConfigImageDelete()
|
||||
{
|
||||
$layoutSrl = Context::get('layout_srl');
|
||||
$name = Context::get('name');
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile("after_delete_config_image.html");
|
||||
|
||||
$oModel = &getModel('layout');
|
||||
$layoutInfo = $oModel->getLayout($layoutSrl);
|
||||
|
||||
if($layoutInfo->extra_var_count)
|
||||
{
|
||||
foreach($layoutInfo->extra_var as $varId => $val)
|
||||
{
|
||||
$newLayoutInfo->{$varId} = $val->value;
|
||||
}
|
||||
}
|
||||
|
||||
unset($newLayoutInfo->{$name});
|
||||
|
||||
$args->layout_srl = $layoutSrl;
|
||||
$args->extra_vars = serialize($newLayoutInfo);
|
||||
$output = $this->updateLayout($args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
Context::set('msg', Context::getLang($output->getMessage()));
|
||||
return $output;
|
||||
}
|
||||
|
||||
FileHandler::removeFile($layoutInfo->extra_var->{$name}->value);
|
||||
Context::set('name', $name);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@
|
|||
|
||||
//Security
|
||||
$security = new Security();
|
||||
$security->encodeHTML('layout_list..layout','layout_list..title');
|
||||
$security->encodeHTML('layout_list..layout','layout_list..title');
|
||||
|
||||
// Get layout info
|
||||
$layout = Context::get('layout');
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
Context::set('selected_layout', $layout_info);
|
||||
|
||||
$this->setTemplateFile('layout_modify');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert Layout details
|
||||
|
|
@ -457,5 +457,19 @@
|
|||
|
||||
$this->setTemplateFile('layout_image_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy layout instance
|
||||
* @return void
|
||||
*/
|
||||
function dispLayoutAdminCopyLayout(){
|
||||
$layoutSrl = Context::get('layout_srl');
|
||||
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$layout = $oLayoutModel->getLayout($layoutSrl);
|
||||
|
||||
Context::set('layout', $layout);
|
||||
$this->setTemplateFile('copy_layout');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,18 @@
|
|||
|
||||
if(!$oDB->isColumnExists('layouts', 'layout_type')) return true;
|
||||
|
||||
$args->layout = '.';
|
||||
$output = executeQueryArray('layout.getLayoutDotList', $args);
|
||||
if($output->data && count($output->data) > 0)
|
||||
{
|
||||
foreach($output->data as $layout)
|
||||
{
|
||||
$layout_path = explode('.', $layout->layout);
|
||||
if(count($layout_path) != 2) continue;
|
||||
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1]))) return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -66,6 +78,22 @@
|
|||
$oDB->addColumn('layouts','layout_type','char',1,'P',true);
|
||||
}
|
||||
|
||||
$args->layout = '.';
|
||||
$output = executeQueryArray('layout.getLayoutDotList', $args);
|
||||
if($output->data && count($output->data) > 0)
|
||||
{
|
||||
foreach($output->data as $layout)
|
||||
{
|
||||
$layout_path = explode('.', $layout->layout);
|
||||
if(count($layout_path) != 2) continue;
|
||||
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1])))
|
||||
{
|
||||
$args->layout = implode('|@|', $layout_path);
|
||||
$args->layout_srl = $layout->layout_srl;
|
||||
$output = executeQuery('layout.updateLayout', $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,6 +97,16 @@
|
|||
return $layout_info;
|
||||
}
|
||||
|
||||
function getLayoutRawData($layout_srl, $columnList = array())
|
||||
{
|
||||
$args->layout_srl = $layout_srl;
|
||||
$output = executeQuery('layout.getLayout', $args, $columnList);
|
||||
if(!$output->toBool())
|
||||
return;
|
||||
|
||||
return $output->data->extra_vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a layout path
|
||||
* @param string $layout_name
|
||||
|
|
@ -104,7 +114,7 @@
|
|||
* @return string path of layout
|
||||
**/
|
||||
function getLayoutPath($layout_name, $layout_type = "P") {
|
||||
$layout_parse = explode('.', $layout_name);
|
||||
$layout_parse = explode('|@|', $layout_name);
|
||||
if (count($layout_parse) > 1){
|
||||
$class_path = './themes/'.$layout_parse[0].'/layouts/'.$layout_parse[1].'/';
|
||||
}else if($layout_name == 'faceoff'){
|
||||
|
|
@ -472,7 +482,11 @@
|
|||
$layout_config = $oModuleModel->getModulePartConfig('layout', $layout_srl);
|
||||
$header_script = trim($layout_config->header_script);
|
||||
|
||||
if($header_script) $buff .= sprintf(' $layout_info->header_script = "%s"; ', str_replace('"','\\"',$header_script));
|
||||
if($header_script)
|
||||
{
|
||||
$header_script = str_replace('"','\\"',$header_script);
|
||||
$buff .= sprintf(' $layout_info->header_script = "%s"; ', str_replace('$','\$',$header_script));
|
||||
}
|
||||
|
||||
$buff = '<?php if(!defined("__ZBXE__")) exit(); '.$buff.' ?>';
|
||||
FileHandler::writeFile($cache_file, $buff);
|
||||
|
|
|
|||
16
modules/layout/queries/getLayoutDotList.xml
Normal file
16
modules/layout/queries/getLayoutDotList.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<query id="getLayoutDotList" action="select">
|
||||
<tables>
|
||||
<table name="layouts" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
|
||||
<condition operation="equal" column="layout_type" var="layout_type" default="P" pipe="and" />
|
||||
<condition operation="like" column="layout" var="layout" default="." pipe="and" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="layout_srl" order="desc" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
<rule name="imageExtension" type="regex" test="/\.(gif|jpg|jpeg|gif|png|swf|flv)$/i" />
|
||||
</customrules>
|
||||
<fields>
|
||||
<field name="user_layout_image" required="true" rule="imageExtension" />
|
||||
<field name="user_layout_image['name']" required="true" rule="imageExtension" />
|
||||
<field name="layout_srl" required="true" rule="number" />
|
||||
</fields>
|
||||
</ruleset>
|
||||
|
|
|
|||
7
modules/layout/tpl/after_delete_config_image.html
Normal file
7
modules/layout/tpl/after_delete_config_image.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<script type="text/javascript">
|
||||
<!--@if($msg)-->
|
||||
alert('{$msg}');
|
||||
<!--@else-->
|
||||
parent.afterDeleteConfigImage('{$name}');
|
||||
<!--@end-->
|
||||
</script>
|
||||
7
modules/layout/tpl/after_upload_config_image.html
Normal file
7
modules/layout/tpl/after_upload_config_image.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<script type="text/javascript">
|
||||
<!--@if($msg)-->
|
||||
alert('{$msg}');
|
||||
<!--@else-->
|
||||
parent.afterUploadConfigImage('{$name}', '{$fileName}', '{$tmpFileName}');
|
||||
<!--@end-->
|
||||
</script>
|
||||
40
modules/layout/tpl/copy_layout.html
Normal file
40
modules/layout/tpl/copy_layout.html
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<script type="text/javascript">
|
||||
var addLang = '{$lang->cmd_insert}';
|
||||
</script>
|
||||
<load target="js/layout_admin.js" usecdn="true" />
|
||||
<h1 class="h1">{$lang->cmd_layout_copy}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form action="./" method="post">
|
||||
<input type="hidden" name="layout" value="{$layout->layout}" />
|
||||
<input type="hidden" name="act" value="procLayoutAdminCopyLayout" />
|
||||
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<tr>
|
||||
<th scope="row">{$lang->layout_name}</th>
|
||||
<td>{$layout->title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->title}</th>
|
||||
<td>{$layout->layout_title}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0" id="inputTable">
|
||||
<tr>
|
||||
<th scope="col"><div>{$lang->title}<div></th>
|
||||
<th scope="col"><div>{$lang->cmd_insert}</div></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="title[]" size="50" /></td>
|
||||
<td><span class="btn"><input type="button" value="{$lang->cmd_insert}" onclick="addLayoutCopyInputbox()" /></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
<!--#include("header.html")-->
|
||||
|
||||
<!-- 레이아웃의 목록 -->
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
|
|
|
|||
|
|
@ -49,6 +49,20 @@ function deleteFile(layout_srl,filename){
|
|||
});
|
||||
}
|
||||
|
||||
function addLayoutCopyInputbox()
|
||||
{
|
||||
var html = '<tr>';
|
||||
html += '<td><input type="text" name="title[]" size="50" /></td>';
|
||||
html += '<td><span class="btn"><input type="button" value="'+addLang+'" onclick="addLayoutCopyInputbox()" /></span></td>';
|
||||
html += '</tr>';
|
||||
|
||||
var it = jQuery('#inputTable');
|
||||
it.append(html);
|
||||
|
||||
it.find('SPAN.btn').hide();
|
||||
it.find('TR:last-child SPAN.btn').show();
|
||||
}
|
||||
|
||||
(function($){
|
||||
|
||||
/* preview layout */
|
||||
|
|
@ -78,4 +92,4 @@ validator.cast('ADD_CALLBACK', ['update_layout_code', function(form) {
|
|||
return false;
|
||||
}]);
|
||||
|
||||
})(jQuery);
|
||||
})(jQuery);
|
||||
|
|
|
|||
34
modules/layout/tpl/js/layout_modify.js
Normal file
34
modules/layout/tpl/js/layout_modify.js
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
function doSubmitConfig()
|
||||
{
|
||||
var $forms = jQuery('#layout_config').find('input[name][type="hidden"], input[name][type="text"], input[name][type="checkbox"]:checked, select[name], textarea[name], input[name][type="radio"]:checked');
|
||||
var $configForm = jQuery('#config_form');
|
||||
var $container = $configForm.children('div');
|
||||
$container.empty();
|
||||
|
||||
$forms.each(function($)
|
||||
{
|
||||
var $this = jQuery(this);
|
||||
|
||||
if($this.parents('.imageUpload').length) return;
|
||||
|
||||
var $input = jQuery('<input>').attr('type', 'hidden').attr('name', $this.attr('name')).val($this.val());
|
||||
$container.append($input);
|
||||
});
|
||||
|
||||
$configForm.submit();
|
||||
}
|
||||
|
||||
function afterUploadConfigImage(name, fileName, tmpFileName)
|
||||
{
|
||||
jQuery('#preview_' + name + ' img').attr('src', tmpFileName);
|
||||
jQuery('#preview_' + name).show();
|
||||
jQuery('#file_select' + name).val('');
|
||||
jQuery('#file_' + name).val(fileName);
|
||||
}
|
||||
|
||||
function deleteImage(name)
|
||||
{
|
||||
jQuery('#preview_' + name + ' img').removeAttr('src');
|
||||
jQuery('#preview_' + name).hide();
|
||||
jQuery('#file_' + name).val('');
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
<th scope="col" class="nowr">{$lang->regdate}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_layout_management}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_layout_edit}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -32,6 +33,7 @@
|
|||
<td class="nowr">{zdate($item->regdate, "Y-m-d")}</td>
|
||||
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $item->layout_srl)}">{$lang->cmd_layout_management}</a></td>
|
||||
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $item->layout_srl)}">{$lang->cmd_layout_edit}</a></td>
|
||||
<td class="nowr"><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $item->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
|
||||
<td class="nowr">
|
||||
<form class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
|
||||
<input type="hidden" name="module" value="layout" />
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
<include target="header.html" />
|
||||
<load target="js/adminList.js" usecdn="true" />
|
||||
|
||||
<script type="text/javascript">
|
||||
xe.lang.confirm_delete = '{$lang->confirm_delete}';
|
||||
</script>
|
||||
|
||||
<h2 class="h2">{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})</h2>
|
||||
<div class="table even easyList">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
|
|
@ -15,6 +13,7 @@
|
|||
<th scope="col" class="nowr">{$lang->regdate}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_layout_management}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_layout_edit}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
|
||||
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
|
@ -25,12 +24,12 @@
|
|||
<td class="nowr">{zdate($layout->regdate, "Y-m-d")}</td>
|
||||
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_management}</a></td>
|
||||
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_edit}</a></td>
|
||||
<td class="nowr"><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $layout->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
|
||||
<td class="nowr">
|
||||
<form class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
|
||||
<input type="hidden" name="module" value="layout" />
|
||||
<input type="hidden" name="act" value="procLayoutAdminDelete" />
|
||||
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
|
||||
|
||||
<input class="text" type="submit" value="{$lang->cmd_delete}" />
|
||||
</form>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,21 @@
|
|||
<include target="header.html" />
|
||||
<load target="js/layout_modify.js" />
|
||||
|
||||
<h2 cond="$act == 'dispLayoutAdminModify'" class="h2">{$selected_layout->layout_title}</h2>
|
||||
<h2 cond="$act == 'dispLayoutAdminInsert'" class="h2">{$selected_layout->title}</h2>
|
||||
|
||||
<form ruleset="updateLayout"|cond="$act == 'dispLayoutAdminModify'" ruleset="insertLayout"|cond="$act == 'dispLayoutAdminInsert'" action="./" class="form" enctype="multipart/form-data" method="post">
|
||||
<input type="hidden" name="module" value="layout" />
|
||||
<input type="hidden" name="act" value="procLayoutAdminUpdate"|cond="$act == 'dispLayoutAdminModify'" value="procLayoutAdminInsert"|cond="$act == 'dispLayoutAdminInsert'" />
|
||||
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
|
||||
<input type="hidden" name="layout" value="{$selected_layout->layout}" />
|
||||
<input type="hidden" name="_layout_type" value="{$selected_layout->layout_type}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
|
||||
<form id="config_form" ruleset="updateLayout"|cond="$act == 'dispLayoutAdminModify'" ruleset="insertLayout"|cond="$act == 'dispLayoutAdminInsert'" action="./" class="form" enctype="multipart/form-data" method="post">
|
||||
<input type="hidden" name="module" value="layout" />
|
||||
<input type="hidden" name="act" value="procLayoutAdminUpdate"|cond="$act == 'dispLayoutAdminModify'" value="procLayoutAdminInsert"|cond="$act == 'dispLayoutAdminInsert'" />
|
||||
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
|
||||
<input type="hidden" name="layout" value="{$selected_layout->layout}" />
|
||||
<input type="hidden" name="_layout_type" value="{$selected_layout->layout_type}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
|
||||
<!--// For submit config. Do not delete this division. -->
|
||||
<div></div>
|
||||
</form>
|
||||
|
||||
<div id="layout_config" class="form">
|
||||
<ul>
|
||||
<li>
|
||||
<p class="q">{$lang->layout}</p>
|
||||
|
|
@ -44,7 +49,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<block loop="$selected_layout->extra_var => $name, $var">
|
||||
<block cond="$act == 'dispLayoutAdminModify'" loop="$selected_layout->extra_var => $name, $var">
|
||||
<block cond="!$not_first && !$var->group"><ul></block>
|
||||
<block cond="$group != $var->group">
|
||||
<block cond="$not_first"></ul></block>
|
||||
|
|
@ -71,10 +76,21 @@
|
|||
</div>
|
||||
|
||||
<block cond="$var->type == 'image'">
|
||||
<block cond="$var->value">
|
||||
<p><img src="../../../{$var->value}" alt="" /> <input type="checkbox" name="del_{$name}" value="Y" id="del_{$name}" /><label for="del_{$name}">{$lang->cmd_delete}</label></p>
|
||||
</block>
|
||||
<p><input type="file" name="{$name}" value="" /></p>
|
||||
<input type="hidden" name="{$name}" id="file_{$name}" value="{$var->value}" />
|
||||
<div id="preview_{$name}" style="display:none;"|cond="!$var->value">
|
||||
<img src="../../../{$var->value}"|cond="$var->value" alt="" style="max-width: 250px" />
|
||||
<input type="button" value="{$lang->cmd_delete}" onclick="deleteImage('{$name}')" />
|
||||
</div>
|
||||
<form action="./" enctype="multipart/form-data" method="post" target="hiddenIframe" class="imageUpload">
|
||||
<input type="hidden" name="module" value="layout" />
|
||||
<input type="hidden" name="act" value="procLayoutAdminConfigImageUpload" />
|
||||
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
|
||||
<input type="hidden" name="name" value="{$name}" />
|
||||
<p>
|
||||
<input type="file" name="img" id="file_select_{$name}" value="" />
|
||||
<input type="submit" value="{$lang->cmd_submit}" />
|
||||
</p>
|
||||
</form>
|
||||
</block>
|
||||
|
||||
<select cond="$var->type == 'select'" name="{$name}">
|
||||
|
|
@ -118,8 +134,7 @@
|
|||
<p class="desc">{$var->description}</p>
|
||||
</li>
|
||||
</block>
|
||||
</ul>
|
||||
|
||||
<block cond="$act == 'dispLayoutAdminModify'"></ul></block>
|
||||
|
||||
<h3 class="h3" cond="$selected_layout->menu">{$lang->menu}</h3>
|
||||
<ul cond="$selected_layout->menu">
|
||||
|
|
@ -148,10 +163,18 @@
|
|||
</ul>
|
||||
|
||||
<div class="btnArea">
|
||||
<span class="etc">
|
||||
<!--@if($layout)-->
|
||||
<span class="btn"><a href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminInstanceList', 'layout', $selected_layout->layout)}">{$lang->cmd_list}</a></span>
|
||||
<!--@else-->
|
||||
<span class="btn"><a href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminAllInstanceList')}">{$lang->cmd_list}</a></span>
|
||||
<!--@end-->
|
||||
</span>
|
||||
<span class="btn medium">
|
||||
<input type="submit" value="{$lang->cmd_insert}"|cond="$act == 'dispLayoutAdminInsert'" value="{$lang->cmd_save}"|cond="$act == 'dispLayoutAdminModify'" />
|
||||
<input type="submit" value="{$lang->cmd_insert}"|cond="$act == 'dispLayoutAdminInsert'" value="{$lang->cmd_save}"|cond="$act == 'dispLayoutAdminModify'" onclick="doSubmitConfig()"/>
|
||||
</span>
|
||||
</div>
|
||||
<include target="include.multilang.html" />
|
||||
<include target="include.multilang.textarea.html" />
|
||||
</form>
|
||||
</div>
|
||||
<iframe name="hiddenIframe" src="about:blank" width="0" height="0" frameborder="0"></iframe>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<div class="cnb">
|
||||
<a cond="$type == 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'P')}">PC({$pcLayoutCount})</a>
|
||||
<block cond="$type != 'M'">PC({$pcLayoutCount})</block>
|
||||
|
|
||||
<a cond="$type != 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'M')}">Mobile({$mobileLayoutCount})</a>
|
||||
<block cond="$type == 'M'">Mobile({$mobileLayoutCount})</block>
|
||||
<a cond="$type == 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'P')}">PC({$pcLayoutCount})</a>
|
||||
<block cond="$type != 'M'">PC({$pcLayoutCount})</block>
|
||||
|
|
||||
<a cond="$type != 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'M')}">Mobile({$mobileLayoutCount})</a>
|
||||
<block cond="$type == 'M'">Mobile({$mobileLayoutCount})</block>
|
||||
</div>
|
||||
<div class="cnb">
|
||||
<a cond="$act != 'dispLayoutAdminAllInstanceList'" href="{getUrl('act', 'dispLayoutAdminAllInstanceList', 'layout_srl', '')}">{$lang->instance_layout}</a>
|
||||
<block cond="$act == 'dispLayoutAdminAllInstanceList'">{$lang->instance_layout}</block>
|
||||
|
|
||||
<a cond="$act != 'dispLayoutAdminInstalledList'" href="{getUrl('act', 'dispLayoutAdminInstalledList')}">{$lang->installed_layout}</a>
|
||||
<block cond="$act == 'dispLayoutAdminInstalledList'">{$lang->installed_layout}</block>
|
||||
<a cond="$act != 'dispLayoutAdminAllInstanceList'" href="{getUrl('act', 'dispLayoutAdminAllInstanceList', 'layout_srl', '')}">{$lang->instance_layout}</a>
|
||||
<block cond="$act == 'dispLayoutAdminAllInstanceList'">{$lang->instance_layout}</block>
|
||||
|
|
||||
<a cond="$act != 'dispLayoutAdminInstalledList'" href="{getUrl('act', 'dispLayoutAdminInstalledList')}">{$lang->installed_layout}</a>
|
||||
<block cond="$act == 'dispLayoutAdminInstalledList'">{$lang->installed_layout}</block>
|
||||
</div>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue