mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-02 01:52:10 +09:00
commit
5cb5ad1359
113 changed files with 1409 additions and 548 deletions
25
CONTRIBUTING.md
Normal file
25
CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Contribution Guide
|
||||
|
||||
## Issue 작성
|
||||
Issue 작성 시 참고해주세요.
|
||||
|
||||
* 작성하려는 이슈가 이미 있는지 검색 후 등록해주세요. 비슷한 이슈가 있다면 댓글로 추가 내용을 덧붙일 수 있습니다.
|
||||
* 이슈에는 하나의 문제 또는 제안을 작성해주세요. 절대 하나의 이슈에 2개 이상의 내용을 적지마세요.
|
||||
* 이슈는 가능한 상세하고 간결하게 작성해주세요
|
||||
* 필요하다면 화면을 캡쳐하여 이미지를 업로드할 수 있습니다
|
||||
|
||||
## Pull request(PR)
|
||||
* `master` 브랜치의 코드는 수정하지마세요
|
||||
* PR은 `develop` 브랜치만 허용합니다.
|
||||
* `develop` 브랜치를 부모로한 토픽 브랜치를 활용하면 편리합니다.
|
||||
|
||||
|
||||
## Coding Guidelines
|
||||
코드를 기여할 때 Coding conventions을 따라야합니다.
|
||||
|
||||
* 모든 text 파일의 charset은 BOM이 없는 UTF-8입니다
|
||||
* newline은 UNIX type을 사용합니다. 일부 파일이 다른 type을 사용하더라도 절대 고치지 마세요!
|
||||
* 들여쓰기는 1개의 탭으로 합니다
|
||||
* class 선언과 function, if, foreach, for, while 등 중괄호의 `{}`는 다음 줄에 있어야 합니다
|
||||
* 마찬가지로 선언 다음에는 공백을 두지 않습니다. ex) CORRECT `if(...)`, INCORRECT `if (...)`
|
||||
* **Coding convention에 맞지 않는 코드를 발견 하더라도 목적과 관계 없는 코드는 절대 고치지 마세요**
|
||||
44
README.md
44
README.md
|
|
@ -1,21 +1,39 @@
|
|||
# XpressEngine
|
||||
XpressEngine
|
||||
============
|
||||
|
||||
[](https://travis-ci.org/xpressengine/xe-core)
|
||||
[](http://www.gnu.org/licenses/gpl.html)
|
||||
[](https://github.com/xpressengine/xe-core/releases)
|
||||
|
||||
XpressEngine(XE)은 PHP로 작성한 CMS(Content Management System)입니다.
|
||||
|
||||
|
||||
오픈소스 라이선스로 누구나 사용 또는 개작할 수 있으며, 개방형 프로젝트로서 누구나 개발에 참여할 수 있습니다.
|
||||
|
||||
## Supprot
|
||||
* Official sitie (Korean) : http://www.xpressengine.com/
|
||||
|
||||
## Maintainers
|
||||
@akasima @bnu @jhyeon1010 @khongchi @ngleader
|
||||
|
||||
## Authors
|
||||
adrian.vasile.constantin, aerofleet, @akasima, @andreimarin, araste, @bnu, bradly1, buffkj, c2joy, @canto, cbrghost, @ccata17, @ChanMyeong, chinaskyking, chschy, clench, @devjin, @dionisrom, @dorami, @dragan-dan, ducduydaovn, duvent, @Eundong, @florinutz, @flourscent, @flyskyko, @ForPeople, FruitsHake, guny, @haneul, hankm2004, haojilin, heemin, ikko, johnsonshu, juanlee0, k10206, kagami, @khongchi, @lansi951, @largeden, liahona, lickawtl, mayoojin, mglclub, @misol, mmx900, mooo, mosmartin, @nagoon97, @ngleader, nicetwo, ovclas, risapapa, rokmcssu, royallin, rubyeye, ryin005, sanghunjun, @sejin7940, @SMaker, sspa3141, @stellar12, supershop, @taggon, @ucorina, unryong, venister, wdlee91, welcomeju, @YJSoft, ysnglee2000, zero
|
||||
adrian.vasile.constantin, aerofleet, @akasima, @andreimarin, araste, @bnu, @bongkeun, bradly1, buffkj, c2joy, @canto, cbrghost, @ccata17, @ChanMyeong, chinaskyking, chschy, clench, @cometdev, @devdho, @devjin, @dionisrom, @dorami, @dragan-dan, ducduydaovn, duvent, @Eundong, @florinutz, @flourscent, @flyskyko, @ForPeople, FruitsHake, guny, @haneul, hankm2004, @hansim, haojilin, heemin, @hyeon0142, ikko, @izuzero, johnsonshu, juanlee0, k10206, kagami, @khongchi, @lansi951, @largeden, liahona, lickawtl, @mAKEkr, mayoojin, mglclub, @misol, mmx900, @mog422, mooo, mosmartin, @nagoon97, @ngleader, nicetwo, ovclas, @qw5414, @Rayyin, risapapa, rokmcssu, royallin, rubyeye, ryin005, @samswnlee, sanghunjun, @sejin7940, @smaker, @solidh, sspa3141, @stellar12, supershop, @taggon, @ucorina, unryong, venister, wdlee91, welcomeju, @YJSoft, ysnglee2000, zero
|
||||
|
||||
## Contribution Guide
|
||||
`CONTRIBUTING.md`파일을 참고하세요.
|
||||
|
||||
## License
|
||||
Copyright (C) NAVER <http://www.navercorp.com>
|
||||
Copyright (C) NAVER Corp. <http://www.navercorp.com>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ if(!defined("__XE__")) exit();
|
|||
* @brief Captcha for a particular action
|
||||
* English alphabets and voice verification added
|
||||
* */
|
||||
if(!class_exists('AddonCaptcha'))
|
||||
if(!class_exists('AddonCaptcha', false))
|
||||
{
|
||||
// On the mobile mode, XE Core does not load jquery and xe.js as normal.
|
||||
Context::loadFile(array('./common/js/jquery.min.js', 'head', NULL, -100000), true);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ if(!defined("__XE__")) exit();
|
|||
* @brief Captcha for a particular action
|
||||
* English alphabets and voice verification added
|
||||
* */
|
||||
if(!class_exists('AddonMemberCaptcha'))
|
||||
if(!class_exists('AddonMemberCaptcha', false))
|
||||
{
|
||||
// On the mobile mode, XE Core does not load jquery and xe.js as normal.
|
||||
Context::loadFile(array('./common/js/jquery.min.js', 'head', NULL, -100000), true);
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@
|
|||
success: function (data) {
|
||||
var oembedData = $.extend({}, data);
|
||||
oembedData.code = embedProvider.templateData(data);
|
||||
success(oembedData, externalUrl, container);
|
||||
if(oembedData.code) success(oembedData, externalUrl, container);
|
||||
},
|
||||
error: settings.onError.call(container, externalUrl, embedProvider)
|
||||
}, settings.ajaxOptions || {});
|
||||
|
|
@ -389,8 +389,8 @@
|
|||
|
||||
$.fn.oembed.getGenericCode = function (url, oembedData) {
|
||||
var title = (oembedData.title !== null) ? oembedData.title : url,
|
||||
code = '<a href="' + url + '">' + title + '</a>';
|
||||
if(oembedData.html) code += "<div>" + oembedData.html + "</div>";
|
||||
code = '';
|
||||
if(oembedData.html) code += '<blockquote class="oembedall-blockquote"><strong>' + title + '</strong><br>' + jQuery(oembedData.html).text().substring(0,200) + '... <a href="'+url+'">more</a></blockquote>';
|
||||
return code;
|
||||
};
|
||||
|
||||
|
|
@ -849,7 +849,7 @@
|
|||
templateData: function (data) {
|
||||
if(!data.parse) return false;
|
||||
var text = data.parse['text']['*'].replace(/href="\/wiki/g, 'href="http://en.wikipedia.org/wiki');
|
||||
return '<div id="content"><h3><a class="nav-link" href="http://en.wikipedia.org/wiki/' + data.parse['displaytitle'] + '">' + data.parse['displaytitle'] + '</a></h3>' + text + '</div>';
|
||||
return '<div id="content"><blockquote class="oembedall-blockquote"><strong>' + data.parse['displaytitle'] + '</strong><br>' +jQuery(text).text().substring(0,200) + '...</blockquote></div>';
|
||||
}
|
||||
}),
|
||||
new $.fn.oembed.OEmbedProvider("imdb", "rich", ["imdb.com/title/.+"], "http://www.imdbapi.com/?i=$1&callback=?", {
|
||||
|
|
|
|||
2
addons/oembed/jquery.oembed.min.js
vendored
2
addons/oembed/jquery.oembed.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -9,7 +9,7 @@ if(!defined('__XE__'))
|
|||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief Add-on to resize images in the body
|
||||
*/
|
||||
if($called_position == 'after_module_proc' && Context::getResponseMethod() == "HTML" || !isCrawler())
|
||||
if($called_position == 'after_module_proc' && (Context::getResponseMethod() == "HTML" || !isCrawler()))
|
||||
{
|
||||
if(Mobile::isFromMobilePhone())
|
||||
{
|
||||
|
|
|
|||
7
classes/cache/CacheApc.class.php
vendored
7
classes/cache/CacheApc.class.php
vendored
|
|
@ -84,7 +84,7 @@ class CacheApc extends CacheBase
|
|||
|
||||
if($modified_time > 0 && $modified_time > $obj[0])
|
||||
{
|
||||
$this->delete($_key);
|
||||
$this->delete($key);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ class CacheApc extends CacheBase
|
|||
|
||||
if($modified_time > 0 && $modified_time > $obj[0])
|
||||
{
|
||||
$this->delete($_key);
|
||||
$this->delete($key);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -125,7 +125,8 @@ class CacheApc extends CacheBase
|
|||
*/
|
||||
function delete($key)
|
||||
{
|
||||
return apc_delete($key);
|
||||
$_key = md5(_XE_PATH_ . $key);
|
||||
return apc_delete($_key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@ class DBMssql extends DB
|
|||
var $column_type = array(
|
||||
'bignumber' => 'bigint',
|
||||
'number' => 'int',
|
||||
'varchar' => 'varchar',
|
||||
'char' => 'char',
|
||||
'text' => 'text',
|
||||
'bigtext' => 'text',
|
||||
'date' => 'varchar(14)',
|
||||
'varchar' => 'nvarchar',
|
||||
'char' => 'nchar',
|
||||
'text' => 'ntext',
|
||||
'bigtext' => 'ntext',
|
||||
'date' => 'nvarchar(14)',
|
||||
'float' => 'float',
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,9 +85,9 @@ class DBMysql extends DB
|
|||
return;
|
||||
}
|
||||
// Error appears if the version is lower than 4.1
|
||||
if(mysql_get_server_info($result) < "4.1")
|
||||
if(version_compare(mysql_get_server_info($result), '4.1', '<'))
|
||||
{
|
||||
$this->setError(-1, "XE cannot be installed under the version of mysql 4.1. Current mysql version is " . mysql_get_server_info());
|
||||
$this->setError(-1, 'XE cannot be installed under the version of mysql 4.1. Current mysql version is ' . mysql_get_server_info());
|
||||
return;
|
||||
}
|
||||
// select db
|
||||
|
|
|
|||
|
|
@ -164,12 +164,13 @@ class DisplayHandler extends Handler
|
|||
array(
|
||||
'Request / Response info >>> ' . $_SERVER['REQUEST_METHOD'] . ' / ' . Context::getResponseMethod(),
|
||||
array(
|
||||
array('Request URI', 'Request method', 'Response method', 'Response contents size'),
|
||||
array('Request URI', 'Request method', 'Response method', 'Response contents size', 'Memory peak usage'),
|
||||
array(
|
||||
sprintf("%s:%s%s%s%s", $_SERVER['SERVER_NAME'], $_SERVER['SERVER_PORT'], $_SERVER['PHP_SELF'], $_SERVER['QUERY_STRING'] ? '?' : '', $_SERVER['QUERY_STRING']),
|
||||
$_SERVER['REQUEST_METHOD'],
|
||||
Context::getResponseMethod(),
|
||||
$this->content_size . ' byte'
|
||||
$this->content_size . ' byte',
|
||||
FileHandler::filesize(memory_get_peak_usage())
|
||||
)
|
||||
)
|
||||
),
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class HTMLDisplayHandler
|
|||
// add .x div for adminitration pages
|
||||
if(Context::getResponseMethod() == 'HTML')
|
||||
{
|
||||
if(Context::get('module') != 'admin' && strpos(Context::get('act'), 'Admin') > 0)
|
||||
if(Context::get('module') != 'admin' && strpos(Context::get('act'), 'Admin') > 0 && Context::get('act') != 'dispPageAdminContentModify' && Context::get('act') != 'dispPageAdminMobileContentModify')
|
||||
{
|
||||
$output = '<div class="x">' . $output . '</div>';
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ class HTMLDisplayHandler
|
|||
$output = preg_replace_callback('!<meta(.*?)(?:\/|)>!is', array($this, '_moveMetaToHeader'), $output);
|
||||
|
||||
// change a meta fine(widget often put the tag like <!--Meta:path--> to the content because of caching)
|
||||
$output = preg_replace_callback('/<!--(#)?Meta:([a-z0-9\_\/\.\@]+)-->/is', array($this, '_transMeta'), $output);
|
||||
$output = preg_replace_callback('/<!--(#)?Meta:([a-z0-9\_\-\/\.\@]+)-->/is', array($this, '_transMeta'), $output);
|
||||
|
||||
// handles a relative path generated by using the rewrite module
|
||||
if(Context::isAllowRewrite())
|
||||
|
|
@ -394,7 +394,7 @@ class HTMLDisplayHandler
|
|||
$lang_type = Context::getLangType();
|
||||
|
||||
// add common JS/CSS files
|
||||
if(__DEBUG__)
|
||||
if(__DEBUG__ || !__XE_VERSION_STABLE__)
|
||||
{
|
||||
$oContext->loadFile(array('./common/js/jquery-1.x.js', 'head', 'lt IE 9', -111000), true);
|
||||
$oContext->loadFile(array('./common/js/jquery.js', 'head', 'gte IE 9', -110000), true);
|
||||
|
|
@ -417,7 +417,7 @@ class HTMLDisplayHandler
|
|||
// for admin page, add admin css
|
||||
if(Context::get('module') == 'admin' || strpos(Context::get('act'), 'Admin') > 0)
|
||||
{
|
||||
if(__DEBUG__)
|
||||
if(__DEBUG__ || !__XE_VERSION_STABLE__)
|
||||
{
|
||||
$oContext->loadFile(array('./modules/admin/tpl/css/admin.css', '', '', 10), true);
|
||||
$oContext->loadFile(array("./modules/admin/tpl/css/admin_{$lang_type}.css", '', '', 10), true);
|
||||
|
|
@ -449,7 +449,7 @@ class HTMLDisplayHandler
|
|||
$lang_type = Context::getLangType();
|
||||
|
||||
// add common JS/CSS files
|
||||
if(__DEBUG__)
|
||||
if(__DEBUG__ || !__XE_VERSION_STABLE__)
|
||||
{
|
||||
$oContext->loadFile(array('./common/css/mobile.css', '', '', -1000000), true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ class ExtraItem
|
|||
|
||||
for($i = 0, $c = count($values); $i < $c; $i++)
|
||||
{
|
||||
$values[$i] = htmlspecialchars($values[$i], ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$values[$i] = trim(htmlspecialchars($values[$i], ENT_COMPAT | ENT_HTML401, 'UTF-8', false));
|
||||
}
|
||||
|
||||
return $values;
|
||||
|
|
@ -263,10 +263,6 @@ class ExtraItem
|
|||
{
|
||||
$values = explode('|@|', $value);
|
||||
}
|
||||
elseif(strpos($value, ',') !== false)
|
||||
{
|
||||
$values = explode(',', $value);
|
||||
}
|
||||
else
|
||||
{
|
||||
$values = array($value);
|
||||
|
|
@ -306,21 +302,15 @@ class ExtraItem
|
|||
case 'textarea' :
|
||||
return nl2br($value);
|
||||
|
||||
case 'checkbox' :
|
||||
if(is_array($value))
|
||||
{
|
||||
return implode(', ', $value);
|
||||
}
|
||||
return $value;
|
||||
|
||||
case 'date' :
|
||||
return zdate($value, "Y-m-d");
|
||||
|
||||
case 'checkbox' :
|
||||
case 'select' :
|
||||
case 'radio' :
|
||||
if(is_array($value))
|
||||
{
|
||||
return implode(', ', $value);
|
||||
return implode(',', $value);
|
||||
}
|
||||
return $value;
|
||||
|
||||
|
|
@ -430,7 +420,8 @@ class ExtraItem
|
|||
Context::loadJavascriptPlugin('ui.datepicker');
|
||||
|
||||
$buff[] = '<input type="hidden" name="' . $column_name . '" value="' . $value . '" />';
|
||||
$buff[] = '<input type="text" id="date_' . $column_name . '" value="' . zdate($value, 'Y-m-d') . '" class="date" /> <input type="button" value="' . Context::getLang('cmd_delete') . '" id="dateRemover_' . $column_name . '" />';
|
||||
$buff[] = '<input type="text" id="date_' . $column_name . '" value="' . zdate($value, 'Y-m-d') . '" class="date" />';
|
||||
$buff[] = '<input type="button" value="' . Context::getLang('cmd_delete') . '" class="btn" id="dateRemover_' . $column_name . '" />';
|
||||
$buff[] = '<script type="text/javascript">';
|
||||
$buff[] = '//<![CDATA[';
|
||||
$buff[] = '(function($){';
|
||||
|
|
@ -462,6 +453,8 @@ class ExtraItem
|
|||
}
|
||||
if($this->desc)
|
||||
{
|
||||
$oModuleController = getController('module');
|
||||
$oModuleController->replaceDefinedLangCode($this->desc);
|
||||
$buff[] = '<p>' . htmlspecialchars($this->desc, ENT_COMPAT | ENT_HTML401, 'UTF-8', false) . '</p>';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ class FrontEndFileHandler extends Handler
|
|||
|
||||
if(strpos($file->filePath, '://') === FALSE)
|
||||
{
|
||||
if(!__DEBUG__)
|
||||
if(!__DEBUG__ && __XE_VERSION_STABLE__)
|
||||
{
|
||||
// if no debug mode, load minifed file
|
||||
$minifiedFileName = implode('.', array($file->fileNameNoExt, 'min', $file->fileExtension));
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ class XEHttpRequest
|
|||
$chunk_size = hexdec(fgets($sock));
|
||||
if($chunk_size)
|
||||
{
|
||||
$body .= fread($sock, $chunk_size);
|
||||
$body .= fgets($sock, $chunk_size+1);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1025,7 +1025,7 @@ class ModuleHandler extends Handler
|
|||
}
|
||||
|
||||
// Get base class name and load the file contains it
|
||||
if(!class_exists($module))
|
||||
if(!class_exists($module, false))
|
||||
{
|
||||
$high_class_file = sprintf('%s%s%s.class.php', _XE_PATH_, $class_path, $module);
|
||||
if(!file_exists($high_class_file))
|
||||
|
|
@ -1043,7 +1043,7 @@ class ModuleHandler extends Handler
|
|||
|
||||
// Create an instance with eval function
|
||||
require_once($class_file);
|
||||
if(!class_exists($instance_name))
|
||||
if(!class_exists($instance_name, false))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,10 +15,6 @@
|
|||
<pattern>http://api.v.daum.net/</pattern>
|
||||
<pattern>http://tvpot.daum.net/playlist/playlist.swf</pattern>
|
||||
</domain>
|
||||
<domain name="http://www.mncast.com" desc="엠엔캐스트">
|
||||
<pattern>http://dory.mncast.com/mncHMovie.swf</pattern>
|
||||
<pattern>http://dory.mncast.com/mncastPlayer.swf</pattern>
|
||||
</domain>
|
||||
<domain name="http://www.youtube.com" desc="Youtube">
|
||||
<pattern>http://www.youtube.com/v/</pattern>
|
||||
<pattern>http://www.youtube-nocookie.com/</pattern>
|
||||
|
|
|
|||
|
|
@ -667,7 +667,7 @@ class Validator
|
|||
}
|
||||
|
||||
// current language
|
||||
$lang_type = class_exists('Context') ? Context::getLangType() : 'en';
|
||||
$lang_type = class_exists('Context', false) ? Context::getLangType() : 'en';
|
||||
|
||||
// check the file
|
||||
$filepath = $dir . '/' . md5($this->_version . ' ' . $this->_xml_path) . ".{$lang_type}.js";
|
||||
|
|
@ -706,7 +706,7 @@ class Validator
|
|||
list($ruleset) = explode('.', $ruleset);
|
||||
|
||||
// current language
|
||||
$lang_type = class_exists('Context') ? Context::getLangType() : 'en';
|
||||
$lang_type = class_exists('Context', false) ? Context::getLangType() : 'en';
|
||||
|
||||
// custom rulesets
|
||||
$addrules = array();
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ a img {
|
|||
}
|
||||
}
|
||||
|
||||
.xe-widget-wrapper {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Popup Menu Area */
|
||||
#popup_menu_area {
|
||||
position: absolute;
|
||||
|
|
|
|||
2
common/css/xe.min.css
vendored
2
common/css/xe.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -29,7 +29,11 @@ define('__ZBXE__', __XE__);
|
|||
/**
|
||||
* Display XE's full version.
|
||||
*/
|
||||
define('__XE_VERSION__', '1.7.4');
|
||||
define('__XE_VERSION__', '1.7.5-beta2');
|
||||
define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false));
|
||||
define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false));
|
||||
define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false));
|
||||
define('__XE_VERSION_STABLE__', (!__XE_VERSION_ALPHA__ && !__XE_VERSION_BETA__ && !__XE_VERSION_RC__));
|
||||
|
||||
/**
|
||||
* @deprecated __ZBXE_VERSION__ will be removed. Use __XE_VERSION__ instead.
|
||||
|
|
|
|||
|
|
@ -236,7 +236,46 @@ function executeQueryArray($query_id, $args = NULL, $arg_columns = NULL)
|
|||
function getNextSequence()
|
||||
{
|
||||
$oDB = DB::getInstance();
|
||||
return $oDB->getNextSequence();
|
||||
$seq = $oDB->getNextSequence();
|
||||
setUserSequence($seq);
|
||||
return $seq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Sequence number to session
|
||||
*
|
||||
* @param int $seq sequence number
|
||||
* @return void
|
||||
*/
|
||||
function setUserSequence($seq)
|
||||
{
|
||||
$arr_seq = array();
|
||||
if(isset($_SESSION['seq']))
|
||||
{
|
||||
$arr_seq = $_SESSION['seq'];
|
||||
}
|
||||
$arr_seq[] = $seq;
|
||||
$_SESSION['seq'] = $arr_seq;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Sequence number grant
|
||||
*
|
||||
* @param int $seq sequence number
|
||||
* @return boolean
|
||||
*/
|
||||
function checkUserSequence($seq)
|
||||
{
|
||||
if(!isset($_SESSION['seq']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!in_array($seq, $_SESSION['seq']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -776,7 +815,7 @@ function debugPrint($debug_output = NULL, $display_option = TRUE, $file = '_debu
|
|||
}
|
||||
$type = FirePHP::INFO;
|
||||
|
||||
$label = sprintf('[%s:%d] %s() (m:%s)', $file_name, $line_num, $function, FileHandler::filesize(memory_get_usage()));
|
||||
$label = sprintf('[%s:%d] %s() (Memory usage: current=%s, peak=%s)', $file_name, $line_num, $function, FileHandler::filesize(memory_get_usage()), FileHandler::filesize(memory_get_peak_usage()));
|
||||
|
||||
// Check a FirePHP option
|
||||
if($display_option === 'TABLE')
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ class addon extends ModuleObject
|
|||
$oAddonController = getAdminController('addon');
|
||||
$oAddonController->doInsert('autolink', 0, 'site', 'Y');
|
||||
$oAddonController->doInsert('blogapi');
|
||||
$oAddonController->doInsert('counter', 0, 'site', 'Y');
|
||||
$oAddonController->doInsert('member_communication', 0, 'site', 'Y');
|
||||
$oAddonController->doInsert('member_extra_info', 0, 'site', 'Y');
|
||||
$oAddonController->doInsert('mobile', 0, 'site', 'Y');
|
||||
|
|
|
|||
|
|
@ -100,13 +100,13 @@
|
|||
</div>
|
||||
</div>
|
||||
</block>
|
||||
</block>
|
||||
</section>
|
||||
<div class="x_clearfix btnArea">
|
||||
<div class="x_pull-right">
|
||||
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
|
||||
</div>
|
||||
</div>
|
||||
</block>
|
||||
</section>
|
||||
</form>
|
||||
<script>
|
||||
(function($){
|
||||
|
|
|
|||
|
|
@ -95,6 +95,81 @@ class adminAdminModel extends admin
|
|||
}
|
||||
}
|
||||
|
||||
function getFTPPath()
|
||||
{
|
||||
$ftp_info = Context::getRequestVars();
|
||||
|
||||
if(!$ftp_info->ftp_host)
|
||||
{
|
||||
$ftp_info->ftp_host = "127.0.0.1";
|
||||
}
|
||||
|
||||
if(!$ftp_info->ftp_port || !is_numeric($ftp_info->ftp_port))
|
||||
{
|
||||
$ftp_info->ftp_port = '22';
|
||||
}
|
||||
|
||||
$connection = ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port);
|
||||
if(!$connection)
|
||||
{
|
||||
return new Object(-1, sprintf(Context::getLang('msg_ftp_not_connected'), $ftp_host));
|
||||
}
|
||||
|
||||
$login_result = @ftp_login($connection, $ftp_info->ftp_user, $ftp_info->ftp_password);
|
||||
if(!$login_result)
|
||||
{
|
||||
ftp_close($connection);
|
||||
return new Object(-1, 'msg_ftp_invalid_auth_info');
|
||||
}
|
||||
|
||||
// create temp file
|
||||
$pin = $_SERVER['REQUEST_TIME'];
|
||||
FileHandler::writeFile('./files/cache/ftp_check', $pin);
|
||||
|
||||
// create path candidate
|
||||
$xe_path = _XE_PATH_;
|
||||
$path_info = array_reverse(explode('/', _XE_PATH_));
|
||||
array_pop($path_info); // remove last '/'
|
||||
$path_candidate = array();
|
||||
|
||||
$temp = '';
|
||||
foreach($path_info as $path)
|
||||
{
|
||||
$temp = '/' . $path . $temp;
|
||||
$path_candidate[] = $temp;
|
||||
}
|
||||
|
||||
// try
|
||||
foreach($path_candidate as $path)
|
||||
{
|
||||
// upload check file
|
||||
if(!ftp_put($connection, $path . 'ftp_check.html', FileHandler::getRealPath('./files/cache/ftp_check'), FTP_BINARY))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// get check file
|
||||
$result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html');
|
||||
|
||||
// delete temp check file
|
||||
ftp_delete($connection, $path . 'ftp_check.html');
|
||||
|
||||
// found
|
||||
if($result == $pin)
|
||||
{
|
||||
$found_path = $path;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FileHandler::removeFile('./files/cache/ftp_check', $pin);
|
||||
|
||||
if($found_path)
|
||||
{
|
||||
$this->add('found_path', $found_path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find XE installed path on ftp
|
||||
*/
|
||||
|
|
@ -130,6 +205,15 @@ class adminAdminModel extends admin
|
|||
return $this->getSFTPPath();
|
||||
}
|
||||
|
||||
if($ftp_info->ftp_pasv == 'N')
|
||||
{
|
||||
if(function_exists('ftp_connect'))
|
||||
{
|
||||
return $this->getFTPPath();
|
||||
}
|
||||
$ftp_info->ftp_pasv = "Y";
|
||||
}
|
||||
|
||||
$oFTP = new ftp();
|
||||
if(!$oFTP->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -172,13 +172,11 @@ class adminAdminView extends admin
|
|||
|
||||
foreach($parentMenu['list'] as $childKey => $childMenu)
|
||||
{
|
||||
if($subMenuTitle == $childMenu['text'])
|
||||
if($subMenuTitle == $childMenu['text'] && $parentSrl == 0)
|
||||
{
|
||||
$parentSrl = $childMenu['parent_srl'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if($parentSrl) break;
|
||||
}
|
||||
|
||||
// Admin logo, title setup
|
||||
|
|
@ -350,11 +348,26 @@ class adminAdminView extends admin
|
|||
}
|
||||
}
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$oAddonAdminModel = getAdminModel('addon');
|
||||
$counterAddonActivated = $oAddonAdminModel->isActivatedAddon('counter', $site_module_info->site_srl );
|
||||
if(!$counterAddonActivated)
|
||||
{
|
||||
$columnList = array('member_srl', 'nick_name', 'user_name', 'user_id', 'email_address');
|
||||
$args = new stdClass;
|
||||
$args->page = 1;
|
||||
$args->list_count = 5;
|
||||
$output = executeQuery('member.getMemberList', $args, $columnList);
|
||||
Context::set('latestMemberList', $output->data);
|
||||
unset($args, $output, $columnList);
|
||||
}
|
||||
|
||||
Context::set('module_list', $module_list);
|
||||
Context::set('needUpdate', $isUpdated);
|
||||
Context::set('addTables', $addTables);
|
||||
Context::set('needUpdate', $needUpdate);
|
||||
Context::set('newVersionList', $needUpdateList);
|
||||
Context::set('counterAddonActivated', $counterAddonActivated);
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('module_list..', 'module_list..author..', 'newVersionList..');
|
||||
|
|
|
|||
|
|
@ -1590,8 +1590,8 @@
|
|||
<value xml:lang="jp"><![CDATA[HTMLタグを使用できます。]]></value>
|
||||
</item>
|
||||
<item name="sitelock_warning_whitelist">
|
||||
<value xml:lang="ko"><![CDATA[이곳에 관리자의 IP를 반드시 포함해야 합니다.<br />만약 접근이 차단된 경우 './files/config/db.config.php' 파일에서 `'use_sitelock' => '<strong>Y</strong>'`를 `'use_sitelock' => '<strong>N</strong>'`으로 변경하여 차단을 해제할 수 있습니다.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ここに管理者のIPを必ず記入てください。<br />もし接近が遮断された場合、'./files/config/db.config.php' ファイルから `'use_sitelock' => '<strong>Y</strong>'`を `'use_sitelock' => '<strong>N</strong>'`へ変更すれば遮断が解除できます。]]></value>
|
||||
<value xml:lang="ko"><![CDATA[이곳에 관리자의 IP를 반드시 포함해야 합니다.<br />만약 접근이 차단된 경우 './files/config/db.config.php' 파일에서 `'use_sitelock' => '<strong>Y</strong>'`를 `'use_sitelock' => '<strong>N</strong>'`으로 변경하여 차단을 해제할 수 있습니다.<br />사이트 잠금 디자인 파일의 위치는 './common/tpl/sitelock.html' 입니다.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ここに管理者のIPを必ず記入てください。<br />もし接近が遮断された場合、'./files/config/db.config.php' ファイルから `'use_sitelock' => '<strong>Y</strong>'`を `'use_sitelock' => '<strong>N</strong>'`へ変更すれば遮断が解除できます。<br />サイトロックの設計ファイルの場所は、'./commo/tpl/sitelock.html' です。]]></value>
|
||||
</item>
|
||||
<item name="your_ip">
|
||||
<value xml:lang="ko"><![CDATA[접속하신 IP]]></value>
|
||||
|
|
|
|||
169
modules/admin/tpl/_dashboard_counter.html
Normal file
169
modules/admin/tpl/_dashboard_counter.html
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
<div>
|
||||
<section class="status">
|
||||
<h2>{$lang->uv}</h2>
|
||||
<div style="margin:10px 15px;height:142px" id="visitors"></div>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb['user']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}">{number_format($status->member->totalCount)} (<!--@if($status->member->todayCount > 0)-->+<!--@end-->{number_format($status->member->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>›</i> {$lang->details}</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="status">
|
||||
<h2>{$lang->pv}</h2>
|
||||
<div style="margin:10px 15px;height:142px" id="page_views"></div>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb_sub['document']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{number_format($status->document->totalCount)} (<!--@if($status->document->todayCount > 0)-->+<!--@end-->{number_format($status->document->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>›</i> {$lang->details}</a>
|
||||
</div>
|
||||
</section>
|
||||
<style scoped>.jqplot-table-legend{background:#fff;top:13px!important}</style>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<section class="document">
|
||||
<h2>{$lang->latest_documents}</h2>
|
||||
<ul>
|
||||
<li loop="$latestDocumentList => $key,$value">
|
||||
{@$document = $value->variables}
|
||||
<a href="{getUrl('', 'document_srl', $document['document_srl'])}" target="_blank"><!--@if(trim($value->getTitle()))-->{$value->getTitle()}<!--@else--><strong>{$lang->no_title_document}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action" method="POST">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procDocumentManageCheckedDocument" />
|
||||
<input type="hidden" name="cart[]" value="{$document['document_srl']}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="type" value="trash" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="type" value="delete" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestDocumentList) || count($latestDocumentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}"><i>›</i> {$lang->more}</a></p>
|
||||
</section>
|
||||
<section class="reply">
|
||||
<h2>{$lang->latest_comments}</h2>
|
||||
<ul>
|
||||
<li loop="$latestCommentList => $key,$value">
|
||||
<a href="{getUrl('', 'document_srl', $value->document_srl)}#comment_{$value->comment_srl}" target="_blank"><!--@if(trim($value->content))-->{$value->getSummary()}<!--@else--><strong>{$lang->no_text_comment}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procCommentAdminDeleteChecked" />
|
||||
<input type="hidden" name="cart[]" value="{$value->comment_srl}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="is_trash" value="true" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="is_trash" value="false" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestCommentList) || count($latestCommentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}"><i>›</i> {$lang->more}</a></p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
xe.lang.this_week = '{$lang->this_week}';
|
||||
xe.lang.last_week = '{$lang->last_week}';
|
||||
xe.lang.next_week = '{$lang->next_week}';
|
||||
xe.lang.mon = '{$lang->mon}';
|
||||
xe.lang.tue = '{$lang->tue}';
|
||||
xe.lang.wed = '{$lang->wed}';
|
||||
xe.lang.thu = '{$lang->thu}';
|
||||
xe.lang.fri = '{$lang->fri}';
|
||||
xe.lang.sat = '{$lang->sat}';
|
||||
xe.lang.sun = '{$lang->sun}';
|
||||
|
||||
jQuery(function($)
|
||||
{
|
||||
// Dashboard portlet UI
|
||||
$('.dashboard>div>section>ul>li')
|
||||
.bind('mouseenter focusin', function(){
|
||||
$(this).addClass('hover').find('>.action').show();
|
||||
})
|
||||
.bind('mouseleave focusout', function()
|
||||
{
|
||||
if(!$(this).find(':focus').length)
|
||||
{
|
||||
$(this).removeClass('hover').find('>.action').hide();
|
||||
}
|
||||
});
|
||||
|
||||
// check browser version
|
||||
if($.browser.msie == true ) {
|
||||
var arrBrowserVersion = $.browser.version.split('.');
|
||||
if(parseInt(arrBrowserVersion[0]) <= 8) {
|
||||
$('#checkBrowserMessage').show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function obj2Array(htObj)
|
||||
{
|
||||
var aRes = [];
|
||||
|
||||
for(var x in htObj)
|
||||
{
|
||||
if(!htObj.hasOwnProperty(x)) continue;
|
||||
aRes.push(htObj[x]);
|
||||
}
|
||||
|
||||
return aRes;
|
||||
}
|
||||
|
||||
jQuery(function ($)
|
||||
{
|
||||
$.exec_json("counter.getWeeklyUniqueVisitor", {}, function(htRes)
|
||||
{
|
||||
var aLastWeek = obj2Array(htRes.last_week.list);
|
||||
var aThisWeek = obj2Array(htRes.this_week.list);
|
||||
|
||||
drawChart("visitors", "Weekly Visitors", aLastWeek, aThisWeek);
|
||||
});
|
||||
|
||||
$.exec_json("counter.getWeeklyPageView", {}, function(htRes)
|
||||
{
|
||||
var aLastWeek = obj2Array(htRes.last_week.list);
|
||||
var aThisWeek = obj2Array(htRes.this_week.list);
|
||||
|
||||
drawChart("page_views", "Weekly Page Views", aLastWeek, aThisWeek);
|
||||
});
|
||||
});
|
||||
|
||||
function drawChart(sContainerId, sTitle, aLastWeek, aThisWeek)
|
||||
{
|
||||
$ = jQuery;
|
||||
|
||||
var s1 = aLastWeek;
|
||||
var s2 = aThisWeek;
|
||||
// Can specify a custom tick Array.
|
||||
// Ticks should match up one for each y value (category) in the series.
|
||||
var ticks = [xe.lang.sun,xe.lang.mon,xe.lang.tue,xe.lang.wed,xe.lang.thu,xe.lang.fri,xe.lang.sat];
|
||||
|
||||
var plot1 = $.jqplot(sContainerId, [s1, s2], {
|
||||
seriesDefaults:{
|
||||
renderer:$.jqplot.BarRenderer,
|
||||
rendererOptions: {fillToZero: true}
|
||||
},
|
||||
series:[
|
||||
{label: xe.lang.last_week},
|
||||
{label: xe.lang.this_week}
|
||||
],
|
||||
legend:
|
||||
{
|
||||
show: true,
|
||||
placement: 'outsideGrid'
|
||||
},
|
||||
axes: {
|
||||
xaxis: {
|
||||
renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks
|
||||
},
|
||||
yaxis: {
|
||||
min: 0, ticks: 1, pad: 1.05
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
66
modules/admin/tpl/_dashboard_default.html
Normal file
66
modules/admin/tpl/_dashboard_default.html
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<div>
|
||||
<section class="member">
|
||||
<h2>{$lang->member}</h2>
|
||||
<ul>
|
||||
<li loop="$latestMemberList => $key,$value">
|
||||
{@$document = $value->variables}
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInsert', 'member_srl', $value->member_srl)}" target="_blank">{$value->nick_name}</a>
|
||||
</li>
|
||||
<li cond="!is_array($latestMemberList) || count($latestMemberList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb['user']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}">{number_format($status->member->totalCount)} (<!--@if($status->member->todayCount > 0)-->+<!--@end-->{number_format($status->member->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}"><i>›</i> {$lang->more}</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<section class="document">
|
||||
<h2>{$lang->latest_documents}</h2>
|
||||
<ul>
|
||||
<li loop="$latestDocumentList => $key,$value">
|
||||
{@$document = $value->variables}
|
||||
<a href="{getUrl('', 'document_srl', $document['document_srl'])}" target="_blank"><!--@if(trim($value->getTitle()))-->{$value->getTitle()}<!--@else--><strong>{$lang->no_title_document}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action" method="POST">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procDocumentManageCheckedDocument" />
|
||||
<input type="hidden" name="cart[]" value="{$document['document_srl']}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="type" value="trash" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="type" value="delete" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestDocumentList) || count($latestDocumentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb_sub['document']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{number_format($status->document->totalCount)} (<!--@if($status->document->todayCount > 0)-->+<!--@end-->{number_format($status->document->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}"><i>›</i> {$lang->more}</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="reply">
|
||||
<h2>{$lang->latest_comments}</h2>
|
||||
<ul>
|
||||
<li loop="$latestCommentList => $key,$value">
|
||||
<a href="{getUrl('', 'document_srl', $value->document_srl)}#comment_{$value->comment_srl}" target="_blank"><!--@if(trim($value->content))-->{$value->getSummary()}<!--@else--><strong>{$lang->no_text_comment}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procCommentAdminDeleteChecked" />
|
||||
<input type="hidden" name="cart[]" value="{$value->comment_srl}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="is_trash" value="true" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="is_trash" value="false" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestCommentList) || count($latestCommentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}"><i>›</i> {$lang->more}</a></p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
|
|
@ -1421,6 +1421,9 @@ body>.x,
|
|||
.x .dashboard>div>.status dl a {
|
||||
color: #767676;
|
||||
}
|
||||
.x .dashboard>div>.member>h2:before {
|
||||
background-position: -168px 0px;
|
||||
}
|
||||
.x .dashboard>div>.document>h2:before {
|
||||
background-position: -264px -48px;
|
||||
}
|
||||
|
|
@ -1439,6 +1442,32 @@ body>.x,
|
|||
.x .dashboard>div>section>.more i {
|
||||
font: 12px Tahoma, Geneva, sans-serif;
|
||||
}
|
||||
.x .dashboard>div>section>.more dl {
|
||||
color: #767676;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
zoom: 1;
|
||||
margin: 0 8px 0 0;
|
||||
padding: 1px 8px 0;
|
||||
font: 11px/1 돋움, Dotum, Arial, Helvetica, sans-serif;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 3px #999 inset;
|
||||
border-radius: 3px;
|
||||
min-width: 60px;
|
||||
text-align: center;
|
||||
}
|
||||
.x .dashboard>div>section>.more dt {
|
||||
display: inline;
|
||||
font-weight: normal;
|
||||
}
|
||||
.x .dashboard>div>section>.more dd {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
}
|
||||
.x .dashboard>div>section>.more dl a {
|
||||
color: #767676;
|
||||
}
|
||||
|
||||
.x .dashboard>div>section ul {
|
||||
list-style: none;
|
||||
margin: 10px;
|
||||
|
|
|
|||
2
modules/admin/tpl/css/admin.min.css
vendored
2
modules/admin/tpl/css/admin.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -48,173 +48,13 @@
|
|||
</div>
|
||||
|
||||
<div class="dashboard">
|
||||
<div>
|
||||
<section class="status">
|
||||
<h2>{$lang->uv}</h2>
|
||||
<div style="margin:10px 15px;height:142px" id="visitors"></div>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb['user']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList')}">{number_format($status->member->totalCount)} (<!--@if($status->member->todayCount > 0)-->+<!--@end-->{number_format($status->member->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>›</i> {$lang->details}</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="status">
|
||||
<h2>{$lang->pv}</h2>
|
||||
<div style="margin:10px 15px;height:142px" id="page_views"></div>
|
||||
<div class="more">
|
||||
<dl>
|
||||
<dt>{$lang->menu_gnb_sub['document']}: </dt><dd><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}">{number_format($status->document->totalCount)} (<!--@if($status->document->todayCount > 0)-->+<!--@end-->{number_format($status->document->todayCount)})</a></dd>
|
||||
</dl>
|
||||
<a href="{getUrl('', 'module', 'admin', 'act', 'dispCounterAdminIndex')}"><i>›</i> {$lang->details}</a>
|
||||
</div>
|
||||
</section>
|
||||
<style scoped>.jqplot-table-legend{background:#fff;top:13px!important}</style>
|
||||
</div>
|
||||
<div>
|
||||
<section class="document">
|
||||
<h2>{$lang->latest_documents}</h2>
|
||||
<ul>
|
||||
<li loop="$latestDocumentList => $key,$value">
|
||||
{@$document = $value->variables}
|
||||
<a href="{getUrl('', 'document_srl', $document['document_srl'])}" target="_blank"><!--@if(trim($value->getTitle()))-->{$value->getTitle()}<!--@else--><strong>{$lang->no_title_document}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action" method="POST">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procDocumentManageCheckedDocument" />
|
||||
<input type="hidden" name="cart[]" value="{$document['document_srl']}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="type" value="trash" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="type" value="delete" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestDocumentList) || count($latestDocumentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList')}"><i>›</i> {$lang->more}</a></p>
|
||||
</section>
|
||||
<section class="reply">
|
||||
<h2>{$lang->latest_comments}</h2>
|
||||
<ul>
|
||||
<li loop="$latestCommentList => $key,$value">
|
||||
<a href="{getUrl('', 'document_srl', $value->document_srl)}#comment_{$value->comment_srl}" target="_blank"><!--@if(trim($value->content))-->{$value->getSummary()}<!--@else--><strong>{$lang->no_text_comment}</strong><!--@end--></a>
|
||||
<span class="side">{$value->getNickName()}</span>
|
||||
<form class="action">
|
||||
<input type="hidden" name="module" value="admin" />
|
||||
<input type="hidden" name="act" value="procCommentAdminDeleteChecked" />
|
||||
<input type="hidden" name="cart[]" value="{$value->comment_srl}" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin')}" />
|
||||
<button type="submit" name="is_trash" value="true" class="x_icon-trash">{$lang->cmd_trash}</button>
|
||||
<button type="submit" name="is_trash" value="false" class="x_icon-remove">{$lang->cmd_delete}</button>
|
||||
</form>
|
||||
</li>
|
||||
<li cond="!is_array($latestCommentList) || count($latestCommentList) < 1">{$lang->no_data}</li>
|
||||
</ul>
|
||||
<p class="more"><a href="{getUrl('', 'module', 'admin', 'act', 'dispCommentAdminList')}"><i>›</i> {$lang->more}</a></p>
|
||||
</section>
|
||||
</div>
|
||||
<block cond="$counterAddonActivated">
|
||||
<include target="./_dashboard_counter.html" />
|
||||
</block>
|
||||
<block cond="!$counterAddonActivated">
|
||||
<include target="./_dashboard_default.html" />
|
||||
</block>
|
||||
</div>
|
||||
</div>
|
||||
<include target="./_footer.html" />
|
||||
<script>
|
||||
xe.lang.this_week = '{$lang->this_week}';
|
||||
xe.lang.last_week = '{$lang->last_week}';
|
||||
xe.lang.next_week = '{$lang->next_week}';
|
||||
xe.lang.mon = '{$lang->mon}';
|
||||
xe.lang.tue = '{$lang->tue}';
|
||||
xe.lang.wed = '{$lang->wed}';
|
||||
xe.lang.thu = '{$lang->thu}';
|
||||
xe.lang.fri = '{$lang->fri}';
|
||||
xe.lang.sat = '{$lang->sat}';
|
||||
xe.lang.sun = '{$lang->sun}';
|
||||
|
||||
jQuery(function($)
|
||||
{
|
||||
// Dashboard portlet UI
|
||||
$('.dashboard>div>section>ul>li')
|
||||
.bind('mouseenter focusin', function(){
|
||||
$(this).addClass('hover').find('>.action').show();
|
||||
})
|
||||
.bind('mouseleave focusout', function()
|
||||
{
|
||||
if(!$(this).find(':focus').length)
|
||||
{
|
||||
$(this).removeClass('hover').find('>.action').hide();
|
||||
}
|
||||
});
|
||||
|
||||
// check browser version
|
||||
if($.browser.msie == true ) {
|
||||
var arrBrowserVersion = $.browser.version.split('.');
|
||||
if(parseInt(arrBrowserVersion[0]) <= 8) {
|
||||
$('#checkBrowserMessage').show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function obj2Array(htObj)
|
||||
{
|
||||
var aRes = [];
|
||||
|
||||
for(var x in htObj)
|
||||
{
|
||||
if(!htObj.hasOwnProperty(x)) continue;
|
||||
aRes.push(htObj[x]);
|
||||
}
|
||||
|
||||
return aRes;
|
||||
}
|
||||
|
||||
jQuery(function ($)
|
||||
{
|
||||
$.exec_json("counter.getWeeklyUniqueVisitor", {}, function(htRes)
|
||||
{
|
||||
var aLastWeek = obj2Array(htRes.last_week.list);
|
||||
var aThisWeek = obj2Array(htRes.this_week.list);
|
||||
|
||||
drawChart("visitors", "Weekly Visitors", aLastWeek, aThisWeek);
|
||||
});
|
||||
|
||||
$.exec_json("counter.getWeeklyPageView", {}, function(htRes)
|
||||
{
|
||||
var aLastWeek = obj2Array(htRes.last_week.list);
|
||||
var aThisWeek = obj2Array(htRes.this_week.list);
|
||||
|
||||
drawChart("page_views", "Weekly Page Views", aLastWeek, aThisWeek);
|
||||
});
|
||||
});
|
||||
|
||||
function drawChart(sContainerId, sTitle, aLastWeek, aThisWeek)
|
||||
{
|
||||
$ = jQuery;
|
||||
|
||||
var s1 = aLastWeek;
|
||||
var s2 = aThisWeek;
|
||||
// Can specify a custom tick Array.
|
||||
// Ticks should match up one for each y value (category) in the series.
|
||||
var ticks = [xe.lang.sun,xe.lang.mon,xe.lang.tue,xe.lang.wed,xe.lang.thu,xe.lang.fri,xe.lang.sat];
|
||||
|
||||
var plot1 = $.jqplot(sContainerId, [s1, s2], {
|
||||
seriesDefaults:{
|
||||
renderer:$.jqplot.BarRenderer,
|
||||
rendererOptions: {fillToZero: true}
|
||||
},
|
||||
series:[
|
||||
{label: xe.lang.last_week},
|
||||
{label: xe.lang.this_week}
|
||||
],
|
||||
legend:
|
||||
{
|
||||
show: true,
|
||||
placement: 'outsideGrid'
|
||||
},
|
||||
axes: {
|
||||
xaxis: {
|
||||
renderer: $.jqplot.CategoryAxisRenderer, ticks: ticks
|
||||
},
|
||||
yaxis: {
|
||||
min: 0, ticks: 1, pad: 1.05
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ class boardAdminView extends board {
|
|||
|
||||
// install order (sorting) options
|
||||
foreach($this->order_target as $key) $order_target[$key] = Context::getLang($key);
|
||||
$order_target['list_order'] = Context::getLang('document_srl');
|
||||
$order_target['list_order'] = Context::getLang('regdate');
|
||||
$order_target['update_order'] = Context::getLang('last_update');
|
||||
Context::set('order_target', $order_target);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ class board extends ModuleObject
|
|||
{
|
||||
var $search_option = array('title','content','title_content','comment','user_name','nick_name','user_id','tag'); ///< 검색 옵션
|
||||
|
||||
var $order_target = array('list_order', 'update_order', 'regdate', 'voted_count', 'blamed_count', 'readed_count', 'comment_count', 'title'); // 정렬 옵션
|
||||
var $order_target = array('list_order', 'update_order', 'voted_count', 'blamed_count', 'readed_count', 'comment_count', 'title'); // 정렬 옵션
|
||||
|
||||
var $skin = "default"; ///< skin name
|
||||
var $list_count = 20; ///< the number of documents displayed in a page
|
||||
|
|
|
|||
|
|
@ -76,6 +76,15 @@ class boardController extends board
|
|||
$bAnonymous = false;
|
||||
}
|
||||
|
||||
if((!$obj->status && $obj->is_secret == 'Y') || strtoupper($obj->status == 'SECRET'))
|
||||
{
|
||||
$use_status = explode('|@|', $this->module_info->use_status);
|
||||
if(!is_array($use_status) || !in_array('SECRET', $use_status))
|
||||
{
|
||||
$obj->status = 'PUBLIC';
|
||||
}
|
||||
}
|
||||
|
||||
// update the document if it is existed
|
||||
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,11 +24,29 @@ class boardMobile extends boardView
|
|||
$this->module_info->secret = 'Y';
|
||||
}
|
||||
|
||||
//If category are exsist, set value 'use_category' to 'Y'
|
||||
if(count($oDocumentModel->getCategoryList($this->module_info->module_srl)))
|
||||
$this->module_info->use_category = 'Y';
|
||||
// use_category <=1.5.x, hide_category >=1.7.x
|
||||
$count_category = count($oDocumentModel->getCategoryList($this->module_info->module_srl));
|
||||
if($count_category)
|
||||
{
|
||||
if($this->module_info->hide_category)
|
||||
{
|
||||
$this->module_info->use_category = ($this->module_info->hide_category == 'Y') ? 'N' : 'Y';
|
||||
}
|
||||
else if($this->module_info->use_category)
|
||||
{
|
||||
$this->module_info->hide_category = ($this->module_info->use_category == 'Y') ? 'N' : 'Y';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->module_info->hide_category = 'N';
|
||||
$this->module_info->use_category = 'Y';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->module_info->hide_category = 'Y';
|
||||
$this->module_info->use_category = 'N';
|
||||
}
|
||||
|
||||
/**
|
||||
* check the consultation function, if the user is admin then swich off consultation function
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
<description xml:lang="ru">Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами.</description>
|
||||
<description xml:lang="zh-TW">提供用戶相對應的討論板功能,包含建立/新增及管理等功能。</description>
|
||||
<description xml:lang="tr">Pano yapılandırmaları için kullanılan modüldür. Ayrıca oluşturma/yönetme gibi yönetici özellikleri de içerir.</description>
|
||||
<version>1.7.2-beta.3</version>
|
||||
<date>2014-01-09</date>
|
||||
<version>1.7.2</version>
|
||||
<date>2014-03-20</date>
|
||||
<category>service</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
<th scope="col" cond="$val->type=='nick_name' && $val->idx==-1"><span>{$lang->writer}</span></th>
|
||||
<th scope="col" cond="$val->type=='user_id' && $val->idx==-1"><span>{$lang->user_id}</span></th>
|
||||
<th scope="col" cond="$val->type=='user_name' && $val->idx==-1"><span>{$lang->user_name}</span></th>
|
||||
<th scope="col" cond="$val->type=='regdate' && $val->idx==-1"><span><a href="{getUrl('sort_index','regdate','order_type',$order_type)}">{$lang->date}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_update' && $val->idx==-1"><span><a href="{getUrl('sort_index','last_update','order_type',$order_type)}">{$lang->last_update}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_post' && $val->idx==-1"><span><a href="{getUrl('sort_index','last_update','order_type',$order_type)}">{$lang->last_post}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='regdate' && $val->idx==-1"><span><a href="{getUrl('sort_index','list_order','order_type',$order_type)}">{$lang->date}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_update' && $val->idx==-1"><span><a href="{getUrl('sort_index','update_order','order_type',$order_type)}">{$lang->last_update}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_post' && $val->idx==-1"><span><a href="{getUrl('sort_index','update_order','order_type',$order_type)}">{$lang->last_post}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='readed_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','readed_count','order_type',$order_type)}">{$lang->readed_count}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='voted_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','voted_count','order_type',$order_type)}">{$lang->voted_count}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='blamed_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','blamed_count','order_type',$order_type)}">{$lang->blamed_count}</a></span></th>
|
||||
|
|
|
|||
|
|
@ -340,6 +340,35 @@ class commentAdminController extends comment
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn procCommentAdminMoveToTrash
|
||||
* @brief move a comment to trash
|
||||
* @see commentModel::getCommentMenu
|
||||
*/
|
||||
function procCommentAdminMoveToTrash()
|
||||
{
|
||||
$oDB = DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
$oCommentModel = getModel('comment');
|
||||
$oCommentController = getController('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl, false);
|
||||
|
||||
if(!$oComment->isGranted()) return $this->stop('msg_not_permitted');
|
||||
|
||||
$message_content = "";
|
||||
$this->_moveCommentToTrash(array($comment_srl), $oCommentController, $oDB, $message_content);
|
||||
|
||||
$isTrash = true;
|
||||
$output = $oCommentController->deleteComment($comment_srl, TRUE, $isTrash);
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
$returnUrl = Context::get('cur_url');
|
||||
$this->add('redirect_url', $returnUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel the blacklist of abused comments reported by other users
|
||||
* @return void|object
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class commentAdminView extends comment
|
|||
// get a list by using comment->getCommentList.
|
||||
$oCommentModel = getModel('comment');
|
||||
$secretNameList = $oCommentModel->getSecretNameList();
|
||||
$columnList = array('comment_srl', 'document_srl', 'is_secret', 'status', 'content', 'comments.member_srl', 'comments.nick_name', 'comments.regdate', 'ipaddress', 'voted_count', 'blamed_count');
|
||||
$columnList = array('comment_srl', 'document_srl','module_srl','is_secret', 'status', 'content', 'comments.member_srl', 'comments.nick_name', 'comments.regdate', 'ipaddress', 'voted_count', 'blamed_count');
|
||||
$output = $oCommentModel->getTotalCommentList($args, $columnList);
|
||||
|
||||
// $modules = $oCommentModel->getDistinctModules();
|
||||
|
|
@ -66,6 +66,31 @@ class commentAdminView extends comment
|
|||
// Context::set('modules_list', $modules_list);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
Context::set('secret_name_list', $secretNameList);
|
||||
|
||||
$oModuleModel = getModel('module');
|
||||
$module_list = array();
|
||||
$mod_srls = array();
|
||||
foreach($output->data as $val)
|
||||
{
|
||||
$mod_srls[] = $val->module_srl;
|
||||
}
|
||||
$mod_srls = array_unique($mod_srls);
|
||||
// Module List
|
||||
$mod_srls_count = count($mod_srls);
|
||||
if($mod_srls_count)
|
||||
{
|
||||
$columnList = array('module_srl', 'mid', 'browser_title');
|
||||
$module_output = $oModuleModel->getModulesInfo($mod_srls, $columnList);
|
||||
if($module_output && is_array($module_output))
|
||||
{
|
||||
foreach($module_output as $module)
|
||||
{
|
||||
$module_list[$module->module_srl] = $module;
|
||||
}
|
||||
}
|
||||
}
|
||||
Context::set('module_list', $module_list);
|
||||
|
||||
// set the template
|
||||
$this->setTemplatePath($this->module_path . 'tpl');
|
||||
$this->setTemplateFile('comment_list');
|
||||
|
|
|
|||
|
|
@ -266,9 +266,13 @@ class commentController extends comment
|
|||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
if($obj->homepage && !preg_match('/^[a-z]+:\/\//i', $obj->homepage))
|
||||
if($obj->homepage)
|
||||
{
|
||||
$obj->homepage = 'http://' . $obj->homepage;
|
||||
$obj->homepage = removeHackTag($obj->homepage);
|
||||
if(!preg_match('/^[a-z]+:\/\//i',$obj->homepage))
|
||||
{
|
||||
$obj->homepage = 'http://'.$obj->homepage;
|
||||
}
|
||||
}
|
||||
|
||||
// input the member's information if logged-in
|
||||
|
|
@ -296,6 +300,10 @@ class commentController extends comment
|
|||
{
|
||||
$obj->comment_srl = getNextSequence();
|
||||
}
|
||||
elseif(!checkUserSequence($obj->comment_srl))
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
|
||||
// determine the order
|
||||
$obj->list_order = getNextSequence() * -1;
|
||||
|
|
@ -655,9 +663,13 @@ class commentController extends comment
|
|||
$obj->password = md5($obj->password);
|
||||
}
|
||||
|
||||
if($obj->homepage && !preg_match('/^[a-z]+:\/\//i', $obj->homepage))
|
||||
if($obj->homepage)
|
||||
{
|
||||
$obj->homepage = 'http://' . $obj->homepage;
|
||||
$obj->homepage = removeHackTag($obj->homepage);
|
||||
if(!preg_match('/^[a-z]+:\/\//i',$obj->homepage))
|
||||
{
|
||||
$obj->homepage = 'http://'.$obj->homepage;
|
||||
}
|
||||
}
|
||||
|
||||
// set modifier's information if logged-in and posting author and modifier are matched.
|
||||
|
|
@ -835,18 +847,27 @@ class commentController extends comment
|
|||
// call a trigger (after)
|
||||
if($output->toBool())
|
||||
{
|
||||
$comment->isMoveToTrash = $isMoveToTrash;
|
||||
$trigger_output = ModuleHandler::triggerCall('comment.deleteComment', 'after', $comment);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $trigger_output;
|
||||
}
|
||||
unset($comment->isMoveToTrash);
|
||||
}
|
||||
|
||||
if(!$isMoveToTrash)
|
||||
{
|
||||
$this->_deleteDeclaredComments($args);
|
||||
$this->_deleteVotedComments($args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$args = new stdClass();
|
||||
$args->upload_target_srl = $comment_srl;
|
||||
$args->isvalid = 'N';
|
||||
$output = executeQuery('file.updateFileValid', $args);
|
||||
}
|
||||
|
||||
// commit
|
||||
|
|
|
|||
|
|
@ -76,6 +76,13 @@ class commentModel extends comment
|
|||
// call a trigger (after)
|
||||
ModuleHandler::triggerCall('comment.getCommentMenu', 'after', $menu_list);
|
||||
|
||||
if($this->grant->manager){
|
||||
$str_confirm = Context::getLang('confirm_move');
|
||||
$url = sprintf("if(!confirm('%s')) return; var params = new Array(); params['comment_srl']='%s'; params['mid']=current_mid;params['cur_url']=current_url; exec_xml('comment', 'procCommentAdminMoveToTrash', params)", $str_confirm, $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_trash','','javascript');
|
||||
|
||||
}
|
||||
|
||||
// find a comment by IP matching if an administrator.
|
||||
if($logged_info->is_admin == 'Y')
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<permissions>
|
||||
<permission action="procCommentAdminAddCart" target="manager" />
|
||||
<permission action="procCommentGetList" target="manager" />
|
||||
<permission action="procCommentAdminMoveToTrash" target="manager" />
|
||||
</permissions>
|
||||
<actions>
|
||||
<action name="getCommentMenu" type="model" />
|
||||
|
|
@ -21,6 +22,7 @@
|
|||
<action name="procCommentAdminCancelDeclare" type="controller" />
|
||||
<action name="procCommentAdminAddCart" type="controller" />
|
||||
<action name="procCommentGetList" type="controller" />
|
||||
<action name="procCommentAdminMoveToTrash" type="controller" />
|
||||
</actions>
|
||||
<menus>
|
||||
<menu name="comment">
|
||||
|
|
|
|||
|
|
@ -47,7 +47,12 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
<tbody>
|
||||
<tr loop="$comment_list => $no, $val">
|
||||
{@ $comment = $val->getContentText(200)}
|
||||
<td><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" target="_blank"><!--@if(strlen($comment))-->{$comment}<!--@else--><em>{$lang->no_text_comment}</em><!--@end--></a></td>
|
||||
<td>
|
||||
<block cond="isset($module_list[$val->module_srl])">
|
||||
<a href="{getUrl('', 'mid', $module_list[$val->module_srl]->mid)}" target="_blank">{$module_list[$val->module_srl]->browser_title}</a> -
|
||||
</block>
|
||||
<a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" target="_blank"><!--@if(strlen($comment))-->{$comment}<!--@else--><em>{$lang->no_text_comment}</em><!--@end--></a>
|
||||
</td>
|
||||
<td class="nowr"><a href="#popup_menu_area" class="member_{$val->member_srl}">{$val->getNickName()}</a></td>
|
||||
<td class="nowr">{number_format($val->get('voted_count'))}/{number_format($val->get('blamed_count'))}</td>
|
||||
<td class="nowr">{(zdate($val->regdate,"Y-m-d\nH:i:s"))}</td>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class communicationAdminController extends communication
|
|||
function procCommunicationAdminInsertConfig()
|
||||
{
|
||||
// get the default information
|
||||
$args = Context::gets('skin', 'colorset', 'editor_skin', 'sel_editor_colorset', 'mskin', 'mcolorset', 'layout_srl', 'mlayout_srl');
|
||||
$args = Context::gets('skin', 'colorset', 'editor_skin', 'sel_editor_colorset', 'mskin', 'mcolorset', 'layout_srl', 'mlayout_srl', 'grant_write_default','grant_write_group');
|
||||
$args->editor_colorset = $args->sel_editor_colorset;
|
||||
unset($args->sel_editor_colorset);
|
||||
|
||||
|
|
@ -53,6 +53,11 @@ class communicationAdminController extends communication
|
|||
$args->layout_srl = NULL;
|
||||
}
|
||||
|
||||
$oCommunicationModel = getModel('communication');
|
||||
$args->grant_write = $oCommunicationModel->getGrantArray($args->grant_write_default, $args->grant_write_group);
|
||||
unset($args->grant_write_default);
|
||||
unset($args->grant_write_group);
|
||||
|
||||
// create the module module Controller object
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->insertModuleConfig('communication', $args);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,10 @@ class communicationAdminView extends communication
|
|||
$security->encodeHTML('communication_skin_list..title');
|
||||
$security->encodeHTML('communication_mobile_skin_list..title');
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
$group_list = $oMemberModel->getGroups($this->site_srl);
|
||||
Context::set('group_list', $group_list);
|
||||
|
||||
// specify a template
|
||||
$this->setTemplatePath($this->module_path . 'tpl');
|
||||
$this->setTemplateFile('index');
|
||||
|
|
|
|||
|
|
@ -88,6 +88,12 @@ class communicationController extends communication
|
|||
// Check if there is a member to receive a message
|
||||
$oMemberModel = getModel('member');
|
||||
$oCommunicationModel = getModel('communication');
|
||||
$config = $oCommunicationModel->getConfig();
|
||||
|
||||
if(!$oCommunicationModel->checkGrant($config->grant_write))
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
|
||||
$receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
if($receiver_member_info->member_srl != $receiver_srl)
|
||||
|
|
|
|||
|
|
@ -51,10 +51,102 @@ class communicationModel extends communication
|
|||
{
|
||||
$communication_config->mskin = 'default';
|
||||
}
|
||||
|
||||
if(!$communication_config->grant_write)
|
||||
{
|
||||
$communication_config->grant_write = array('default_grant'=>'member');
|
||||
}
|
||||
|
||||
return $communication_config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get grant array for insert to database. table module_config's config field
|
||||
* @param string $default
|
||||
* @param array $group
|
||||
* @return array
|
||||
*/
|
||||
function getGrantArray($default, $group)
|
||||
{
|
||||
$grant = array();
|
||||
if($default!="")
|
||||
{
|
||||
switch($default)
|
||||
{
|
||||
case "-2":
|
||||
$grant = array("default_grant"=>"site");
|
||||
break;
|
||||
case "-3":
|
||||
$grant = array("default_grant"=>"manager");
|
||||
break;
|
||||
default :
|
||||
$grant = array("default_grant"=>"member");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(is_array($group))
|
||||
{
|
||||
$oMemberModel = getModel('member');
|
||||
$group_list = $oMemberModel->getGroups($this->site_srl);
|
||||
|
||||
$group_grant = array();
|
||||
foreach($group as $group_srl)
|
||||
{
|
||||
$group_grant[$group_srl] = $group_list[$group_srl]->title;
|
||||
}
|
||||
$grant = array('group_grant'=>$group_grant);
|
||||
}
|
||||
return $grant;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief check member's grant
|
||||
* @param object $member_info
|
||||
* @param array $arrGrant
|
||||
* @return boolean
|
||||
*/
|
||||
function checkGrant($arrGrant)
|
||||
{
|
||||
if(!$arrGrant)
|
||||
return false;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!$logged_info)
|
||||
return false;
|
||||
|
||||
if($logged_info->is_admin == "Y")
|
||||
return true;
|
||||
|
||||
if($arrGrant['default_grant'])
|
||||
{
|
||||
if($arrGrant['default_grant'] == "member" && $logged_info)
|
||||
return true;
|
||||
|
||||
if($arrGrant['default_grant'] == "site" && $this->site_srl == $logged_info->site_srl)
|
||||
return true;
|
||||
|
||||
if($arrGrant['default_grant'] == "manager" && $logged_info->is_admin == "Y")
|
||||
return true;
|
||||
}
|
||||
|
||||
if($arrGrant['group_grant'])
|
||||
{
|
||||
$group_grant = $arrGrant['group_grant'];
|
||||
if(!is_array($group_grant))
|
||||
return false;
|
||||
|
||||
foreach($logged_info->group_list as $group_srl=>$title)
|
||||
{
|
||||
if(isset($group_grant[$group_srl])&&$group_grant[$group_srl]==$title)
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* get the message contents
|
||||
* @param int $message_srl
|
||||
|
|
|
|||
|
|
@ -376,4 +376,12 @@
|
|||
<value xml:lang="en"><![CDATA[Friends in a mobile environment is not supported. Please go to the PC page.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[モバイル環境では友達リストページをサポートしません。PC画面へ移動してください。]]></value>
|
||||
</item>
|
||||
<item name="cmd_write_communication">
|
||||
<value xml:lang="ko"><![CDATA[작성 권한]]></value>
|
||||
<value xml:lang="en"><![CDATA[Write Grant]]></value>
|
||||
</item>
|
||||
<item name="cmd_manage_base">
|
||||
<value xml:lang="ko"><![CDATA[기본 정보]]></value>
|
||||
<value xml:lang="en"><![CDATA[Basic infomation]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<query id="getNewMessage" action="select">
|
||||
<tables>
|
||||
<table name="message" />
|
||||
<table name="member_message" alias="message" />
|
||||
<table name="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<load target="js/communication_admin.js" usecdn="true" />
|
||||
<load target="../../module/tpl/js/module_admin.js" />
|
||||
<load target="../../editor/tpl/js/editor_module_config.js" usecdn="true" />
|
||||
|
||||
<div class="x_page-header">
|
||||
|
|
@ -81,6 +82,24 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="mlayout_srl">{$lang->cmd_write_communication}</label>
|
||||
<div class="x_controls">
|
||||
<select name="grant_write_default" class="grant_default">
|
||||
<option value="-1" selected="selected"|cond="$communication_config->grant_write['default_grant']=='member'">{$lang->grant_to_login_user}</option>
|
||||
<option value="-2" selected="selected"|cond="$communication_config->grant_write['default_grant']=='site'">{$lang->grant_to_site_user}</option>
|
||||
<option value="-3" selected="selected"|cond="$communication_config->grant_write['default_grant']=='manager'">{$lang->grant_to_admin}</option>
|
||||
<option value="" selected="selected"|cond="$communication_config->grant_write['default_grant']==''">{$lang->grant_to_group}</option>
|
||||
</select>
|
||||
<div id="zone_grant_write" hidden style="margin:8px 0 0 0">
|
||||
<label loop="$group_list => $group_srl, $group_item" for="grant_write_group_{$group_srl}">
|
||||
<input type="checkbox" class="checkbox" name="grant_write_group[]" value="{$group_item->group_srl}" id="grant_write_group_{$group_item->group_srl}" checked="checked"|cond="isset($communication_config->grant_write['group_grant'][$group_srl])&&$communication_config->grant_write['group_grant'][$group_srl]==$group_item->title"/>
|
||||
{$group_item->title}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btnArea">
|
||||
<button class="x_btn x_btn-primary" type="submit">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
|
|
@ -89,5 +108,7 @@
|
|||
jQuery(function() {
|
||||
doGetSkinColorset("{$communication_config->skin}", 'P');
|
||||
doGetSkinColorset("{$communication_config->mskin}", 'M');
|
||||
jQuery('.grant_default').change( function(event) { doShowGrantZone(); } );
|
||||
doShowGrantZone()
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ class documentAdminView extends document
|
|||
|
||||
// get a list
|
||||
$oDocumentModel = getModel('document');
|
||||
$columnList = array('document_srl', 'title', 'member_srl', 'nick_name', 'readed_count', 'voted_count', 'blamed_count', 'regdate', 'ipaddress', 'status');
|
||||
$columnList = array('document_srl', 'module_srl', 'title', 'member_srl', 'nick_name', 'readed_count', 'voted_count', 'blamed_count', 'regdate', 'ipaddress', 'status');
|
||||
$output = $oDocumentModel->getDocumentList($args, false, true, $columnList);
|
||||
|
||||
// get Status name list
|
||||
|
|
@ -72,6 +72,30 @@ class documentAdminView extends document
|
|||
}
|
||||
Context::set('search_option', $search_option);
|
||||
|
||||
$oModuleModel = getModel('module');
|
||||
$module_list = array();
|
||||
$mod_srls = array();
|
||||
foreach($output->data as $oDocument)
|
||||
{
|
||||
$mod_srls[] = $oDocument->get('module_srl');
|
||||
}
|
||||
$mod_srls = array_unique($mod_srls);
|
||||
// Module List
|
||||
$mod_srls_count = count($mod_srls);
|
||||
if($mod_srls_count)
|
||||
{
|
||||
$columnList = array('module_srl', 'mid', 'browser_title');
|
||||
$module_output = $oModuleModel->getModulesInfo($mod_srls, $columnList);
|
||||
if($module_output && is_array($module_output))
|
||||
{
|
||||
foreach($module_output as $module)
|
||||
{
|
||||
$module_list[$module->module_srl] = $module;
|
||||
}
|
||||
}
|
||||
}
|
||||
Context::set('module_list', $module_list);
|
||||
|
||||
// Specify a template
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_list');
|
||||
|
|
|
|||
|
|
@ -234,6 +234,7 @@ class documentController extends document
|
|||
if(!$output->toBool()) return $output;
|
||||
// Register it if no given document_srl exists
|
||||
if(!$obj->document_srl) $obj->document_srl = getNextSequence();
|
||||
elseif(!checkUserSequence($obj->document_srl)) return new Object(-1, 'msg_not_permitted');
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
// Set to 0 if the category_srl doesn't exist
|
||||
|
|
@ -398,7 +399,15 @@ class documentController extends document
|
|||
if(!$obj->commentStatus) $obj->commentStatus = 'DENY';
|
||||
if($obj->commentStatus == 'DENY') $this->_checkCommentStatusForOldVersion($obj);
|
||||
if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
|
||||
if($obj->homepage && !preg_match('/^[a-z]+:\/\//i',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
|
||||
if($obj->homepage)
|
||||
{
|
||||
$obj->homepage = removeHackTag($obj->homepage);
|
||||
if(!preg_match('/^[a-z]+:\/\//i',$obj->homepage))
|
||||
{
|
||||
$obj->homepage = 'http://'.$obj->homepage;
|
||||
}
|
||||
}
|
||||
|
||||
if($obj->notify_message != 'Y') $obj->notify_message = 'N';
|
||||
|
||||
// can modify regdate only manager
|
||||
|
|
@ -510,7 +519,7 @@ class documentController extends document
|
|||
{
|
||||
foreach($extra_keys as $idx => $extra_item)
|
||||
{
|
||||
$value = '';
|
||||
$value = NULL;
|
||||
if(isset($obj->{'extra_vars'.$idx}))
|
||||
{
|
||||
$tmp = $obj->{'extra_vars'.$idx};
|
||||
|
|
@ -520,7 +529,7 @@ class documentController extends document
|
|||
$value = trim($tmp);
|
||||
}
|
||||
else if(isset($obj->{$extra_item->name})) $value = trim($obj->{$extra_item->name});
|
||||
if(!isset($value)) continue;
|
||||
if($value == NULL) continue;
|
||||
$this->insertDocumentExtraVar($obj->module_srl, $obj->document_srl, $idx, $value, $extra_item->eid);
|
||||
}
|
||||
}
|
||||
|
|
@ -793,6 +802,8 @@ class documentController extends document
|
|||
$oCacheHandler = CacheHandler::getInstance('object');
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
$cache_key = 'document_item:'. getNumberingPath($oDocument->document_srl) . $oDocument->document_srl;
|
||||
$oCacheHandler->delete($cache_key);
|
||||
}
|
||||
|
||||
return $output;
|
||||
|
|
@ -808,9 +819,10 @@ class documentController extends document
|
|||
$document_srl = $oDocument->document_srl;
|
||||
$member_srl = $oDocument->get('member_srl');
|
||||
$logged_info = Context::get('logged_info');
|
||||
// Call a trigger when the read count is updated (after)
|
||||
$output = ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// Call a trigger when the read count is updated (before)
|
||||
$trigger_output = ModuleHandler::triggerCall('document.updateReadedCount', 'before', $oDocument);
|
||||
if(!$trigger_output->toBool()) return $trigger_output;
|
||||
|
||||
// Pass if read count is increaded on the session information
|
||||
if($_SESSION['readed_document'][$document_srl]) return false;
|
||||
|
|
@ -827,11 +839,25 @@ class documentController extends document
|
|||
$_SESSION['readed_document'][$document_srl] = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
$oDB = DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// Update read counts
|
||||
$args = new stdClass;
|
||||
$args->document_srl = $document_srl;
|
||||
$output = executeQuery('document.updateReadedCount', $args);
|
||||
|
||||
// Call a trigger when the read count is updated (after)
|
||||
$outptrigger_outputut = ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
$oCacheHandler = CacheHandler::getInstance('object');
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -141,9 +141,8 @@ class documentItem extends Object
|
|||
$oDocumentModel = getModel('document');
|
||||
if($load_extra_vars)
|
||||
{
|
||||
$oDocumentModel->getDocumentExtraVarsFromDB($this->document_srl);
|
||||
$this->add('title', $this->get('title'));
|
||||
$this->add('content', $this->get('content'));
|
||||
$GLOBALS['XE_DOCUMENT_LIST'][$attribute->document_srl] = $this;
|
||||
$oDocumentModel->setToAllDocumentExtraVars();
|
||||
}
|
||||
$GLOBALS['XE_DOCUMENT_LIST'][$this->document_srl] = $this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -520,6 +520,13 @@ class documentModel extends document
|
|||
$oDocumentController->addDocumentPopupMenu($url,'cmd_print','','printDocument');
|
||||
// Call a trigger (after)
|
||||
ModuleHandler::triggerCall('document.getDocumentMenu', 'after', $menu_list);
|
||||
if($this->grant->manager)
|
||||
{
|
||||
$str_confirm = Context::getLang('confirm_move');
|
||||
$url = sprintf("if(!confirm('%s')) return; var params = new Array(); params['document_srl']='%s'; params['mid']=current_mid;params['cur_url']=current_url; exec_xml('document', 'procDocumentAdminMoveToTrash', params)", $str_confirm, $document_srl);
|
||||
$oDocumentController->addDocumentPopupMenu($url,'cmd_trash','','javascript');
|
||||
}
|
||||
|
||||
// If you are managing to find posts by ip
|
||||
if($logged_info->is_admin == 'Y')
|
||||
{
|
||||
|
|
@ -528,10 +535,6 @@ class documentModel extends document
|
|||
|
||||
if($oDocument->isExists())
|
||||
{
|
||||
$str_confirm = Context::getLang('cmd_document_do') . Context::getLang('confirm_delete');
|
||||
$url = sprintf("if(!confirm('%s')) return; var params = new Array(); params['document_srl']='%s'; params['mid']=current_mid;params['cur_url']=current_url; exec_xml('document', 'procDocumentAdminMoveToTrash', params)", $str_confirm, $document_srl);
|
||||
$oDocumentController->addDocumentPopupMenu($url,'cmd_trash','','javascript');
|
||||
|
||||
// Find a post equivalent to ip address
|
||||
$url = getUrl('','module','admin','act','dispDocumentAdminList','search_target','ipaddress','search_keyword',$oDocument->getIpAddress());
|
||||
$oDocumentController->addDocumentPopupMenu($url,'cmd_search_by_ipaddress',$icon_path,'TraceByIpaddress');
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
<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="documents.member_srl" var="member_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" />
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
<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="documents.member_srl" var="member_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" />
|
||||
|
|
|
|||
|
|
@ -48,7 +48,11 @@ xe.lang.msg_empty_search_keyword = '{$lang->msg_empty_search_keyword}';
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$document_list => $no, $oDocument">
|
||||
<td class="title"><a href="{getUrl('','document_srl',$oDocument->document_srl)}" target="_blank"><!--@if(trim($oDocument->getTitleText()))-->{htmlspecialchars($oDocument->getTitleText())}<!--@else--><em>{$lang->no_title_document}</em><!--@end--></a></td>
|
||||
<td class="title">
|
||||
<block cond="isset($module_list[$oDocument->get('module_srl')])">
|
||||
<a href="{getUrl('', 'mid', $module_list[$oDocument->get('module_srl')]->mid)}" target="_blank">{$module_list[$oDocument->get('module_srl')]->browser_title}</a> -
|
||||
</block>
|
||||
<a href="{getUrl('','document_srl',$oDocument->document_srl)}" target="_blank"><!--@if(trim($oDocument->getTitleText()))-->{htmlspecialchars($oDocument->getTitleText())}<!--@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>
|
||||
<td class="nowr">{$oDocument->get('readed_count')}</td>
|
||||
<td class="nowr">{$oDocument->get('voted_count')}/{$oDocument->get('blamed_count')}</td>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -493,6 +493,8 @@ class editorModel extends editor
|
|||
$oEditorController->deleteSavedDoc(false);
|
||||
$oEditorController->doSaveDoc($saved_doc);
|
||||
|
||||
setUserSequence($saved_doc->document_srl);
|
||||
|
||||
return $saved_doc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ class fileAdminController extends file
|
|||
|
||||
$download_grant = Context::get('download_grant');
|
||||
|
||||
$file_config = new stdClass;
|
||||
$file_config->allow_outlink = Context::get('allow_outlink');
|
||||
$file_config->allow_outlink_format = Context::get('allow_outlink_format');
|
||||
$file_config->allow_outlink_site = Context::get('allow_outlink_site');
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ class fileAdminModel extends file
|
|||
if($_SESSION['file_management'][$file->file_srl]) $file->isCarted = true;
|
||||
else $file->isCarted = false;
|
||||
|
||||
$file->download_url = $oFileModel->getDownloadUrl($file->file_srl, $file->sid);
|
||||
$file->download_url = $oFileModel->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl);
|
||||
$output->data[$key] = $file;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,6 +160,8 @@ class fileController extends file
|
|||
{
|
||||
$oFileModel = getModel('file');
|
||||
|
||||
if(isset($this->grant->access) && $this->grant->access !== true) return new Object(-1, 'msg_not_permitted');
|
||||
|
||||
$file_srl = Context::get('file_srl');
|
||||
$sid = Context::get('sid');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
|
@ -518,6 +520,8 @@ class fileController extends file
|
|||
$comment_srl = $obj->comment_srl;
|
||||
if(!$comment_srl) return new Object();
|
||||
|
||||
if($obj->isMoveToTrash) return new Object();
|
||||
|
||||
$output = $this->deleteFiles($comment_srl);
|
||||
return $output;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class fileModel extends file
|
|||
$obj->source_filename = $file_info->source_filename;
|
||||
$obj->file_size = $file_info->file_size;
|
||||
$obj->disp_file_size = FileHandler::filesize($file_info->file_size);
|
||||
if($file_info->direct_download=='N') $obj->download_url = $this->getDownloadUrl($file_info->file_srl, $file_info->sid);
|
||||
if($file_info->direct_download=='N') $obj->download_url = $this->getDownloadUrl($file_info->file_srl, $file_info->sid, $file_info->module_srl);
|
||||
else $obj->download_url = str_replace('./', '', $file_info->uploaded_filename);
|
||||
$obj->direct_download = $file_info->direct_download;
|
||||
$files[] = $obj;
|
||||
|
|
@ -95,9 +95,9 @@ class fileModel extends file
|
|||
* @param string $sid
|
||||
* @return string Returns a url
|
||||
*/
|
||||
function getDownloadUrl($file_srl, $sid)
|
||||
function getDownloadUrl($file_srl, $sid, $module_srl="")
|
||||
{
|
||||
return sprintf('?module=%s&act=%s&file_srl=%s&sid=%s', 'file', 'procFileDownload', $file_srl, $sid);
|
||||
return sprintf('?module=%s&act=%s&file_srl=%s&sid=%s&module_srl=%s', 'file', 'procFileDownload', $file_srl, $sid, $module_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -164,7 +164,7 @@ class fileModel extends file
|
|||
if(count($output->data) == 1)
|
||||
{
|
||||
$file = $output->data[0];
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid);
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl);
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
|
@ -177,7 +177,7 @@ class fileModel extends file
|
|||
foreach($output->data as $key=>$value)
|
||||
{
|
||||
$file = $value;
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid);
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl);
|
||||
$fileList[] = $file;
|
||||
}
|
||||
}
|
||||
|
|
@ -211,7 +211,7 @@ class fileModel extends file
|
|||
{
|
||||
$file = $file_list[$i];
|
||||
$file->source_filename = stripslashes($file->source_filename);
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid);
|
||||
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl);
|
||||
$file_list[$i] = $file;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1009,6 +1009,7 @@ class importerAdminController extends importer
|
|||
$started = false;
|
||||
$buff = null;
|
||||
|
||||
$file_obj = new stdClass;
|
||||
while(!feof($fp))
|
||||
{
|
||||
$str = trim(fgets($fp, 1024));
|
||||
|
|
@ -1017,7 +1018,6 @@ class importerAdminController extends importer
|
|||
// If it starts with <attach>, collect attachments
|
||||
if(trim($str) == '<attach>')
|
||||
{
|
||||
$file_obj = new stdClass;
|
||||
$file_obj->file_srl = getNextSequence();
|
||||
$file_obj->upload_target_srl = $upload_target_srl;
|
||||
$file_obj->module_srl = $module_srl;
|
||||
|
|
|
|||
|
|
@ -167,9 +167,14 @@ class installController extends install
|
|||
if(!$oDB->isConnected()) return $oDB->getError();
|
||||
|
||||
// Install all the modules
|
||||
$oDB->begin();
|
||||
$this->installDownloadedModule();
|
||||
$oDB->commit();
|
||||
try {
|
||||
$oDB->begin();
|
||||
$this->installDownloadedModule();
|
||||
$oDB->commit();
|
||||
} catch(Exception $e) {
|
||||
$oDB->rollback();
|
||||
return new Object(-1, $e->getMessage());
|
||||
}
|
||||
|
||||
// Create a config file
|
||||
if(!$this->makeConfigFile()) return new Object(-1, 'msg_install_failed');
|
||||
|
|
@ -515,6 +520,8 @@ class installController extends install
|
|||
$file = trim($schema_files[$i]);
|
||||
if(!$file || substr($file,-4)!='.xml') continue;
|
||||
$output = $oDB->createTableByXmlFile($file);
|
||||
if($output === false)
|
||||
throw new Exception('msg_create_table_failed');
|
||||
}
|
||||
// Create a table and module instance and then execute install() method
|
||||
unset($oModule);
|
||||
|
|
|
|||
|
|
@ -405,7 +405,7 @@
|
|||
<value xml:lang="vi"><![CDATA[Dùng chức năng <b>innodb</b> để sử dụng MySql Database.<br />Giao dịch được kích hoạt cho innodb]]></value>
|
||||
</item>
|
||||
<item name="cubrid">
|
||||
<value xml:lang="ko"><![CDATA[CUBRID DB를 이용합니다. <a href="http://xe.xpressengine.net/18180659" target="_blank">Manual</a>]]></value>
|
||||
<value xml:lang="ko"><![CDATA[CUBRID DB를 이용합니다. <a href="http://www.cubrid.com/zbxe/?mid=bbs_developer_tutorial&category=47452" target="_blank">Manual</a>]]></value>
|
||||
<value xml:lang="en"><![CDATA[Use CUBRID as a database. See <a href="http://www.cubrid.org/wiki_tutorials/entry/cubrid-installation-instructions" target="_blank">Manual</a> for more info]]></value>
|
||||
<value xml:lang="jp"><![CDATA[CUBRID DBを利用します。 <a href="http://www.cubrid.org/wiki_tutorials/entry/cubrid-installation-instructions" target="_blank">Manual</a>]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[使用CUBRID DB。 <a href="http://www.cubrid.org/wiki_tutorials/entry/cubrid-installation-instructions" target="_blank">Manual</a>]]></value>
|
||||
|
|
@ -808,6 +808,10 @@
|
|||
<value xml:lang="tr"><![CDATA[Kurulum dosyası oluşturulurken bir hata oluştu.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Đã có lỗi xảy ra khi tạo File cài đặt.]]></value>
|
||||
</item>
|
||||
<item name="msg_create_table_failed">
|
||||
<value xml:lang="ko"><![CDATA[DB 테이블 생성에 실패했습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Failed to create database tables.]]></value>
|
||||
</item>
|
||||
<item name="ftp_get_list">
|
||||
<value xml:lang="ko"><![CDATA[목록 가져오기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Get List]]></value>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<include target="header.html" />
|
||||
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'moduels/integration_search/tpl/skin_info/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/integration_search/tpl/skin_info/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
|
||||
<form action="{Context::getRequestUri()}" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="module" value="integration_search" />
|
||||
<input type="hidden" name="act" value="procIntegration_searchAdminInsertSkin" />
|
||||
<input type="hidden" name="xe_validator_id" value="moduels/integration_search/tpl/skin_info/1" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/integration_search/tpl/skin_info/1" />
|
||||
<section class="section">
|
||||
<h1>{$lang->skin_default_info}</h1>
|
||||
|
||||
|
|
|
|||
|
|
@ -262,15 +262,8 @@ class layoutAdminController extends layout
|
|||
$oLayoutModel = getModel('layout');
|
||||
$cache_file = $oLayoutModel->getUserLayoutCache($args->layout_srl, Context::getLangType());
|
||||
FileHandler::removeFile($cache_file);
|
||||
//remove from cache
|
||||
$oCacheHandler = CacheHandler::getInstance('object', null, true);
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
$object_key = 'layout:' . $args->layout_srl;
|
||||
$cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key);
|
||||
$oCacheHandler->delete($cache_key);
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
|
@ -336,14 +329,7 @@ class layoutAdminController extends layout
|
|||
$args = new stdClass();
|
||||
$args->layout_srl = $layout_srl;
|
||||
$output = executeQuery("layout.deleteLayout", $args);
|
||||
//remove from cache
|
||||
$oCacheHandler = CacheHandler::getInstance('object', null, true);
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
$object_key = 'layout:'.$layout_srl;
|
||||
$cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key);
|
||||
$oCacheHandler->delete($cache_key);
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
return new Object(0,'success_deleted');
|
||||
|
|
|
|||
|
|
@ -86,8 +86,6 @@ class layout extends ModuleObject
|
|||
$oDB->addColumn('layouts','layout_type','char',1,'P',true);
|
||||
}
|
||||
|
||||
$oCacheHandler = CacheHandler::getInstance('object', null, true);
|
||||
|
||||
$args->layout = '.';
|
||||
$output = executeQueryArray('layout.getLayoutDotList', $args);
|
||||
if($output->data && count($output->data) > 0)
|
||||
|
|
@ -101,13 +99,6 @@ class layout extends ModuleObject
|
|||
$args->layout = implode('|@|', $layout_path);
|
||||
$args->layout_srl = $layout->layout_srl;
|
||||
$output = executeQuery('layout.updateLayout', $args);
|
||||
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
$object_key = 'layout:' . $args->layout_srl;
|
||||
$cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key);
|
||||
$oCacheHandler->delete($cache_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -258,31 +258,15 @@ class layoutModel extends layout
|
|||
*/
|
||||
function getLayout($layout_srl)
|
||||
{
|
||||
$layout_info = false;
|
||||
// Get information from the DB
|
||||
$args = new stdClass();
|
||||
$args->layout_srl = $layout_srl;
|
||||
$output = executeQuery('layout.getLayout', $args);
|
||||
if(!$output->data) return;
|
||||
|
||||
// cache controll
|
||||
$oCacheHandler = CacheHandler::getInstance('object', null, true);
|
||||
if($oCacheHandler->isSupport())
|
||||
{
|
||||
$object_key = 'layout:' . $layout_srl;
|
||||
$cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key);
|
||||
$layout_info = $oCacheHandler->get($cache_key);
|
||||
}
|
||||
// Return xml file informaton after listing up the layout and extra_vars
|
||||
$layout_info = $this->getLayoutInfo($layout, $output->data, $output->data->layout_type);
|
||||
|
||||
if($layout_info === false)
|
||||
{
|
||||
// Get information from the DB
|
||||
$args = new stdClass();
|
||||
$args->layout_srl = $layout_srl;
|
||||
$output = executeQuery('layout.getLayout', $args);
|
||||
if(!$output->data) return;
|
||||
|
||||
// Return xml file informaton after listing up the layout and extra_vars
|
||||
$layout_info = $this->getLayoutInfo($layout, $output->data, $output->data->layout_type);
|
||||
|
||||
//insert in cache
|
||||
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key, $layout_info);
|
||||
}
|
||||
return $layout_info;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@
|
|||
</block>
|
||||
</block>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{@$group = ''}
|
||||
{@$cnt = 1}
|
||||
|
|
@ -137,7 +136,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</block>
|
||||
<block cond="$group"></div></div></block>
|
||||
<block cond="$group"></div></block>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h1 cond="$selected_layout->menu">{$lang->menu}</h1>
|
||||
|
|
|
|||
|
|
@ -509,6 +509,12 @@
|
|||
<value xml:lang="tr"><![CDATA[Geçici Zaman Sınırı]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Hạn sử dụng]]></value>
|
||||
</item>
|
||||
<item name="limit_day_description">
|
||||
<value xml:lang="ko"><![CDATA[임시 제한 일자 설명]]></value>
|
||||
<value xml:lang="en"><![CDATA[Description for Temporary Limit Date]]></value>
|
||||
<value xml:lang="jp"><![CDATA[一時的な期限日の説明]]></value>
|
||||
</item>
|
||||
|
||||
<item name="limit_date">
|
||||
<value xml:lang="ko"><![CDATA[제한일]]></value>
|
||||
<value xml:lang="en"><![CDATA[Limit Date]]></value>
|
||||
|
|
@ -2335,6 +2341,10 @@
|
|||
<value xml:lang="zh-CN"><![CDATA[可设定密码更新周期,将会定期通知更换密码。 (设为零则不适用)]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Eğer buna bir değer biçerseniz, şifrenizi belirli aralıklarla değiştirmeniz konusunda bildirim alacaksanız (eğer 0 olarak ayarlandıysa, devredışıdır)]]></value>
|
||||
</item>
|
||||
<item name="msg_change_password_date">
|
||||
<value xml:lang="ko"><![CDATA[%s일 동안 비밀번호를 변경하지 않았습니다. 개인정보 보호를 위하여 비밀번호를 변경해야 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You have not changed the password during %s days. For personal information protection, you need to change the password.]]></value>
|
||||
</item>
|
||||
<item name="login_trial_limit1">
|
||||
<value xml:lang="ko"><![CDATA[로그인 시도 횟수 제한 횟수]]></value>
|
||||
<value xml:lang="en"><![CDATA[Sign in trial limit]]></value>
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<li>
|
||||
<label for="question">{$lang->find_account_question}</label>
|
||||
<select id="question" name="find_account_question" style="width:290px;display:block;">
|
||||
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<$c;$i++)-->
|
||||
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<=$c;$i++)-->
|
||||
<option value="{$i}">{$lang->find_account_question_items[$i]}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -184,6 +184,7 @@ class memberAdminController extends member
|
|||
|
||||
$args = Context::gets(
|
||||
'limit_day',
|
||||
'limit_day_description',
|
||||
'agreement',
|
||||
'redirect_url',
|
||||
'profile_image', 'profile_image_max_width', 'profile_image_max_height',
|
||||
|
|
|
|||
|
|
@ -67,8 +67,8 @@ class memberController extends member
|
|||
$oMemberModel = getModel('member');
|
||||
if($this->memberInfo->change_password_date < date ('YmdHis', strtotime ('-' . $limit_date . ' day')))
|
||||
{
|
||||
$this->setRedirectUrl(getNotEncodedUrl('','vid',Context::get('vid'),'mid',Context::get('mid'),'act','dispMemberModifyPassword'));
|
||||
return;
|
||||
$msg = sprintf(Context::getLang('msg_change_password_date'), $limit_date);
|
||||
return $this->setRedirectUrl(getNotEncodedUrl('','vid',Context::get('vid'),'mid',Context::get('mid'),'act','dispMemberModifyPassword'), new Object(-1, $msg));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -230,7 +230,8 @@ class memberController extends member
|
|||
}
|
||||
// Check if duplicated
|
||||
$member_srl = $oMemberModel->getMemberSrlByNickName($value);
|
||||
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_nick_name');
|
||||
$member_srl_by_decode = $oMemberModel->getMemberSrlByNickName(utf8_decode($value));
|
||||
if(($member_srl && $logged_info->member_srl != $member_srl ) || ($member_srl_by_decode && $logged_info->member_srl != $member_srl_by_decode )) return new Object(0,'msg_exists_nick_name');
|
||||
|
||||
break;
|
||||
case 'email_address' :
|
||||
|
|
@ -369,11 +370,16 @@ class memberController extends member
|
|||
{
|
||||
if($config->identifier == 'email_address')
|
||||
{
|
||||
$this->doLogin($args->email_address);
|
||||
$output = $this->doLogin($args->email_address);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->doLogin($args->user_id);
|
||||
$output = $this->doLogin($args->user_id);
|
||||
}
|
||||
if(!$output->toBool()) {
|
||||
if($output->error == -9)
|
||||
$output->error = -11;
|
||||
return $this->setRedirectUrl(getUrl('', 'act', 'dispMemberLoginForm'), $output);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -384,6 +390,7 @@ class memberController extends member
|
|||
{
|
||||
$msg = sprintf(Context::getLang('msg_confirm_mail_sent'), $args->email_address);
|
||||
$this->setMessage($msg);
|
||||
return $this->setRedirectUrl(getUrl('', 'act', 'dispMemberLoginForm'), new Object(-12, $msg));
|
||||
}
|
||||
else $this->setMessage('success_registed');
|
||||
// Call a trigger (after)
|
||||
|
|
@ -407,7 +414,7 @@ class memberController extends member
|
|||
}
|
||||
}
|
||||
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
$this->_clearMemberCache($args->member_srl, $site_module_info->site_srl);
|
||||
|
||||
$this->setRedirectUrl($returnUrl);
|
||||
}
|
||||
|
|
@ -556,7 +563,6 @@ class memberController extends member
|
|||
// Get user_id information
|
||||
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl);
|
||||
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
|
||||
// Call a trigger after successfully log-in (after)
|
||||
$trigger_output = ModuleHandler::triggerCall('member.procMemberModifyInfo', 'after', $this->memberInfo);
|
||||
|
|
@ -567,7 +573,8 @@ class memberController extends member
|
|||
$this->add('member_srl', $args->member_srl);
|
||||
$this->setMessage('success_updated');
|
||||
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$this->_clearMemberCache($args->member_srl, $site_module_info->site_srl);
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberInfo');
|
||||
$this->setRedirectUrl($returnUrl);
|
||||
|
|
@ -645,8 +652,6 @@ class memberController extends member
|
|||
// Return success message
|
||||
$this->setMessage('success_leaved');
|
||||
|
||||
$this->_clearMemberCache($member_srl);
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', '');
|
||||
$this->setRedirectUrl($returnUrl);
|
||||
}
|
||||
|
|
@ -1099,7 +1104,8 @@ class memberController extends member
|
|||
if(!$output->toBool()) return $this->stop($output->getMessage());
|
||||
// Remove all values having the member_srl from authentication table
|
||||
executeQuery('member.deleteAuthMail',$args);
|
||||
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
|
||||
// Notify the result
|
||||
|
|
@ -1300,7 +1306,6 @@ class memberController extends member
|
|||
list($args->email_id, $args->email_host) = explode('@', $newEmail);
|
||||
|
||||
$output = executeQuery('member.updateMemberEmailAddress', $args);
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $this->stop($output->getMessage());
|
||||
|
|
@ -1419,7 +1424,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.deleteMembersGroup', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
$this->setMessage('success_deleted');
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
$this->_clearMemberCache($args->member_srl, $site_module_info->site_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1514,7 +1519,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.addMemberToGroup',$args);
|
||||
$output2 = ModuleHandler::triggerCall('member.addMemberToGroup', 'after', $args);
|
||||
|
||||
$this->_clearMemberCache($member_srl);
|
||||
$this->_clearMemberCache($member_srl, $site_srl);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
|
@ -1554,7 +1559,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.addMemberToGroup', $obj);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->_clearMemberCache($obj->member_srl);
|
||||
$this->_clearMemberCache($obj->member_srl, $args->site_srl);
|
||||
}
|
||||
|
||||
return new Object();
|
||||
|
|
@ -1728,12 +1733,13 @@ class memberController extends member
|
|||
return new Object(-1,'msg_user_denied');
|
||||
}
|
||||
// Notify if denied_date is less than the current time
|
||||
if($this->memberInfo->limit_date && substr($this->memberInfo->limit_date,0,8) >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($this->memberInfo->limit_date,"Y-m-d")));
|
||||
if($this->memberInfo->limit_date && substr($this->memberInfo->limit_date,0,8) >= date("Ymd")) return new Object(-9,sprintf(Context::getLang('msg_user_limited'),zdate($this->memberInfo->limit_date,"Y-m-d")));
|
||||
// Update the latest login time
|
||||
$args->member_srl = $this->memberInfo->member_srl;
|
||||
$output = executeQuery('member.updateLastLogin', $args);
|
||||
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$this->_clearMemberCache($args->member_srl, $site_module_info->site_srl);
|
||||
|
||||
// Check if there is recoding table.
|
||||
$oDB = &DB::getInstance();
|
||||
|
|
@ -1957,7 +1963,8 @@ class memberController extends member
|
|||
return new Object(-1,'denied_nick_name');
|
||||
}
|
||||
$member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name);
|
||||
if($member_srl) return new Object(-1,'msg_exists_nick_name');
|
||||
$member_srl_by_decode = $oMemberModel->getMemberSrlByNickName(utf8_decode($args->nick_name));
|
||||
if($member_srl || $member_srl_by_decode) return new Object(-1,'msg_exists_nick_name');
|
||||
|
||||
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address);
|
||||
if($member_srl) return new Object(-1,'msg_exists_email_address');
|
||||
|
|
@ -2113,6 +2120,10 @@ class memberController extends member
|
|||
{
|
||||
return new Object(-1, 'denied_nick_name');
|
||||
}
|
||||
|
||||
$member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name);
|
||||
$member_srl_by_decode = $oMemberModel->getMemberSrlByNickName(utf8_decode($args->nick_name));
|
||||
if(($member_srl || $member_srl_by_decode) && $orgMemberInfo->nick_name != $args->nick_name) return new Object(-1,'msg_exists_nick_name');
|
||||
|
||||
list($args->email_id, $args->email_host) = explode('@', $args->email_address);
|
||||
// Website, blog, checks the address
|
||||
|
|
@ -2193,7 +2204,7 @@ class memberController extends member
|
|||
$oDB->commit();
|
||||
|
||||
//remove from cache
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
$this->_clearMemberCache($args->member_srl, $args->site_srl);
|
||||
|
||||
// Save Session
|
||||
if(!$this->memberInfo) $this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl);
|
||||
|
|
@ -2687,6 +2698,13 @@ class memberController extends member
|
|||
$object_key = 'member_groups:' . getNumberingPath($member_srl) . $member_srl . '_' . $site_srl;
|
||||
$cache_key = $oCacheHandler->getGroupKey('member', $object_key);
|
||||
$oCacheHandler->delete($cache_key);
|
||||
|
||||
if($site_srl !== 0)
|
||||
{
|
||||
$object_key = 'member_groups:' . getNumberingPath($member_srl) . $member_srl . '_0';
|
||||
$cache_key = $oCacheHandler->getGroupKey('member', $object_key);
|
||||
$oCacheHandler->delete($cache_key);
|
||||
}
|
||||
}
|
||||
|
||||
$oCacheHandler = CacheHandler::getInstance('object');
|
||||
|
|
|
|||
|
|
@ -415,8 +415,17 @@ class memberView extends member
|
|||
$config = $this->member_config;
|
||||
Context::set('identifier', $config->identifier);
|
||||
|
||||
$XE_VALIDATOR_MESSAGE = Context::get('XE_VALIDATOR_MESSAGE');
|
||||
$XE_VALIDATOR_ERROR = Context::get('XE_VALIDATOR_ERROR');
|
||||
if($XE_VALIDATOR_ERROR == -11)
|
||||
Context::set('XE_VALIDATOR_MESSAGE', $XE_VALIDATOR_MESSAGE . $config->limit_day_description);
|
||||
|
||||
if($XE_VALIDATOR_ERROR < -10 && $XE_VALIDATOR_ERROR > -21)
|
||||
Context::set('referer_url', '/');
|
||||
else
|
||||
Context::set('referer_url', htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_COMPAT | ENT_HTML401, 'UTF-8', false));
|
||||
|
||||
// Set a template file
|
||||
Context::set('referer_url', htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_COMPAT | ENT_HTML401, 'UTF-8', false));
|
||||
$this->setTemplateFile('login_form');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/default/find_member_account/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form action="/" method="get" ruleset="findAccount">
|
||||
<form action="{getUrl('')}" method="get" ruleset="findAccount">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="act" value="procMemberFindAccount" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
<h1><i class="icon-user"></i> {$lang->cmd_login}</h1>
|
||||
</div>
|
||||
<div class="login-body">
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/default/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="@login" action="./" method="post" id="fo_member_login">
|
||||
<form ruleset="@login" action="{getUrl('')}" method="post" id="fo_member_login">
|
||||
<input type="hidden" name="success_return_url" value="{$referer_url}" />
|
||||
<input type="hidden" name="act" value="procMemberLogin" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skin/default/1" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<fieldset>
|
||||
<div class="control-group">
|
||||
<input type="text" cond="$identifier == 'user_id'" name="user_id" id="uid" required placeholder="{$lang->user_id}" title="{$lang->user_id}" />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<include target="./common_header.html" />
|
||||
<h1>{$member_title = $lang->cmd_modify_member_password}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/default/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="modifyPassword" id="fo_insert_member" action="./" method="post">
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
<!--%load_js_plugin("ui.datepicker")-->
|
||||
<include target="./common_header.html" />
|
||||
<h1 style="border-bottom:1px solid #ccc">{$lang->cmd_signup}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/default/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="@insertMember" id="fo_insert_member" action="./" method="post" enctype="multipart/form-data" class="form-horizontal">
|
||||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/default/1" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="agreement" cond="$member_config->agreement">
|
||||
<div class="text">
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
<div class="x_controls">
|
||||
<input type="number" min="0" id="limit_day" name="limit_day" value="{$config->limit_day}" /> {$lang->unit_day}
|
||||
<p class="x_help-block">{$lang->about_limit_day}</p>
|
||||
<input type="text" name="limit_day_description" value="{$config->limit_day_description}" placeholder="{$lang->limit_day_description}" style="width:90%" class="lang_code" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
|
|
|
|||
|
|
@ -1877,11 +1877,9 @@ class menuAdminController extends menu
|
|||
$url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url);
|
||||
if(preg_match('/^([0-9a-zA-Z\_\-]+)$/', $node->url))
|
||||
{
|
||||
$href = getSiteUrl($domain, '','mid',$node->url);
|
||||
$pos = strpos($href, $_SERVER['HTTP_HOST']);
|
||||
if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST']));
|
||||
$href = "getSiteUrl('$domain', '','mid','$node->url')";
|
||||
}
|
||||
else $href = $url;
|
||||
else $href = sprintf('"%s"', $url);
|
||||
$is_shortcut = $node->is_shortcut;
|
||||
$open_window = $node->open_window;
|
||||
$expand = $node->expand;
|
||||
|
|
@ -1912,7 +1910,7 @@ class menuAdminController extends menu
|
|||
if($group_srls)$group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s))))||($is_logged&&%s))',$group_srls,$group_srls == -1?1:0);
|
||||
else $group_check_code = "true";
|
||||
$attribute = sprintf(
|
||||
'node_srl="%s" parent_srl="%s" menu_name_key=\'%s\' text="<?php if(%s) { %s }?>" url="<?php print(%s?"%s":"")?>" href="<?php print(%s?"%s":"")?>" is_shortcut="%s" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" link="<?php if(%s) {?>%s<?php }?>"',
|
||||
'node_srl="%s" parent_srl="%s" menu_name_key=\'%s\' text="<?php if(%s) { %s }?>" url="<?php print(%s?"%s":"")?>" href="<?php print(%s?%s:"")?>" is_shortcut="%s" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" link="<?php if(%s) {?>%s<?php }?>"',
|
||||
$menu_item_srl,
|
||||
$node->parent_srl,
|
||||
addslashes($node->name),
|
||||
|
|
@ -1980,11 +1978,9 @@ class menuAdminController extends menu
|
|||
$url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url);
|
||||
if(preg_match('/^([0-9a-zA-Z\_\-]+)$/i', $node->url))
|
||||
{
|
||||
$href = getSiteUrl($domain, '','mid',$node->url);
|
||||
$pos = strpos($href, $_SERVER['HTTP_HOST']);
|
||||
if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST']));
|
||||
$href = "getSiteUrl('$domain', '','mid','$node->url')";
|
||||
}
|
||||
else $href = $url;
|
||||
else $href = sprintf('"%s"', $url);
|
||||
$is_shortcut = $node->is_shortcut;
|
||||
$open_window = $node->open_window;
|
||||
$normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->normal_btn);
|
||||
|
|
@ -2029,7 +2025,7 @@ class menuAdminController extends menu
|
|||
}
|
||||
// Create properties (check if it belongs to the menu node by url_list. It looks a trick but fast and powerful)
|
||||
$attribute = sprintf(
|
||||
'"node_srl"=>"%s","parent_srl"=>"%s","menu_name_key"=>\'%s\',"isShow"=>(%s?true:false),"text"=>(%s?$_menu_names[%d][$lang_type]:""),"href"=>(%s?"%s":""),"url"=>(%s?"%s":""),"is_shortcut"=>"%s","open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s), "link"=>(%s? ( array(%s)&&in_array(Context::get("mid"),array(%s)) ?%s:%s):""),',
|
||||
'"node_srl"=>"%s","parent_srl"=>"%s","menu_name_key"=>\'%s\',"isShow"=>(%s?true:false),"text"=>(%s?$_menu_names[%d][$lang_type]:""),"href"=>(%s?%s:""),"url"=>(%s?"%s":""),"is_shortcut"=>"%s","open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s), "link"=>(%s? ( array(%s)&&in_array(Context::get("mid"),array(%s)) ?%s:%s):""),',
|
||||
$node->menu_item_srl,
|
||||
$node->parent_srl,
|
||||
addslashes($node->name),
|
||||
|
|
|
|||
|
|
@ -349,6 +349,7 @@ class menuAdminModel extends menu
|
|||
foreach($_allModules as $module_name)
|
||||
{
|
||||
$module = $oModuleModel->getModuleInfoXml($module_name);
|
||||
if(!isset($module)) continue;
|
||||
$defaultSkin = $oModuleModel->getModuleDefaultSkin($module_name, 'P');
|
||||
$defaultMobileSkin = $oModuleModel->getModuleDefaultSkin($module_name, 'M');
|
||||
$skinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($module_name), $defaultSkin);
|
||||
|
|
|
|||
|
|
@ -402,6 +402,9 @@ class moduleModel extends module
|
|||
}
|
||||
else $module_info = $mid_info;
|
||||
|
||||
$oModuleController = getController('module');
|
||||
if(isset($module_info->browser_title)) $oModuleController->replaceDefinedLangCode($module_info->browser_title);
|
||||
|
||||
return $this->addModuleExtraVars($module_info);
|
||||
}
|
||||
|
||||
|
|
@ -782,6 +785,7 @@ class moduleModel extends module
|
|||
if(!$module_info->category) $module_info->category = 'service';
|
||||
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$module_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$author_obj = new stdClass();
|
||||
$author_obj->name = $xml_obj->author->name->body;
|
||||
$author_obj->email_address = $xml_obj->author->attrs->email_address;
|
||||
$author_obj->homepage = $xml_obj->author->attrs->link;
|
||||
|
|
@ -1498,6 +1502,7 @@ class moduleModel extends module
|
|||
$info = $this->getModuleInfoXml($module_name);
|
||||
unset($obj);
|
||||
|
||||
if(!isset($info)) continue;
|
||||
$info->module = $module_name;
|
||||
$info->created_table_count = $created_table_count;
|
||||
$info->table_count = $table_count;
|
||||
|
|
|
|||
|
|
@ -6,117 +6,117 @@
|
|||
|
||||
/* 모듈 생성 후 */
|
||||
function completeInsertPage(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
|
||||
alert(message);
|
||||
alert(message);
|
||||
|
||||
var url = '';
|
||||
if(location.href.getQuery('module')=='admin') {
|
||||
url = current_url.setQuery('module_srl',module_srl).setQuery('act','dispPageAdminInfo');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
} else {
|
||||
url = current_url;
|
||||
}
|
||||
var url = '';
|
||||
if(location.href.getQuery('module')=='admin') {
|
||||
url = current_url.setQuery('module_srl',module_srl).setQuery('act','dispPageAdminInfo');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
} else {
|
||||
url = current_url;
|
||||
}
|
||||
|
||||
location.href = url;
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeArticleDocumentInserted(ret_obj){
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
var mid = ret_obj['mid'];
|
||||
var mid = ret_obj['mid'];
|
||||
var is_mobile = ret_obj['is_mobile'];
|
||||
|
||||
alert(message);
|
||||
alert(message);
|
||||
|
||||
var url = '';
|
||||
var url = '';
|
||||
|
||||
if(is_mobile == 'Y')
|
||||
url = current_url.setQuery('act', 'dispPageAdminMobileContent').setQuery('mid', mid);
|
||||
url = current_url.setQuery('act', 'dispPageAdminMobileContent').setQuery('mid', mid);
|
||||
else
|
||||
url = current_url.setQuery('act', 'dispPageIndex').setQuery('mid', mid);
|
||||
url = current_url.setQuery('act', 'dispPageIndex').setQuery('mid', mid);
|
||||
|
||||
|
||||
location.href = url;
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 내용 저장 후 */
|
||||
function completeInsertPageContent(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var mid = ret_obj['mid'];
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var mid = ret_obj['mid'];
|
||||
|
||||
location.href = current_url.setQuery('mid',mid).setQuery('act','');
|
||||
location.href = current_url.setQuery('mid',mid).setQuery('act','');
|
||||
}
|
||||
|
||||
function completeInsertMobilePageContent(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var mid = ret_obj['mid'];
|
||||
var page = ret_obj['page'];
|
||||
var module_srl = ret_obj['module_srl'];
|
||||
var mid = ret_obj['mid'];
|
||||
|
||||
location.href = current_url.setQuery('mid',mid).setQuery('act','dispPageAdminMobileContent');
|
||||
location.href = current_url.setQuery('mid',mid).setQuery('act','dispPageAdminMobileContent');
|
||||
}
|
||||
|
||||
/* 수정한 페이지 컨텐츠를 저장 */
|
||||
function doSubmitPageContent(fo_obj) {
|
||||
var html = getWidgetContent();
|
||||
fo_obj.content.value = html;
|
||||
return procFilter(fo_obj, insert_page_content);
|
||||
var html = getWidgetContent();
|
||||
fo_obj.content.value = html;
|
||||
return procFilter(fo_obj, insert_page_content);
|
||||
}
|
||||
|
||||
function doSubmitMPageContent(fo_obj) {
|
||||
var html = getWidgetContent();
|
||||
fo_obj.content.value = html;
|
||||
return procFilter(fo_obj, insert_mpage_content);
|
||||
var html = getWidgetContent();
|
||||
fo_obj.content.value = html;
|
||||
return procFilter(fo_obj, insert_mpage_content);
|
||||
}
|
||||
|
||||
/* 모듈 삭제 후 */
|
||||
function completeDeletePage(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var page = ret_obj['page'];
|
||||
alert(message);
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var page = ret_obj['page'];
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('act','dispPageAdminContent').setQuery('module_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
var url = current_url.setQuery('act','dispPageAdminContent').setQuery('module_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
location.href = url;
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 위젯 재컴파일 */
|
||||
function doRemoveWidgetCache(module_srl) {
|
||||
var params = new Array();
|
||||
params["module_srl"] = module_srl;
|
||||
exec_xml('page', 'procPageAdminRemoveWidgetCache', params, completeRemoveWidgetCache);
|
||||
var params = new Array();
|
||||
params["module_srl"] = module_srl;
|
||||
exec_xml('page', 'procPageAdminRemoveWidgetCache', params, completeRemoveWidgetCache);
|
||||
}
|
||||
|
||||
function completeRemoveWidgetCache(ret_obj) {
|
||||
var message = ret_obj['message'];
|
||||
location.reload();
|
||||
var message = ret_obj['message'];
|
||||
location.reload();
|
||||
}
|
||||
|
||||
/* 일괄 설정 */
|
||||
function doCartSetup(url) {
|
||||
var module_srl = new Array();
|
||||
jQuery('#fo_list input[name=cart]:checked').each(function() {
|
||||
module_srl[module_srl.length] = jQuery(this).val();
|
||||
});
|
||||
var module_srl = new Array();
|
||||
jQuery('#fo_list input[name=cart]:checked').each(function() {
|
||||
module_srl[module_srl.length] = jQuery(this).val();
|
||||
});
|
||||
|
||||
if(module_srl.length<1) return;
|
||||
if(module_srl.length<1) return;
|
||||
|
||||
url += "&module_srls="+module_srl.join(',');
|
||||
popopen(url,'modulesSetup');
|
||||
url += "&module_srls="+module_srl.join(',');
|
||||
popopen(url,'modulesSetup');
|
||||
}
|
||||
|
||||
jQuery(function($){
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ class pointController extends point
|
|||
// If there are comment points, attempt to deduct
|
||||
if($comment_point>0) return new Object();
|
||||
// Get all the comments related to this post
|
||||
$cp_args = new stdClass();
|
||||
$cp_args->document_srl = $document_srl;
|
||||
$output = executeQueryArray('point.getCommentUsers', $cp_args);
|
||||
// Return if there is no object
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@
|
|||
<option value="Y" selected="selected"|cond="$is_admin=='Y'">{$lang->is_admin}</option>
|
||||
</select>
|
||||
<select name="selected_group_srl" style="width:auto;margin:0" title="{$lang->member_group}">
|
||||
<option value="0">{$lang->member_group}</option>
|
||||
<option loop="$group_list => $key,$val" value="{$val->group_srl}" selected="selected"|cond="$selected_group_srl==$val->group_srl">{$val->title}</option>
|
||||
</select>
|
||||
<select name="search_target" style="width:auto;margin:0" title="{$lang->search_target}">
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ class pollModel extends poll
|
|||
$poll->poll_count = (int)$output->data->poll_count;
|
||||
$poll->stop_date = $output->data->stop_date;
|
||||
|
||||
$columnList = array('poll_index_srl', 'checkcount', 'poll_count');
|
||||
$columnList = array('poll_index_srl', 'title', 'checkcount', 'poll_count');
|
||||
$output = executeQuery('poll.getPollTitle', $args, $columnList);
|
||||
if(!$output->data) return;
|
||||
if(!is_array($output->data)) $output->data = array($output->data);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
<action name="procTrashAdminEmptyTrash" type="controller" ruleset="emptyTrash" />
|
||||
<action name="procTrashAdminRestore" type="controller" />
|
||||
<action name="procTrashAdminGetList" type="controller" />
|
||||
|
||||
<action name="dispTrashAdminView" type="view" />
|
||||
</actions>
|
||||
<menus>
|
||||
<menu name="trash">
|
||||
|
|
|
|||
|
|
@ -83,4 +83,36 @@
|
|||
<value xml:lang="en"><![CDATA[Remove all trash items. After execute could not be recovered.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ゴミ箱を完全に消去します。実行後には復元できません。]]></value>
|
||||
</item>
|
||||
<item name="title">
|
||||
<value xml:lang="ko"><![CDATA[제목]]></value>
|
||||
<value xml:lang="en"><![CDATA[Subject]]></value>
|
||||
<value xml:lang="jp"><![CDATA[タイトル]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[標題]]></value>
|
||||
</item>
|
||||
<item name="content">
|
||||
<value xml:lang="ko"><![CDATA[내용]]></value>
|
||||
<value xml:lang="en"><![CDATA[Content]]></value>
|
||||
<value xml:lang="jp"><![CDATA[内容]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[內容]]></value>
|
||||
</item>
|
||||
<item name="trasher">
|
||||
<value xml:lang="ko"><![CDATA[삭제자]]></value>
|
||||
<value xml:lang="en"><![CDATA[Deleter]]></value>
|
||||
<value xml:lang="jp"><![CDATA[削除者]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[刪除]]></value>
|
||||
</item>
|
||||
<item name="origin_info">
|
||||
<value xml:lang="ko"><![CDATA[원문 정보]]></value>
|
||||
<value xml:lang="en"><![CDATA[Document Info]]></value>
|
||||
</item>
|
||||
<item name="delete_info">
|
||||
<value xml:lang="ko"><![CDATA[삭제 정보]]></value>
|
||||
<value xml:lang="en"><![CDATA[Trash Info]]></value>
|
||||
</item>
|
||||
<item name="cmd_restore">
|
||||
<value xml:lang="ko"><![CDATA[복원]]></value>
|
||||
<value xml:lang="en"><![CDATA[Restore]]></value>
|
||||
<value xml:lang="jp"><![CDATA[復元]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[復原]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ class TrashVO
|
|||
var $title;
|
||||
var $originModule;
|
||||
var $serializedObject;
|
||||
var $unserializedObject;
|
||||
var $description;
|
||||
var $ipaddress;
|
||||
var $removerSrl;
|
||||
|
|
@ -47,6 +48,14 @@ class TrashVO
|
|||
{
|
||||
$this->serializedObject = $serializedObject;
|
||||
}
|
||||
function getUnserializedObject()
|
||||
{
|
||||
return $this->unserializedObject;
|
||||
}
|
||||
function setUnserializedObject($serializedObject)
|
||||
{
|
||||
$this->unserializedObject = unserialize($serializedObject);
|
||||
}
|
||||
function getDescription()
|
||||
{
|
||||
return htmlspecialchars($this->description, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
|
|
|
|||
32
modules/trash/queries/getDocumentExtraVars.xml
Normal file
32
modules/trash/queries/getDocumentExtraVars.xml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<query id="getDocumentExtraVars" action="select">
|
||||
<tables>
|
||||
<table name="document_extra_keys" alias="extra_keys" />
|
||||
<table name="document_extra_vars" alias="extra_vars" type="left join">
|
||||
<conditions>
|
||||
<condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" />
|
||||
<condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" />
|
||||
</conditions>
|
||||
</table>
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="extra_keys.module_srl" alias="module_srl" />
|
||||
<column name="extra_keys.var_name" alias="name" />
|
||||
<column name="extra_keys.var_type" alias="type" />
|
||||
<column name="extra_keys.var_is_required" alias="is_required" />
|
||||
<column name="extra_keys.var_search" alias="search" />
|
||||
<column name="extra_keys.var_default" alias="default" />
|
||||
<column name="extra_keys.var_desc" alias="desc" />
|
||||
<column name="extra_keys.var_idx" alias="idx" />
|
||||
<column name="extra_vars.document_srl" alias="document_srl" />
|
||||
<column name="extra_vars.lang_code" alias="lang_code" />
|
||||
<column name="extra_vars.value" alias="value" />
|
||||
<column name="extra_keys.eid" alias="eid" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="extra_keys.module_srl" var="module_srl" />
|
||||
<condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="extra_keys.var_idx" order="asc" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
@ -41,7 +41,12 @@ var no_text_comment = '{$lang->no_text_comment}';
|
|||
<tr loop="$trash_list => $no, $oTrashVO">
|
||||
<td class="title">
|
||||
<strong cond="!trim($oTrashVO->getTitle()) && $oTrashVO->getOriginModule() == 'comment'">{$lang->no_text_comment}</strong>
|
||||
<block cond="trim($oTrashVO->getTitle())">{$oTrashVO->getTitle()}</block>
|
||||
<block cond="trim($oTrashVO->getTitle())">
|
||||
<block cond="isset($module_list[$oTrashVO->unserializedObject['module_srl']])">
|
||||
<a href="{getUrl('', 'mid', $module_list[$oTrashVO->unserializedObject['module_srl']]->mid)}" target="_blank">{$module_list[$oTrashVO->unserializedObject['module_srl']]->browser_title}</a> -
|
||||
</block>
|
||||
<a href="{getUrl('act','dispTrashAdminView','trash_srl',$oTrashVO->getTrashSrl())}">{$oTrashVO->getTitle()}</a>
|
||||
</block>
|
||||
</td>
|
||||
<td class="nowr"><!--@if($oTrashVO->getOriginModule() == 'document')-->{$lang->document}<!--@else-->{$lang->comment}<!--@end--></td>
|
||||
<td class="nowr"><a href="#popup_menu_area" class="member_{$oTrashVO->getRemoverSrl()}">{$oTrashVO->getNickName()}</a></td>
|
||||
|
|
|
|||
73
modules/trash/tpl/trash_view.html
Normal file
73
modules/trash/tpl/trash_view.html
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<div class="x_page-header">
|
||||
<h1>{$lang->cmd_trash} {$lang->trash_description}</h1>
|
||||
</div>
|
||||
<h2>{$lang->delete_info}</h2>
|
||||
<table class="x_table x_table-striped x_table-hover">
|
||||
<col width="120">
|
||||
<tr>
|
||||
<th scope="col" class="nowr">{$lang->trasher}</th>
|
||||
<td>
|
||||
{htmlspecialchars($remover_info->nick_name)} <a href="#popup_menu_area" class="member_{$oTrashVO->getRemoverSrl()}" onclick="return false">[{$remover_info->user_id}]</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col" class="nowr">{$lang->trash_date}</th>
|
||||
<td>{zdate($oTrashVO->getRegdate(), "Y-m-d H:i:s")}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->trash_description}</th>
|
||||
<td class="text">{$oTrashVO->getDescription()}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<h2>{$lang->origin_info}</h2>
|
||||
<table class="x_table x_table-striped x_table-hover">
|
||||
<col width="120">
|
||||
<tr>
|
||||
<th scope="row">{$lang->module}</th>
|
||||
<td class="text">
|
||||
{$module_info->browser_title} ({$module_info->mid})
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->title}</th>
|
||||
<td class="text">{$oOrigin->title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->writer}</th>
|
||||
<td class="text">{htmlspecialchars($oOrigin->nick_name)} <a href="#popup_menu_area" class="member_{$oOrigin->member_srl}" onclick="return false">[{$oOrigin->user_id}]</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->regdate}</th>
|
||||
<td class="text">{zdate($oOrigin->regdate,'Y.m.d H:i:s')}</td>
|
||||
</tr>
|
||||
<block loop="$oOriginExtraVars=>$key,$val">
|
||||
<tr><th>{$val->name}</th>
|
||||
<td>{$val->value}</td>
|
||||
</tr>
|
||||
</block>
|
||||
|
||||
<tr>
|
||||
<th scope="row">{$lang->content}</th>
|
||||
<td class="text">{$oOrigin->content}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<form action="./" method="post">
|
||||
<input type="hidden" name="module" value="trash" />
|
||||
<input type="hidden" name="act" value="procTrashAdminEmptyTrash" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="is_all" value="false" />
|
||||
<input type="hidden" name="origin_module" value="{$oTrashVO->getOriginModule()}" />
|
||||
|
||||
<input type="hidden" name="cart[]" value="{$oTrashVO->getTrashSrl()}" />
|
||||
|
||||
<div class="x_pull-left"><button class="x_btn" type="button" onclick="history.go(-1)">{$lang->cmd_list}</button></div>
|
||||
|
||||
<div class="x_pull-right">
|
||||
<button type="submit" name="is_all" class="x_btn" value="false">{$lang->cmd_delete}</button>
|
||||
<button type="submit" name="act" class="x_btn x_btn-primary" value="procTrashAdminRestore">{$lang->cmd_restore}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
|
@ -48,9 +48,69 @@ class trashAdminView extends trash
|
|||
Context::set('page', $output->page);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$oModuleModel = getModel('module');
|
||||
$module_list = array();
|
||||
$mod_srls = array();
|
||||
foreach($output->data as $oTrashVO)
|
||||
{
|
||||
$mod_srls[] = $oTrashVO->unserializedObject['module_srl'];
|
||||
}
|
||||
$mod_srls = array_unique($mod_srls);
|
||||
// Module List
|
||||
$mod_srls_count = count($mod_srls);
|
||||
if($mod_srls_count)
|
||||
{
|
||||
$columnList = array('module_srl', 'mid', 'browser_title');
|
||||
$module_output = $oModuleModel->getModulesInfo($mod_srls, $columnList);
|
||||
if($module_output && is_array($module_output))
|
||||
{
|
||||
foreach($module_output as $module)
|
||||
{
|
||||
$module_list[$module->module_srl] = $module;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Context::set('module_list', $module_list);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('trash_list');
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Trash View - sejin7940
|
||||
function dispTrashAdminView()
|
||||
{
|
||||
$trash_srl = Context::get('trash_srl');
|
||||
|
||||
$oTrashModel = getModel('trash');
|
||||
$output = $oTrashModel->getTrash($trash_srl);
|
||||
if(!$output->data->getTrashSrl()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$originObject = unserialize($output->data->getSerializedObject());
|
||||
if(is_array($originObject)) $originObject = (object)$originObject;
|
||||
|
||||
Context::set('oTrashVO',$output->data);
|
||||
Context::set('oOrigin',$originObject);
|
||||
|
||||
$oMemberModel = &getModel('member');
|
||||
$remover_info = $oMemberModel->getMemberInfoByMemberSrl($output->data->getRemoverSrl());
|
||||
Context::set('remover_info', $remover_info);
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($originObject->module_srl);
|
||||
Context::set('module_info', $module_info);
|
||||
|
||||
if($originObject) {
|
||||
$args_extra->module_srl = $originObject->module_srl;
|
||||
$args_extra->document_srl = $originObject->document_srl;
|
||||
$output_extra = executeQueryArray('trash.getDocumentExtraVars', $args_extra);
|
||||
Context::set('oOriginExtraVars',$output_extra->data);
|
||||
}
|
||||
$this->setTemplateFile('trash_view');
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file trash.admin.view.php */
|
||||
/* Location: ./modules/trash/trash.admin.view.php */
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ class trashModel extends trash
|
|||
$oTrashVO->setTitle($stdObject->title);
|
||||
$oTrashVO->setOriginModule($stdObject->origin_module);
|
||||
$oTrashVO->setSerializedObject($stdObject->serialized_object);
|
||||
$oTrashVO->setUnserializedObject($stdObject->serialized_object);
|
||||
$oTrashVO->setDescription($stdObject->description);
|
||||
$oTrashVO->setIpaddress($stdObject->ipaddress);
|
||||
$oTrashVO->setRemoverSrl($stdObject->remover_srl);
|
||||
|
|
|
|||
|
|
@ -443,6 +443,17 @@ Sin la necesidad de utilizar los módulos de página o del diseño de XE, Usted
|
|||
<value xml:lang="tr"><![CDATA[Widget Boyutu]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Kích thước]]></value>
|
||||
</item>
|
||||
<item name="cmd_widget_css_class">
|
||||
<value xml:lang="ko"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="en"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="jp"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="fr"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="es"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="tr"><![CDATA[위젯 CSS class]]></value>
|
||||
<value xml:lang="vi"><![CDATA[위젯 CSS class]]></value>
|
||||
</item>
|
||||
<item name="cmd_widget_align">
|
||||
<value xml:lang="ko"><![CDATA[위젯 정렬]]></value>
|
||||
<value xml:lang="en"><![CDATA[Align Widget]]></value>
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@
|
|||
height: 14px;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
background: transparent url("../../../admin/tpl/img/glyphicons-halflings.png") no-repeat;
|
||||
}
|
||||
.widgetButtons .widgetSetup {
|
||||
|
|
|
|||
2
modules/widget/tpl/css/widget.min.css
vendored
2
modules/widget/tpl/css/widget.min.css
vendored
|
|
@ -1 +1 @@
|
|||
@charset "utf-8";.widget_title{margin:10px 5px 5px 0;padding:3px;border:1px solid #ddd}.widget_mid_list{margin:0 0 5px 10px}.widget_description{margin:5px 0 0;padding:5px 0 0;border-top:1px dotted #eee;color:#aaa}#colorset_area{margin-top:.5em}#colorset_area .header{float:left;margin-right:.5em;padding-top:.2em}#colorset_area .footer{float:left}#zonePageContent{overflow:hidden;margin:0!important;padding:0!important;width:100%}.pageAddContent{width:700px}.widgetOutput{float:left;z-index:998;position:relative;overflow:hidden;width:100%;min-height:24px;cursor:move}.widgetOutput .widgetBorder,.widgetOutput .widgetBoxBorder{z-index:999;box-sizing:border-box;height:100%;min-height:24px;border:1px dashed #ccc}.widgetOutput .widgetResize{z-index:1000;position:absolute;bottom:1px;right:1px;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize.gif) no-repeat left bottom}.widgetOutput .widgetResizeLeft{height:12px;bottom:1px;position:absolute;border:0;width:12px;z-index:1000;left:1px;cursor:pointer;background:transparent url(../images/btn_resize_left.gif) no-repeat left bottom}.widgetOutput .widgetBoxResize{z-index:1000;position:absolute;right:1px;bottom:1px;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize.gif) no-repeat left bottom}.widgetOutput .widgetBoxResizeLeft{z-index:1000;position:absolute;left:1px;bottom:0;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize_left.gif) no-repeat left bottom}.widgetButtons{float:left;z-index:1000;visibility:hidden;position:absolute;top:0;overflow:hidden;padding:0 10px;line-height:24px;box-shadow:0 0 3px #333 inset;*zoom:1}.widgetButtons#widgetButton{left:0;background-color:#C7DBE9}.widgetButtons#widgetBoxButton{right:0;background-color:#D2E9C7}.widgetButtons>button{z-index:99;padding:14px 0 0;overflow:hidden;width:14px;height:14px;border:0;cursor:pointer;background:transparent url(../../../admin/tpl/img/glyphicons-halflings.png) no-repeat}.widgetButtons .widgetSetup{background-position:-432px 0}.widgetButtons .widgetBoxSize,.widgetButtons .widgetSize{background-position:-96px -120px}.widgetButtons .widgetStyle{background-position:-456px -144px}.widgetButtons .widgetBoxCopy,.widgetButtons .widgetCopy{background-position:0 -96px}.widgetButtons .widgetBoxRemove,.widgetButtons .widgetRemove{background-position:-456px 0}.help{padding:5px 0;border-top:1px solid #ccc;background-color:#EFEFEF}ul.midCommand{float:left;margin:0 0 0 10px;padding:0;*zoom:1}ul.midCommand li{display:block;margin-bottom:5px;list-style:none}a.widgetStyle{display:inline-block;position:relative;margin:0 10px 10px 0;overflow:hidden;width:96px;height:96px;border:1px solid #fff;text-decoration:none;*zoom:1}a.widgetStyle:hover{border:1px dashed #ccc}a.widgetStyle:hover span{display:none}a.widgetStyle.selected{border:1px dashed #999}a.widgetStyle img{margin:1px;width:96px;height:96px}a.widgetStyle span{display:block;position:absolute;left:0;bottom:0;width:96px;padding:4px 3px 3px;text-align:center;font-family:tahoma;color:#fff;filter:alpha(opacity=80);opacity:.8;background-color:#888}#zonePageContent .widgetContainer{min-height:20px}
|
||||
@charset "utf-8";.widget_title{margin:10px 5px 5px 0;padding:3px;border:1px solid #ddd}.widget_mid_list{margin:0 0 5px 10px}.widget_description{margin:5px 0 0;padding:5px 0 0;border-top:1px dotted #eee;color:#aaa}#colorset_area{margin-top:.5em}#colorset_area .header{float:left;margin-right:.5em;padding-top:.2em}#colorset_area .footer{float:left}#zonePageContent{overflow:hidden;margin:0!important;padding:0!important;width:100%}.pageAddContent{width:700px}.widgetOutput{float:left;z-index:998;position:relative;overflow:hidden;width:100%;min-height:24px;cursor:move}.widgetOutput .widgetBorder,.widgetOutput .widgetBoxBorder{z-index:999;box-sizing:border-box;height:100%;min-height:24px;border:1px dashed #ccc}.widgetOutput .widgetResize{z-index:1000;position:absolute;bottom:1px;right:1px;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize.gif) no-repeat left bottom}.widgetOutput .widgetResizeLeft{height:12px;bottom:1px;position:absolute;border:0;width:12px;z-index:1000;left:1px;cursor:pointer;background:transparent url(../images/btn_resize_left.gif) no-repeat left bottom}.widgetOutput .widgetBoxResize{z-index:1000;position:absolute;right:1px;bottom:1px;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize.gif) no-repeat left bottom}.widgetOutput .widgetBoxResizeLeft{z-index:1000;position:absolute;left:1px;bottom:0;width:12px;height:12px;border:0;cursor:pointer;background:transparent url(../images/btn_resize_left.gif) no-repeat left bottom}.widgetButtons{float:left;z-index:1000;visibility:hidden;position:absolute;top:0;overflow:hidden;padding:0 10px;line-height:24px;box-shadow:0 0 3px #333 inset;*zoom:1}.widgetButtons#widgetButton{left:0;background-color:#C7DBE9}.widgetButtons#widgetBoxButton{right:0;background-color:#D2E9C7}.widgetButtons>button{z-index:99;padding:14px 0 0;overflow:hidden;width:14px;height:14px;border:0;cursor:pointer;vertical-align:middle;background:transparent url(../../../admin/tpl/img/glyphicons-halflings.png) no-repeat}.widgetButtons .widgetSetup{background-position:-432px 0}.widgetButtons .widgetBoxSize,.widgetButtons .widgetSize{background-position:-96px -120px}.widgetButtons .widgetStyle{background-position:-456px -144px}.widgetButtons .widgetBoxCopy,.widgetButtons .widgetCopy{background-position:0 -96px}.widgetButtons .widgetBoxRemove,.widgetButtons .widgetRemove{background-position:-456px 0}.help{padding:5px 0;border-top:1px solid #ccc;background-color:#EFEFEF}ul.midCommand{float:left;margin:0 0 0 10px;padding:0;*zoom:1}ul.midCommand li{display:block;margin-bottom:5px;list-style:none}a.widgetStyle{display:inline-block;position:relative;margin:0 10px 10px 0;overflow:hidden;width:96px;height:96px;border:1px solid #fff;text-decoration:none;*zoom:1}a.widgetStyle:hover{border:1px dashed #ccc}a.widgetStyle:hover span{display:none}a.widgetStyle.selected{border:1px dashed #999}a.widgetStyle img{margin:1px;width:96px;height:96px}a.widgetStyle span{display:block;position:absolute;left:0;bottom:0;width:96px;padding:4px 3px 3px;text-align:center;font-family:tahoma;color:#fff;filter:alpha(opacity=80);opacity:.8;background-color:#888}#zonePageContent .widgetContainer{min-height:20px}
|
||||
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