mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-27 06:13:32 +09:00
commit
1fa4adf054
133 changed files with 1653 additions and 668 deletions
|
|
@ -4,6 +4,8 @@ php:
|
|||
- 5.3
|
||||
- 5.4
|
||||
- 5.5
|
||||
- 5.6
|
||||
- hhvm
|
||||
before_script:
|
||||
- npm install -g grunt-cli
|
||||
- npm install
|
||||
|
|
|
|||
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에 맞지 않는 코드를 발견 하더라도 목적과 관계 없는 코드는 절대 고치지 마세요**
|
||||
25
README.md
25
README.md
|
|
@ -1,12 +1,29 @@
|
|||
# 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)입니다.
|
||||
오픈소스 라이선스로 누구나 사용 또는 개작할 수 있으며, 개방형 프로젝트로서 누구나 개발에 참여할 수 있습니다.
|
||||
|
||||
## Support
|
||||
* 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 2014 NAVER Corp. <http://www.navercorp.com>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
This program 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.
|
||||
|
|
|
|||
|
|
@ -30,6 +30,13 @@ if($_REQUEST['act'] != 'api')
|
|||
// Read func file
|
||||
require_once(_XE_PATH_ . 'addons/blogapi/blogapi.func.php');
|
||||
|
||||
// If HTTP_RAW_POST_DATA is NULL, Print error message
|
||||
if(!$GLOBALS['HTTP_RAW_POST_DATA'])
|
||||
{
|
||||
$content = getXmlRpcFailure(1, 'Invalid Method Call');
|
||||
printContent($content);
|
||||
}
|
||||
|
||||
// xmlprc parsing
|
||||
// Parse the requested xmlrpc
|
||||
$xml = new SimpleXMLElement($GLOBALS['HTTP_RAW_POST_DATA']);
|
||||
|
|
@ -487,7 +494,7 @@ if($called_position == 'before_module_proc')
|
|||
$post = new stdClass();
|
||||
$post->categories = array();
|
||||
$post->dateCreated = date("Ymd", $oDocument->getRegdateTime()) . 'T' . date("H:i:s", $oDocument->getRegdateTime());
|
||||
$post->description = htmlspecialchars($oEditorController->transComponent($oDocument->getContent(false, false, true, false)), ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$post->description = sprintf('<![CDATA[%s]]>',$oEditorController->transComponent($oDocument->getContent(false, false, true, false)));
|
||||
$post->link = $post->permaLink = getFullUrl('', 'document_srl', $oDocument->document_srl);
|
||||
$post->postid = $oDocument->document_srl;
|
||||
$post->title = htmlspecialchars($oDocument->get('title'), ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,11 @@ function getXmlRpcResponse($params)
|
|||
// Encoding
|
||||
function _getEncodedVal($val, $is_sub_set = false)
|
||||
{
|
||||
if(is_int($val))
|
||||
if(preg_match('/^\<\!\[CDATA\[/',$val))
|
||||
{
|
||||
$buff = sprintf("<value>%s</value>", $val);
|
||||
}
|
||||
elseif(is_int($val))
|
||||
{
|
||||
$buff = sprintf("<value><i4>%d</i4></value>", $val);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,11 +9,14 @@ 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);
|
||||
Context::loadFile(array('./common/js/xe.min.js', 'head', NULL, -100000), true);
|
||||
if(Mobile::isFromMobilePhone())
|
||||
{
|
||||
Context::loadFile(array('./common/js/jquery.min.js', 'head', NULL, -100000), true);
|
||||
Context::loadFile(array('./common/js/xe.min.js', 'head', NULL, -100000), true);
|
||||
}
|
||||
|
||||
class AddonCaptcha
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,11 +9,14 @@ 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);
|
||||
Context::loadFile(array('./common/js/xe.min.js', 'head', NULL, -100000), true);
|
||||
if(Mobile::isFromMobilePhone())
|
||||
{
|
||||
Context::loadFile(array('./common/js/jquery.min.js', 'head', NULL, -100000), true);
|
||||
Context::loadFile(array('./common/js/xe.min.js', 'head', NULL, -100000), true);
|
||||
}
|
||||
|
||||
class AddonMemberCaptcha
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -205,6 +205,9 @@ class Context
|
|||
$this->context->lang = &$GLOBALS['lang'];
|
||||
$this->context->_COOKIE = $_COOKIE;
|
||||
|
||||
// 20140429 editor/image_link
|
||||
$this->_checkGlobalVars();
|
||||
|
||||
$this->setRequestMethod('');
|
||||
|
||||
$this->_setXmlRpcArgument();
|
||||
|
|
@ -1115,6 +1118,16 @@ class Context
|
|||
($self->request_method = $_SERVER['REQUEST_METHOD']);
|
||||
}
|
||||
|
||||
/**
|
||||
* handle global arguments
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _checkGlobalVars()
|
||||
{
|
||||
$this->_recursiveCheckVar($_SERVER['HTTP_HOST']);
|
||||
}
|
||||
|
||||
/**
|
||||
* handle request areguments for GET/POST
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
* @author NAVER (developers@xpressengine.com)
|
||||
* @package /classes/httprequest
|
||||
* @version 0.1
|
||||
* @deprecated
|
||||
*/
|
||||
class XEHttpRequest
|
||||
{
|
||||
|
|
@ -24,6 +25,12 @@ class XEHttpRequest
|
|||
*/
|
||||
var $m_port;
|
||||
|
||||
/**
|
||||
* target scheme
|
||||
* @var string
|
||||
*/
|
||||
var $m_scheme;
|
||||
|
||||
/**
|
||||
* target header
|
||||
* @var array
|
||||
|
|
@ -34,10 +41,11 @@ class XEHttpRequest
|
|||
* constructor
|
||||
* @return void
|
||||
*/
|
||||
function XEHttpRequest($host, $port)
|
||||
function XEHttpRequest($host, $port, $scheme='')
|
||||
{
|
||||
$this->m_host = $host;
|
||||
$this->m_port = $port;
|
||||
$this->m_scheme = $scheme;
|
||||
$this->m_headers = array();
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +116,13 @@ class XEHttpRequest
|
|||
{
|
||||
static $crlf = "\r\n";
|
||||
|
||||
$sock = @fsockopen($this->m_host, $this->m_port, $errno, $errstr, $timeout);
|
||||
$scheme = '';
|
||||
if($this->m_scheme=='https')
|
||||
{
|
||||
$scheme = 'ssl://';
|
||||
}
|
||||
|
||||
$sock = @fsockopen($scheme . $this->m_host, $this->m_port, $errno, $errstr, $timeout);
|
||||
if(!$sock)
|
||||
{
|
||||
return new Object(-1, 'socket_connect_failed');
|
||||
|
|
@ -163,7 +177,7 @@ class XEHttpRequest
|
|||
$chunk_size = hexdec(fgets($sock));
|
||||
if($chunk_size)
|
||||
{
|
||||
$body .= fread($sock, $chunk_size);
|
||||
$body .= fgets($sock, $chunk_size+1);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -88,7 +88,11 @@ class ModuleHandler extends Handler
|
|||
{
|
||||
if(Context::get('_use_ssl') == 'optional' && Context::isExistsSSLAction($this->act) && $_SERVER['HTTPS'] != 'on')
|
||||
{
|
||||
header('location:https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
||||
if(Context::get('_https_port')!=null) {
|
||||
header('location:https://' . $_SERVER['HTTP_HOST'] . ':' . Context::get('_https_port') . $_SERVER['REQUEST_URI']);
|
||||
} else {
|
||||
header('location:https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1025,7 +1029,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 +1047,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
2
common/js/x.min.js
vendored
2
common/js/x.min.js
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.2');
|
||||
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')
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ require dirname(__FILE__) . '/config/config.inc.php';
|
|||
* @brief Initialize by creating Context object
|
||||
* Set all Request Argument/Environment variables
|
||||
**/
|
||||
$oContext = &Context::getInstance();
|
||||
$oContext = Context::getInstance();
|
||||
$oContext->init();
|
||||
|
||||
/**
|
||||
|
|
@ -59,8 +59,7 @@ if($oContext->checkSSO())
|
|||
{
|
||||
if($oModuleHandler->init())
|
||||
{
|
||||
$oModule = &$oModuleHandler->procModule();
|
||||
$oModuleHandler->displayContent($oModule);
|
||||
$oModuleHandler->displayContent($oModuleHandler->procModule());
|
||||
}
|
||||
}
|
||||
catch(Exception $e)
|
||||
|
|
|
|||
|
|
@ -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..');
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@
|
|||
</item>
|
||||
<item name="about_site_title">
|
||||
<value xml:lang="ko"><![CDATA[세부 설정에서 사이트제목을 설정하지 않았을 경우 노출되는 제목입니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[세부 설정에서 사이트제목을 설정하지 않았을 경우 노출되는 제목입니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This is the title which is exposed when the site title is not set at detail setting.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[詳細設定でサイトタイトルを設定しなかった場合に表示されるタイトルです。]]></value>
|
||||
</item>
|
||||
<item name="about_start_module">
|
||||
|
|
@ -166,7 +166,7 @@
|
|||
</item>
|
||||
<item name="select_module_instance">
|
||||
<value xml:lang="ko"><![CDATA[페이지 선택]]></value>
|
||||
<value xml:lang="en"><![CDATA[Page]]></value>
|
||||
<value xml:lang="en"><![CDATA[Select Page]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ページ選択]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[Page]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[Page]]></value>
|
||||
|
|
@ -366,7 +366,7 @@
|
|||
</item>
|
||||
<item name="about_default_url">
|
||||
<value xml:lang="ko"><![CDATA[여러 사이트를 운영할 때 기본 URL이 필요합니다. XE 설치 경로를 포함한 URL을 입력하세요. (예: http://도메인/설치경로)]]></value>
|
||||
<value xml:lang="en"><![CDATA[Enter a default URL to be used to control multiple websites, including XE installation path. E.g.) http://domain//installation path)]]></value>
|
||||
<value xml:lang="en"><![CDATA[Enter a default URL to be used to control multiple websites, including XE installation path. E.g.) http://domain//installation path]]></value>
|
||||
<value xml:lang="jp"><![CDATA[複数のサイトを運営する際に基本URLが必要です。XEインストール先を含むURLを入力してください。(例:http://ドメイン/インストール先)]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Birden fazla siteyi işletirken temel bir URL'ye ihtiyaç vardır. XE yükleme route'unu kapsayana bir URL giriniz.(Örneğin: http:// alan adı / yükleme route'u)]]></value>
|
||||
</item>
|
||||
|
|
@ -503,7 +503,7 @@
|
|||
</item>
|
||||
<item name="table_count">
|
||||
<value xml:lang="ko"><![CDATA[테이블 수]]></value>
|
||||
<value xml:lang="en"><![CDATA[Number of Table]]></value>
|
||||
<value xml:lang="en"><![CDATA[The Number of Tables]]></value>
|
||||
<value xml:lang="jp"><![CDATA[テーブル数]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[表格数]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[表格數]]></value>
|
||||
|
|
@ -539,7 +539,7 @@
|
|||
</item>
|
||||
<item name="msg_is_not_administrator">
|
||||
<value xml:lang="ko"><![CDATA[관리자만 접속이 가능합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Administrator Only]]></value>
|
||||
<value xml:lang="en"><![CDATA[Only administrator can access this page.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[管理者のみアクセスできます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[只允许管理员访问]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[只有管理員才可以檢視]]></value>
|
||||
|
|
@ -563,7 +563,7 @@
|
|||
</item>
|
||||
<item name="msg_default_act_is_null">
|
||||
<value xml:lang="ko"><![CDATA[기본 관리자 Action이 지정되어 있지 않아 바로가기 등록을 할 수 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Shortcut could not be registered because the default admin Action is not set.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Shortcut cannot be registered because the default admin Action is not set.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[デフォルトの管理者アクションが指定されていないため、ショートカットを登録することができません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[没有指定默认管理员的动作,是不能添加到快捷菜单的。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[沒有指定預設管理員的動作,是無法新增到快速選單的。]]></value>
|
||||
|
|
@ -575,7 +575,7 @@
|
|||
</item>
|
||||
<item name="welcome_to_xe">
|
||||
<value xml:lang="ko"><![CDATA[XE 관리자]]></value>
|
||||
<value xml:lang="en"><![CDATA[Welcome to the admin page of XE]]></value>
|
||||
<value xml:lang="en"><![CDATA[Welcome to the XE admin page.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[XEの管理者ページです。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[XE 管理页面]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[XE管理頁面]]></value>
|
||||
|
|
@ -587,7 +587,7 @@
|
|||
</item>
|
||||
<item name="about_lang_env">
|
||||
<value xml:lang="ko"><![CDATA[처음 방문하는 사용자들의 언어 설정을 동일하게 하려면, 원하는 언어로 변경 후 아래 [저장] 버튼을 클릭하면 됩니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[To set the selected language as the default language, click the Save button.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If you want to make the language setting same for first-time visitors, change the language setting to what you want and click [Save] button below.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[初めてサイトに訪問したユーザーに、上記での選択言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[可以设置显示给首次访问者的同一语言环境。修改语言环境后请点击 [保存] 按钮进行保存。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[請選擇預設語言。選擇完畢後,請按[儲存]按鈕。]]></value>
|
||||
|
|
@ -700,7 +700,7 @@
|
|||
</item>
|
||||
<item name="about_use_ssl">
|
||||
<value xml:lang="ko"><![CDATA['선택적으로'는 회원가입, 정보수정 등의 지정된 동작(action)에서 보안접속(SSL)을 사용합니다. '항상 사용'은 모든 서비스에 SSL을 사용 합니다. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Select 'Optional' to use SSL for the specified actions such as signing up and changing information. 'Always' to use SSL for all services. SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Selecting 'Optional' is to use SSL for the specified actions such as signing up and changing information. Selecting 'Always' is to use SSL for all services. Please be careful because you may not be avaliable to access to the site if you use SSL where its environment is not set.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[「部分的に使う」は、「会員登録/会員情報変更」など指定されたアクションでSSLを使います。「常に使う」は、すべてのサービスにSSLを使います。SSLサーバ証明書がインストールされてない場合での使用はお控えください。サイトへのアクセスができない場合があります。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中,使用选项应用于所有服务。 SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL功能。 選擇開啟時,所有的服務都會使用 SSL功能。 SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의 바랍니다.]]></value>
|
||||
|
|
@ -743,7 +743,7 @@
|
|||
</item>
|
||||
<item name="about_db_session">
|
||||
<value xml:lang="ko"><![CDATA[인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다. 웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다. 단, 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This setting will use PHP session used for authentication as DB. For the Websites which do not use web server frequently, you can uncheck this setting to improve response time. However, session DB will make it difficult to get current users, so you cannot use related functions.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This setting will use PHP session as DB during authentication. For the Websites which do not use web server frequently, you can uncheck this setting to improve response time. However, session DB will make it impossible to get current users, so you cannot use related functions.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[認証の際に使われるPHPセッションをDBで使う機能です。 ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでサイトのレスポンスが向上されることもあります。 ただし、この機能をオフにすると、「現在ログイン中の会員」の機能を利用できなくなります。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[用DB储存认证时的PHP会话。 服务器使用率较少的网站建议不要勾选此项(可提高网站访问速度)。 只是无法统计在线会员。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[使用 PHP session進行 DB認證。 關閉此功能對於負荷較低的網站可提高效率。 使用此功能會無法統計線上人數。]]></value>
|
||||
|
|
@ -790,7 +790,7 @@
|
|||
</item>
|
||||
<item name="msg_find_xe_path_fail">
|
||||
<value xml:lang="ko"><![CDATA[XE 설치 경로를 자동으로 찾지 못하였습니다. 수동 설정해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Failed to search XE installed path. Please set manually.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Failed to search XE installed path automatically. Please set manually.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[XEのインストル先が見つかりませんでした。手動で設定してください。]]></value>
|
||||
</item>
|
||||
<item name="msg_ftp_invalid_path">
|
||||
|
|
@ -817,8 +817,8 @@
|
|||
<value xml:lang="tr"><![CDATA[SFTP'yi kullanmak istiyor musunuz?]]></value>
|
||||
</item>
|
||||
<item name="disable_sftp_support">
|
||||
<value xml:lang="ko"><![CDATA[SFTP를 사용할 수 있는 환경이 아닙니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Does Not Use SFTP]]></value>
|
||||
<value xml:lang="ko"><![CDATA[SFTP를 사용하시려면 ssh2 PHP 모듈을 설치하셔야 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You should install ssh2 PHP module to use SFTP.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[SFTPを使用できる環境ではありません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[关闭SFTP]]></value>
|
||||
<value xml:lang="tr"><![CDATA[SFTP kullanabileceğiniz bir yer değildir.]]></value>
|
||||
|
|
@ -906,13 +906,14 @@
|
|||
</item>
|
||||
<item name="use_mobile_view">
|
||||
<value xml:lang="ko"><![CDATA[모바일 뷰 사용]]></value>
|
||||
<value xml:lang="en"><![CDATA[Do you want to show the mobile page when users access the website with their mobile phone?]]></value>
|
||||
<value xml:lang="en"><![CDATA[Enable Mobile Page]]></value>
|
||||
<value xml:lang="jp"><![CDATA[モバイル版使用]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[当用户使用移动终端访问页面的时候是否使用移动版?]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Kullanıcılar mobil aygıtları ile siteye bağlandıklarında mobil sayfaı bu kullancılara göstermek istiyor musunuz?]]></value>
|
||||
</item>
|
||||
<item name="about_use_mobile_view">
|
||||
<value xml:lang="ko"><![CDATA[모바일 기기로 접속시 모바일 페이지를 보여줍니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Show mobile page when visitors access with mobile devices.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[モバイル機器で接続した際にモバイルページを見せます。]]></value>
|
||||
</item>
|
||||
<item name="thumbnail_type">
|
||||
|
|
@ -931,7 +932,7 @@
|
|||
</item>
|
||||
<item name="detail_input_footer_script">
|
||||
<value xml:lang="ko"><![CDATA[최하단에 코드를 삽입합니다. 관리자 페이지에서는 수행되지 않습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[The script is inserted into the bottom of body. Manager page does not work.]]></value>
|
||||
<value xml:lang="en"><![CDATA[The script is inserted into the bottom of body. It does not work at admin page.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[最下段にコードを追加します。管理者ページでは遂行できません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[该脚本将被插入到页面的底部. 页面管理将无效.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Script alt tarafa eklenmiştir. Yönetici sayfası çalışmıyor.]]></value>
|
||||
|
|
@ -966,14 +967,14 @@
|
|||
</item>
|
||||
<item name="about_admin_ip_limit">
|
||||
<value xml:lang="ko"><![CDATA[관리자 페이지로 접근가능한 IP대역을 지정합니다. 해당 IP에 대해서만 관리자 페이지로 접근이 가능하므로 주의 바랍니다. IP대역 정보는 /files/config/db.config.php 파일에 저장됩니다. 여러개의 항목은 줄을 바꾸어 입력하세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please note that only the specified IP addresses can access the admin page. The information on IP address band is stored in /files/config/db.config.php. Change the line to multiple IP.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Specify IP address which can access to admin page. Please note that only the specified IP addresses can access the admin page. The information on IP address band is stored in /files/config/db.config.php. Change the line to multiple IP.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[該当IPについてのみ管理者ページへアクセスできるため、注意してください。IP帯域情報は、/files/config/db.config.php ファイルに保存されます。Change the line to multiple IP.]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[请注意,只有绑定的IP才能访问后台。IP信息将保存在 /files/config/db.config.php. 每行一个IP。]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Sadece bu IP adresi üzerinden yönetici sayfasına erişim mümkündür.IP-bant bilgileri /files/config/db.config.php dosyasında saklanır. Satıra birden fazla öğe girin.]]></value>
|
||||
</item>
|
||||
<item name="detail_about_ftp_info">
|
||||
<value xml:lang="ko"><![CDATA[FTP 정보를 입력하면 쉬운 설치를 가능하도록 합니다. FTP정보는 files/config/ftp.config.php 파일에 저장됩니다. 쉬운 설치가 불가능한 경우 PHP의 safe_mode를 On으로 변경해야 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[When you enter FTP information to enable easy installation. The information on FTP is stored in files/config/ftp.config.php. If you are unable to easy install, PHP's 'safe_mode' must be changed 'On']]></value>
|
||||
<value xml:lang="ko"><![CDATA[FTP 정보를 입력하면 쉬운 설치를 가능하도록 합니다. FTP 정보는 files/config/ftp.config.php 파일에 저장됩니다. 쉬운 설치가 불가능한 경우 PHP의 safe_mode를 On으로 변경해야 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Enable easy installation if you enter FTP information. The information of FTP is stored in files/config/ftp.config.php. If you are unable to easy install, PHP's 'safe_mode' must be changed 'On']]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTP情報を入力すれば簡単設置を可能にします。FTP情報は files/config/ftp.config.php ファイルに保存されます。簡単設置ができない場合、PHPのsafe_modeをOnへ変更が必要です。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[当设定FTP信息来启用快捷安装。FTP的信息保存在 /files/config/ftp.config.php. 如果不启用快捷安装,请务必将开启PHP安全模式]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Kolay kurulum sağlayan FTP bilgilerini girdiğinizde. FTP bilgi, dosya / config / ftp.config.php dosyasında saklanır. Kolay yükleme sizin için mümkün değilse, PHP'nin safe_mode ayarını On şeklinde değiştiriniz.]]></value>
|
||||
|
|
@ -1127,7 +1128,7 @@
|
|||
</item>
|
||||
<item name="no_selected_skin_desc">
|
||||
<value xml:lang="ko"><![CDATA[선택한 테마에는 이 항목에 대한 스킨 정보가 없습니다. 스킨을 직접 선택하세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[The selected theme has no skin information for this item. Select a skin.]]></value>
|
||||
<value xml:lang="en"><![CDATA[The selected theme has no skin information for this item. Please select a skin by yourself.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[選択したテーマには、この項目についてのスキン情報がありません。スキンを直接選択してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[已选择的主体没有相关的皮肤信息。请直接选择皮肤。]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Seçilen temada bu parçaya uygun yüzey bilgisi mevcut değildir. Bir yüzey seçiniz.]]></value>
|
||||
|
|
@ -1204,7 +1205,7 @@
|
|||
</item>
|
||||
<item name="by_you">
|
||||
<value xml:lang="ko"><![CDATA[사용자 설정]]></value>
|
||||
<value xml:lang="en"><![CDATA[By You]]></value>
|
||||
<value xml:lang="en"><![CDATA[User setting]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ユーザー設定]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[By You]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Kullanıcı Seçimi]]></value>
|
||||
|
|
@ -1246,28 +1247,28 @@
|
|||
</item>
|
||||
<item name="no_data">
|
||||
<value xml:lang="ko"><![CDATA[등록된 데이터가 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[There is no data.]]></value>
|
||||
<value xml:lang="en"><![CDATA[There is no data submitted.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[登録されたデータがありません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[没有相关信息。]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Veri Bulunmamaktadır.]]></value>
|
||||
</item>
|
||||
<item name="cmd_admin_menu_reset">
|
||||
<value xml:lang="ko"><![CDATA[관리자 메뉴 초기화]]></value>
|
||||
<value xml:lang="en"><![CDATA[Reset admin menu]]></value>
|
||||
<value xml:lang="en"><![CDATA[Initialize admin menu]]></value>
|
||||
<value xml:lang="jp"><![CDATA[管理者メニューの初期化]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[重置后台菜单]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Admin menüsünü sıfırlayın]]></value>
|
||||
</item>
|
||||
<item name="confirm_reset_admin_menu">
|
||||
<value xml:lang="ko"><![CDATA[관리자 메뉴를 초기화하시겠습니까?]]></value>
|
||||
<value xml:lang="en"><![CDATA[Are you sure you want to initialize the admin menu?]]></value>
|
||||
<value xml:lang="en"><![CDATA[Are you sure initialize the admin menu?]]></value>
|
||||
<value xml:lang="jp"><![CDATA[管理者メニューを初期化しますか?]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[请确认是否初始化后台菜单]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Admin menüsünü başlatmak istediğinize emin misiniz?]]></value>
|
||||
</item>
|
||||
<item name="cmd_view_server_env">
|
||||
<value xml:lang="ko"><![CDATA[서버정보출력]]></value>
|
||||
<value xml:lang="en"><![CDATA[View Server Env]]></value>
|
||||
<value xml:lang="en"><![CDATA[View Server Env.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[サーバー情報出力]]></value>
|
||||
</item>
|
||||
<item name="server_env">
|
||||
|
|
@ -1326,7 +1327,7 @@
|
|||
</item>
|
||||
<item name="about_ftp_password">
|
||||
<value xml:lang="ko"><![CDATA[비밀번호는 FTP 경로 확인을 위한 FTP 접속 시 필요하며 사용 후 저장하지 않습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[FTP password will not be stored.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Password is required during access to FTP for checking FTP directories. FTP password will not be stored after this.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[パースワードはFTPパス確認のために使い、使用後には保存しません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP密码不会被保存。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[不會儲存 FTP 密碼]]></value>
|
||||
|
|
@ -1348,7 +1349,7 @@
|
|||
</item>
|
||||
<item name="msg_safe_mode_ftp_needed">
|
||||
<value xml:lang="ko"><![CDATA[PHP의<strong>safe_mode=On</strong>일 경우 XE의 정상적인 동작을 돕습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[When safe_mode setting of PHP is On, you should enter FTP account information to install XE.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If safe_mode setting of PHP is On, it hepls normal functioning of XE.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[PHPのsafe_modeがOnの場合、FTP情報を登録することで、XEのインストール及び利用が可能になります。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[当PHP的safe_mode=On时,请必须输入相关FTP信息,否则将无法正常安装或使用XE程序。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[當 PHP 的安全模式(safe_mode)開啟時,請輸入相關 FTP 資訊,否則無法正常安裝或使用程式。]]></value>
|
||||
|
|
@ -1378,7 +1379,7 @@
|
|||
</item>
|
||||
<item name="msg_ftp_no_directory">
|
||||
<value xml:lang="ko"><![CDATA[FTP 접속에 성공했으나, 디렉토리 정보를 읽어올 수 없습니다. 서버 설정을 확인해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Succeed to connect to the host via FTP, but cannot read any directory list informaiton. Please check the server configurations.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[FTPに接続しましたが、ディレクトリの情報を読み取ることができません。サーバー設定を確認してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP成功连接主机。但是无法获取目录列表。请检查服务器配置。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[Succeed to connect to the host via FTP. However, can not read any directory list informaiton. Check the server configurations.]]></value>
|
||||
|
|
@ -1452,7 +1453,7 @@
|
|||
</item>
|
||||
<item name="msg_ftp_installed_ftp_realpath">
|
||||
<value xml:lang="ko"><![CDATA[설치된 XE의 FTP 경로]]></value>
|
||||
<value xml:lang="en"><![CDATA[Absolute FTP Path of XE]]></value>
|
||||
<value xml:lang="en"><![CDATA[Absolute FTP Path of XE installed]]></value>
|
||||
<value xml:lang="jp"><![CDATA[インストールされたXEのFTP絶対パス設定]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[FTP绝对路径设置]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[XE的 FTP 絕對路經]]></value>
|
||||
|
|
@ -1476,7 +1477,7 @@
|
|||
</item>
|
||||
<item name="close_all">
|
||||
<value xml:lang="ko"><![CDATA[모두 접기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Close All]]></value>
|
||||
<value xml:lang="en"><![CDATA[Collapse All]]></value>
|
||||
<value xml:lang="jp"><![CDATA[すべて閉じる]]></value>
|
||||
</item>
|
||||
<item name="desktop_settings">
|
||||
|
|
@ -1561,40 +1562,48 @@
|
|||
</item>
|
||||
<item name="checkBrowserIE8">
|
||||
<value xml:lang="ko"><![CDATA[IE8 이하의 브라우저 사용시 관리자페이지가 정상동작 하지 않을 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please connect by IE 9 or higher.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If you use a browser under IE8, admin page will not function normally.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[IE8以下のブラウザは管理者ベージが正常に動作できない場合があります。]]></value>
|
||||
</item>
|
||||
<!-- site lock -->
|
||||
<item name="subtitle_sitelock">
|
||||
<value xml:lang="ko"><![CDATA[사이트 잠금]]></value>
|
||||
<value xml:lang="en"><![CDATA[Site Lock]]></value>
|
||||
<value xml:lang="jp"><![CDATA[サイトロック]]></value>
|
||||
</item>
|
||||
<item name="use_sitelock">
|
||||
<value xml:lang="ko"><![CDATA[사이트 잠금 사용]]></value>
|
||||
<value xml:lang="en"><![CDATA[Use Site Lock]]></value>
|
||||
<value xml:lang="jp"><![CDATA[サイトロック使用]]></value>
|
||||
</item>
|
||||
<item name="sitelock_whitelist">
|
||||
<value xml:lang="ko"><![CDATA[접근 허용 IP]]></value>
|
||||
<value xml:lang="en"><![CDATA[IPs allowed to access]]></value>
|
||||
<value xml:lang="jp"><![CDATA[接近許可IP]]></value>
|
||||
</item>
|
||||
<item name="sitelock_title">
|
||||
<value xml:lang="ko"><![CDATA[안내문 제목]]></value>
|
||||
<value xml:lang="en"><![CDATA[Sign Title]]></value>
|
||||
<value xml:lang="jp"><![CDATA[案内文タイトル]]></value>
|
||||
</item>
|
||||
<item name="sitelock_message">
|
||||
<value xml:lang="ko"><![CDATA[안내문 내용]]></value>
|
||||
<value xml:lang="en"><![CDATA[Sign Contents]]></value>
|
||||
<value xml:lang="jp"><![CDATA[案内文内容]]></value>
|
||||
</item>
|
||||
<item name="sitelock_message_help">
|
||||
<value xml:lang="ko"><![CDATA[HTML 태그를 사용할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You can use HTML tags.]]></value>
|
||||
<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="en"><![CDATA[You should include the IP of the administrator here.<br />If the access is blocked, you can unbrick this by changing `'use_sitelock' => '<strong>Y</strong>'` to `'use_sitelock' => '<strong>N</strong>'` in './files/config/db.config.php.'<br />The file of site lock design is at './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>
|
||||
<value xml:lang="en"><![CDATA[Your IP]]></value>
|
||||
<value xml:lang="jp"><![CDATA[接続したIP]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
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>
|
||||
|
||||
|
|
@ -751,7 +751,7 @@
|
|||
.x [class^="x_icon-"],
|
||||
.x [class*=" x_icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}
|
||||
/* White icons with optional class, or on hover/active states of certain elements */
|
||||
.x .x_icon-white,
|
||||
#gnb.gnb.open .x_icon-white,
|
||||
.x .x_nav-pills>.x_active>a>[class^="x_icon-"],
|
||||
.x .x_nav-pills>.x_active>a>[class*=" x_icon-"],
|
||||
.x .x_nav-list>.x_active>a>[class^="x_icon-"],
|
||||
|
|
@ -1591,4 +1591,4 @@ to{background-position:0 0}
|
|||
.x .x_hide{display:none}
|
||||
.x .x_show{display:block}
|
||||
.x .x_invisible{visibility:hidden}
|
||||
.x .x_affix{position:fixed}
|
||||
.x .x_affix{position:fixed}
|
||||
|
|
|
|||
|
|
@ -358,6 +358,9 @@ body>.x,
|
|||
.x_modal-backdrop {
|
||||
display: none;
|
||||
}
|
||||
.x_modal {
|
||||
top: 30px;
|
||||
}
|
||||
.x_modal-backdrop {
|
||||
opacity: .6;
|
||||
filter: alpha(opacity=60);
|
||||
|
|
@ -410,7 +413,7 @@ body>.x,
|
|||
min-width: 220px;
|
||||
}
|
||||
.x .x_form-horizontal .x_control-group {
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.x input[type="text"],
|
||||
.x input[type="password"],
|
||||
|
|
@ -1421,6 +1424,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 +1445,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>
|
||||
|
|
|
|||
|
|
@ -422,6 +422,14 @@ jQuery(function($){
|
|||
var zIndex = xeModalInitailZIndex + ((xeModalStack.length - 1) * 2);
|
||||
|
||||
$xeModalBackdrop.css('z-index', zIndex).show();
|
||||
var xeModalBackdropHeight = $xeModalBackdrop.height();
|
||||
var modalBodyHeight = xeModalBackdropHeight;
|
||||
modalBodyHeight -= $modal.find('.x_modal-header:visible').height();
|
||||
modalBodyHeight -= $modal.find('.x_modal-footer:visible').height();
|
||||
modalBodyHeight -= 150;
|
||||
|
||||
$modal.find('.x_modal-body').css('height', modalBodyHeight);
|
||||
|
||||
$modal.css('z-index', zIndex + 1);
|
||||
})
|
||||
.bind('close.mw', function(){
|
||||
|
|
|
|||
4
modules/admin/tpl/js/admin.min.js
vendored
4
modules/admin/tpl/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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/">
|
||||
|
|
|
|||
|
|
@ -236,13 +236,13 @@
|
|||
</item>
|
||||
<item name="about_use_anonymous">
|
||||
<value xml:lang="ko"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다. 추가설정의 문서 히스토리 사용이 꺼져있지 않으면 문서 수정시 작성자가 표시될 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Make this board into an anonymous board by hiding the author's information. <strong>Please turn off history at additional setup. If not, editing document might show the author's info.</strong>]]></value>
|
||||
<value xml:lang="en"><![CDATA[Make this board into an anonymous board by hiding the author's information. It is more useful if you make the author's information hidden at skin setup. <strong>Please turn off history at additional setup. If not, editing document might show the author's info.</strong>]]></value>
|
||||
<value xml:lang="jp"><![CDATA[匿名掲示板として活用できます。スキン設定で「登録者の情報を表示しない」の設定をおすすめします。追加設定でのドキュメントヒストリー使用機能がオフにされていない場合、書き込みを修正した際に作成者が表示されます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板可使用匿名功能。可在面板設定中設置隱藏作者的資料。 ]]></value>
|
||||
<value xml:lang="fr"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="ru"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="es"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="fr"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="ru"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="es"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bu panoyu, yazar bilgisini saklayarak anonim pano haline dönüştür. <strong>Lütfen ek ayarlardan geçmiş'i kapatınız. Eğer kapatmazsanız, belgeyi değiştirmek yazar bilgisinin görüntülenmesine neden olacaktır.</strong>]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Tạo Board ẩn danh sẽ ẩn những thông tin của người sử dụng.]]></value>
|
||||
</item>
|
||||
|
|
@ -271,7 +271,7 @@
|
|||
<value xml:lang="vi"><![CDATA[Người không phải là Admin, thành viên họ cũng có thể xem được bài viết. Không phải là thành viên thì không thể gửi bài hay bình luận.]]></value>
|
||||
</item>
|
||||
<item name="about_secret">
|
||||
<value xml:lang="ko"><![CDATA[게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.]]></value>
|
||||
<value xml:lang="ko"><![CDATA[게시판 및 댓글의 비밀글 기능을 사용할 수 있도록 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Users will be able to write secret articles or comments.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板およびコメントの非公開機能が使用できるようになります。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置主题及评论当中使用密帖与否。]]></value>
|
||||
|
|
@ -282,7 +282,7 @@
|
|||
</item>
|
||||
<item name="about_admin_mail">
|
||||
<value xml:lang="ko"><![CDATA[글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다. 콤마(,)로 연결시 다수의 메일주소로 발송할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[A mail will be sent when an article or comment is submitted. Multiple mails can be sent with commas(,).]]></value>
|
||||
<value xml:lang="en"><![CDATA[A mail will be sent when an article or comment is submitted. Mails can be sent to mutiple mail addresses if connecting addresses with commas(,).]]></value>
|
||||
<value xml:lang="jp"><![CDATA[書き込みやコメントが登録される時、登録メールアドレス宛にメールが送信されます。 複数のメールアドレスへ送信する場合は「,」(半額コンマ)区切りで登録してください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[有新的主题或评论时,将自动发电子邮件来通知管理员。 多数电子邮件由逗号(,)来分隔。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[有新的主題或評論時,將自動發電子郵件來通知管理員。 多數電子郵件由逗號(,)區隔。]]></value>
|
||||
|
|
@ -293,7 +293,7 @@
|
|||
<value xml:lang="vi"><![CDATA[Một Email sẽ được gửi khi có bài viết hay bình luận mới. Có thể gửi cho nhiều Email cách nhau bằng dấu (,).]]></value>
|
||||
</item>
|
||||
<item name="about_list_config">
|
||||
<value xml:lang="ko"><![CDATA[게시판의 목록형식 사용시 원하는 항목들로 배치를 할 수 있습니다. 단 스킨에서 지원하지 않는 경우 불가능합니다.]]></value>
|
||||
<value xml:lang="ko"><![CDATA[게시판의 목록형식 사용시 원하는 항목들로 배치를 할 수 있습니다. 단 스킨에서 지원하지 않는 경우 불가능합니다. 대상항목/ 표시항목의 항목을 더블클릭하면 추가/ 제거가 됩니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If using list-style skin, you may arrange items to display. However, this feature might not be availble for non-official skins. If you double-click target items and display items, then you can add / remove them]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板スタイルが「リスト型」の場合、好きな項目の配置・表示ができます。 ただし、スキンによってはサポートしない場合もあります。 ターゲットアイテム/表示アイテムをダブルクリックすると追加・削除ができます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置使用目录型目录页面时要显示的项目。 前提是使用的皮肤也支持此功能。 添加/删除项目,双击备选项/显示项即可。]]></value>
|
||||
|
|
@ -306,7 +306,7 @@
|
|||
</item>
|
||||
<item name="about_use_status">
|
||||
<value xml:lang="ko"><![CDATA[글 작성 시 선택할 수 있는 상태를 지정해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please select status that can be selected when write article.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please select status that can be selected when you write article.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[書き込みを登録する際に選択できる状態を指定してください。]]></value>
|
||||
</item>
|
||||
<item name="msg_not_enough_point">
|
||||
|
|
@ -327,7 +327,7 @@
|
|||
</item>
|
||||
<item name="msg_not_allow_comment">
|
||||
<value xml:lang="ko"><![CDATA[해당 글의 댓글 쓰기가 잠겨있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This article does not allow write comment.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This article is not allowed to write comment.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[この書き込みにコメントすることは禁じられています。]]></value>
|
||||
</item>
|
||||
<item name="no_board_instance">
|
||||
|
|
@ -367,12 +367,12 @@
|
|||
</item>
|
||||
<item name="about_protect_content">
|
||||
<value xml:lang="ko"><![CDATA[작성된 글에 댓글이 작성된 경우 글 작성자는 해당 글을 수정하거나 삭제 할 수 없습니다.]]> </value>
|
||||
<value xml:lang="en"><![CDATA[If there is comment on document, document's owner cannot modify or delete that.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If there is any comment on document, document's owner cannot modify or delete that.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[書き込みにコメントが登録された場合、書き込みの作成者は書き込みの修正、または削除ができません。]]> </value>
|
||||
</item>
|
||||
<item name="msg_protect_content">
|
||||
<value xml:lang="ko"><![CDATA[댓글이 작성된 게시물의 글을 수정 또는 삭제 할 수 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Cannot modify or delete document. Because there is comments.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You cannot modify or delete document which has any comment on it.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[コメントが登録された書き込みは修正、または削除が禁止されています。]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@
|
|||
<condition operation="like" column="mid" var="s_mid" pipe="or" />
|
||||
<condition operation="like" column="browser_title" var="s_browser_title" pipe="or" />
|
||||
<condition operation="like" column="comment" var="s_comment" pipe="or" />
|
||||
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="or" />
|
||||
</group>
|
||||
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="and" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="module_srl" order="desc" />
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
<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=='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>
|
||||
|
|
|
|||
|
|
@ -89,8 +89,9 @@
|
|||
<form action="" class="search x_input-append center" no-error-return-url="true">
|
||||
<input loop="$param => $key, $val" cond="!in_array($key, array('mid', 'vid', 'act', 'page', 'search_target', 'search_keyword'))" type="hidden" name="{$key}" value="{$val}" />
|
||||
<select cond="count($module_category)" name="module_category_srl" title="{$lang->module_category}" style="margin-right:4px">
|
||||
<option value="" selected="selected"|cond="!$module_category_srl">{$lang->all}</option>
|
||||
<option value="0" selected="selected"|cond="$module_category_srl==='0'">{$lang->not_exists}</option>
|
||||
<option value="{$key}" loop="$module_category => $key,$val" selected="selected"|cond="$module_category==$key">{$val->title}</option>
|
||||
<option value="{$key}" loop="$module_category => $key,$val" selected="selected"|cond="$module_category_srl==$key">{$val->title}</option>
|
||||
</select>
|
||||
<select name="search_target" title="{$lang->search_target}" style="margin-right:4px">
|
||||
<option value="mid" selected="selected"|cond="$search_target=='mid'">{$lang->mid}</option>
|
||||
|
|
@ -124,4 +125,4 @@ jQuery(function($){
|
|||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -443,7 +472,7 @@ class commentAdminController extends comment
|
|||
$obj->module_srl = $originObject->module_srl;
|
||||
|
||||
$oCommentController = getController('comment');
|
||||
$output = $oCommentController->insertComment($obj);
|
||||
$output = $oCommentController->insertComment($obj, true);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(!$is_admin && !$manual_inserted && !checkUserSequence($obj->comment_srl))
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
|
||||
// determine the order
|
||||
$obj->list_order = getNextSequence() * -1;
|
||||
|
|
@ -512,18 +520,22 @@ class commentController extends comment
|
|||
$oMail->setSender($obj->email_address, $obj->email_address);
|
||||
$mail_title = "[XE - " . Context::get('mid') . "] A new comment was posted on document: \"" . $oDocument->getTitleText() . "\"";
|
||||
$oMail->setTitle($mail_title);
|
||||
$url_comment = getFullUrl('','document_srl',$obj->document_srl).'#comment_'.$obj->comment_srl;
|
||||
if($using_validation)
|
||||
{
|
||||
$url_approve = getFullUrl('', 'module', 'comment', 'act', 'procCommentAdminChangePublishedStatusChecked', 'cart[]', $obj->comment_srl, 'will_publish', '1', 'search_target', 'is_published', 'search_keyword', 'N');
|
||||
$url_trash = getFullUrl('', 'module', 'comment', 'act', 'procCommentAdminDeleteChecked', 'cart[]', $obj->comment_srl, 'search_target', 'is_trash', 'search_keyword', 'true');
|
||||
$url_approve = getFullUrl('', 'module', 'admin', 'act', 'procCommentAdminChangePublishedStatusChecked', 'cart[]', $obj->comment_srl, 'will_publish', '1', 'search_target', 'is_published', 'search_keyword', 'N');
|
||||
$url_trash = getFullUrl('', 'module', 'admin', 'act', 'procCommentAdminDeleteChecked', 'cart[]', $obj->comment_srl, 'search_target', 'is_trash', 'search_keyword', 'true');
|
||||
$mail_content = "
|
||||
A new comment on the document \"" . $oDocument->getTitleText() . "\" is waiting for your approval.
|
||||
<br />
|
||||
<br />
|
||||
Author: " . $member_info->nick_name . "
|
||||
<br />Author e-mail: " . $member_info->email_address . "
|
||||
<br />From : <a href=\"" . $url_comment . "\">" . $url_comment . "</a>
|
||||
<br />Comment:
|
||||
<br />\"" . $obj->content . "\"
|
||||
<br />Document:
|
||||
<br />\"" . $oDocument->getContentText(). "\"
|
||||
<br />
|
||||
<br />
|
||||
Approve it: <a href=\"" . $url_approve . "\">" . $url_approve . "</a>
|
||||
|
|
@ -538,8 +550,11 @@ class commentController extends comment
|
|||
$mail_content = "
|
||||
Author: " . $member_info->nick_name . "
|
||||
<br />Author e-mail: " . $member_info->email_address . "
|
||||
<br />From : <a href=\"" . $url_comment . "\">" . $url_comment . "</a>
|
||||
<br />Comment:
|
||||
<br />\"" . $obj->content . "\"
|
||||
<br />Document:
|
||||
<br />\"" . $oDocument->getContentText(). "\"
|
||||
";
|
||||
$oMail->setContent($mail_content);
|
||||
|
||||
|
|
@ -655,9 +670,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 +854,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
|
||||
|
|
@ -1079,7 +1107,17 @@ class commentController extends comment
|
|||
$_SESSION['voted_comment'][$comment_srl] = TRUE;
|
||||
|
||||
// Return the result
|
||||
return new Object(0, $success_message);
|
||||
$output = new Object(0, $success_message);
|
||||
if($point > 0)
|
||||
{
|
||||
$output->add('voted_count', $obj->after_point);
|
||||
}
|
||||
else
|
||||
{
|
||||
$output->add('blamed_count', $obj->after_point);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
{
|
||||
|
|
@ -378,6 +385,7 @@ class commentModel extends comment
|
|||
$args->module_srl = $obj->module_srl;
|
||||
}
|
||||
|
||||
$args->document_srl = $obj->document_srl;
|
||||
$args->list_count = $obj->list_count;
|
||||
|
||||
if(strpos($args->module_srl, ",") === false)
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
<conditions>
|
||||
<condition operation="equal" column="status" var="status" pipe="and" />
|
||||
<condition operation="in" column="module_srl" var="module_srl" filter="number" pipe="and" />
|
||||
<condition operation="equal" column="document_srl" var="document_srl" filter="number" pipe="and" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="list_order" order="asc" />
|
||||
|
|
|
|||
|
|
@ -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(!$manual_inserted && !$isRestore && !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())
|
||||
{
|
||||
|
|
@ -1117,14 +1143,19 @@ class documentController extends document
|
|||
$_SESSION['voted_document'][$document_srl] = true;
|
||||
|
||||
// Return result
|
||||
$output = new Object();
|
||||
if($point > 0)
|
||||
{
|
||||
return new Object(0, 'success_voted');
|
||||
$output->setMessage('success_voted');
|
||||
$output->add('voted_count', $obj->after_point);
|
||||
}
|
||||
else
|
||||
{
|
||||
return new Object(0, 'success_blamed');
|
||||
$output->setMessage('success_blamed');
|
||||
$output->add('blamed_count', $obj->after_point);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -24,8 +24,8 @@
|
|||
var align = (node.style.cssFloat) ? node.style.cssFloat : node.style.styleFloat;
|
||||
var margin = (node.style.margin) ? node.style.margin.match('[0-9]+') : node.getAttribute('margin');
|
||||
var alt = node.getAttribute('alt');
|
||||
var width = $(node).width();
|
||||
var height = $(node).height();
|
||||
var width = node.getAttribute('width');
|
||||
var height = node.getAttribute('height');
|
||||
var link_url = node.getAttribute('link_url');
|
||||
var open_window = node.getAttribute('open_window');
|
||||
|
||||
|
|
|
|||
|
|
@ -493,6 +493,8 @@ class editorModel extends editor
|
|||
$oEditorController->deleteSavedDoc(false);
|
||||
$oEditorController->doSaveDoc($saved_doc);
|
||||
|
||||
setUserSequence($saved_doc->document_srl);
|
||||
|
||||
return $saved_doc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@ function insertUploadedFile(editorSequence) {
|
|||
temp_code = '';
|
||||
temp_code += "<img src=\""+file.download_url+"\" alt=\""+file.source_filename+"\"";
|
||||
if(obj.complete === true) { temp_code += " width=\""+obj.width+"\" height=\""+obj.height+"\""; }
|
||||
temp_code += " />\r\n";
|
||||
temp_code += " />\r\n<p><br /></p>\r\n";
|
||||
text.push(temp_code);
|
||||
} else {
|
||||
// 이미지외의 경우는 multimedia_link 컴포넌트 연결
|
||||
|
|
|
|||
2
modules/editor/tpl/js/uploader.min.js
vendored
2
modules/editor/tpl/js/uploader.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -510,23 +510,23 @@ Hãy nhập đường dẫn cho File chứa Data trên Host dưới dạng http:
|
|||
<item name="about_importer">
|
||||
<value xml:lang="ko"><![CDATA[다른 프로그램의 데이터를 XML 형식으로 변환 후 업로드하면 XE로 이전할 수 있습니다. <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a>를 이용하면 XML파일로 변환할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Data Importer will help you import Zeroboard4, Zeroboard5 Beta or other program's data into XE.
|
||||
In order to import, you first have to use <a href="http://code.google.com/p/xe-migration/" target="_blank">XML Exporter</a> to convert the data you want into XML File.]]></value>
|
||||
In order to import, you first have to use <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Exporter</a> to convert the data you want into XML File.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをXEのデータに変換することができます。
|
||||
変換するためには、<a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a>を利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。]]></value>
|
||||
変換するためには、<a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Exporter</a>を利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[不仅可以导入Zeroboard 4,Zb5beta的数据,也可以把其他程序数据导入到XE当中。
|
||||
导入数据时请利用 <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a>生成XML文件后再上传。]]></value>
|
||||
导入数据时请利用 <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Exporter</a>生成XML文件后再上传。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[不僅可以匯入 Zeroboard 4,Zb5beta 的資料,也能夠把其他程式資料匯入到 XE 當中。
|
||||
匯入資料時,請利用 <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a> 建立 XML 檔案後再上傳。]]></value>
|
||||
匯入資料時,請利用 <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Exporter</a> 建立 XML 檔案後再上傳。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Vous pouvez transférer les données de Zeroboard4, de Zeroboard5 Beta ou d'autres logiciels aux données de XE.
|
||||
Pour transférer, vous devez utiliser <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">Exporteur de XML</a> pour convertir les données en fichier de XML, et puis téléchargez-le.]]></value>
|
||||
Pour transférer, vous devez utiliser <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">Exporteur de XML</a> pour convertir les données en fichier de XML, et puis téléchargez-le.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Вы можете импортировать данные Zeroboard4, Zeroboard5 Beta или других программ в XE.
|
||||
Чтобы импортировать, Вам следует использовать <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Экспортер (XML Exporter)</a>, чтобы конвертировать нужные данные в XML Файл и затем загрузить его.]]></value>
|
||||
Чтобы импортировать, Вам следует использовать <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Экспортер (XML Exporter)</a>, чтобы конвертировать нужные данные в XML Файл и затем загрузить его.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Es posible trasferir los datos de Zeroboard4, zb5beta o de otros programas a XE.
|
||||
Para la transferencia debe utilizar <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a> para transformar los datos en archivo XML, y luego subir ese archivo.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Veri Alıcısı XE'ye, Zeroboard4, Zeroboard5 Beta veya başka programların verilerini aktarmada yardımcı olacaktır.
|
||||
İçe aktarımı gerçekleştirebilmek için öncelikle <a href="http://code.google.com/p/xe-migration/" target="_blank">XML DışAktarımcı</a>'yı kullanıp istediğiniz veriyi XML türüne çevirmelisiniz.]]></value>
|
||||
İçe aktarımı gerçekleştirebilmek için öncelikle <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML DışAktarımcı</a>'yı kullanıp istediğiniz veriyi XML türüne çevirmelisiniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bạn có thể chuyển Data từ Zeroboard4, Zeroboard5 Beta hay Data của những mã nguồn khác vào Data của XE.
|
||||
Để hiểu rõ hơn công việc này, bạn có thể tham khảo cách chuyển đổi Data của bạn vào XE khi bạn đã Upload chúng tại <a href="http://www.xpressengine.com/index.php?mid=download&category_srl=18324038" target="_blank">XML Exporter</a>.]]></value>
|
||||
Để hiểu rõ hơn công việc này, bạn có thể tham khảo cách chuyển đổi Data của bạn vào XE khi bạn đã Upload chúng tại <a href="https://github.com/xpressengine/xe-migration-tool" target="_blank">XML Exporter</a>.]]></value>
|
||||
</item>
|
||||
<item name="about_target_path">
|
||||
<value xml:lang="ko"><![CDATA[첨부 파일을 받기 위해 제로보드4가 설치된 위치를 입력해주세요.
|
||||
|
|
|
|||
|
|
@ -335,12 +335,8 @@ class installAdminController extends install
|
|||
list($width, $height, $type_no, $attrs) = @getimagesize($target_file);
|
||||
if($iconname == 'favicon.ico')
|
||||
{
|
||||
if(!preg_match('/^.*(icon).*$/',$type)) {
|
||||
Context::set('msg', '*.icon '.Context::getLang('msg_possible_only_file'));
|
||||
return;
|
||||
}
|
||||
if($width && $height && ($width != '16' || $height != '16')) {
|
||||
Context::set('msg', Context::getLang('msg_invalid_format').' (size : 16x16)');
|
||||
if(!preg_match('/^.*(x-icon|\.icon)$/i',$type)) {
|
||||
Context::set('msg', '*.ico '.Context::getLang('msg_possible_only_file'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
@ -474,7 +475,7 @@ class memberAdminController extends member
|
|||
}
|
||||
else if($formInfo->name == 'password')
|
||||
{
|
||||
$fields[] = '<field name="password"><if test="$act == \'procMemberInsert\'" attr="required" value="true" /><if test="$act == \'procMemberInsert\'" attr="length" value="6:20" /></field>';
|
||||
$fields[] = '<field name="password"><if test="$act == \'procMemberInsert\'" attr="required" value="true" /><if test="$act == \'procMemberInsert\'" attr="length" value="4:20" /></field>';
|
||||
$fields[] = '<field name="password2"><if test="$act == \'procMemberInsert\'" attr="required" value="true" /><if test="$act == \'procMemberInsert\'" attr="equalto" value="password" /></field>';
|
||||
}
|
||||
else if($formInfo->name == 'find_account_question')
|
||||
|
|
@ -830,7 +831,6 @@ class memberAdminController extends member
|
|||
{
|
||||
$args->denied = $var->denied;
|
||||
$output = executeQuery('member.updateMemberDeniedInfo', $args);
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$oDB->rollback();
|
||||
|
|
@ -852,6 +852,7 @@ class memberAdminController extends member
|
|||
$this->setMessage('success_deleted');
|
||||
}
|
||||
}
|
||||
$oMemberController->_clearMemberCache($args->member_srl);
|
||||
}
|
||||
|
||||
$message = $var->message;
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ class memberAdminView extends member
|
|||
}
|
||||
}
|
||||
$config = $this->memberConfig;
|
||||
$memberIdentifiers = array('user_id'=>'user_id', 'user_name'=>'user_name', 'nick_name'=>'nick_name');
|
||||
$memberIdentifiers = array('email_address'=>'email_address', 'user_id'=>'user_id', 'user_name'=>'user_name', 'nick_name'=>'nick_name');
|
||||
$usedIdentifiers = array();
|
||||
|
||||
if(is_array($config->signupForm))
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -447,7 +454,14 @@ class memberController extends member
|
|||
|
||||
$_SESSION['rechecked_password_step'] = 'VALIDATE_PASSWORD';
|
||||
|
||||
$redirectUrl = getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberModifyInfo');
|
||||
if(Context::get('success_return_url'))
|
||||
{
|
||||
$redirectUrl = Context::get('success_return_url');
|
||||
}
|
||||
else
|
||||
{
|
||||
$redirectUrl = getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberModifyInfo');
|
||||
}
|
||||
$this->setRedirectUrl($redirectUrl);
|
||||
}
|
||||
|
||||
|
|
@ -556,7 +570,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 +580,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 +659,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 +1111,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
|
||||
|
|
@ -1241,7 +1254,7 @@ class memberController extends member
|
|||
$tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin);
|
||||
if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default');
|
||||
|
||||
$auth_url = getFullUrl('','module','member','act','procMemberAuthAccount','member_srl',$memberInfo->member_srl, 'auth_key',$auth_info->auth_key);
|
||||
$auth_url = getFullUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_info->auth_key);
|
||||
Context::set('auth_url', $auth_url);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
|
|
@ -1300,7 +1313,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 +1431,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 +1526,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 +1566,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 +1740,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 +1970,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 +2127,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 +2211,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);
|
||||
|
|
@ -2396,6 +2414,12 @@ class memberController extends member
|
|||
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($newEmail);
|
||||
if($member_srl) return new Object(-1,'msg_exists_email_address');
|
||||
|
||||
if($_SESSION['rechecked_password_step'] != 'INPUT_DATA')
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
unset($_SESSION['rechecked_password_step']);
|
||||
|
||||
$auth_args = new stdClass;
|
||||
$auth_args->user_id = $newEmail;
|
||||
$auth_args->member_srl = $member_info->member_srl;
|
||||
|
|
@ -2687,6 +2711,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');
|
||||
}
|
||||
|
||||
|
|
@ -569,7 +578,14 @@ class memberView extends member
|
|||
|
||||
function dispMemberModifyEmailAddress()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
if($_SESSION['rechecked_password_step'] != 'VALIDATE_PASSWORD' && $_SESSION['rechecked_password_step'] != 'INPUT_DATA')
|
||||
{
|
||||
Context::set('success_return_url', getUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberModifyEmailAddress'));
|
||||
$this->dispMemberModifyInfoBefore();
|
||||
return;
|
||||
}
|
||||
|
||||
$_SESSION['rechecked_password_step'] = 'INPUT_DATA';
|
||||
|
||||
$this->setTemplateFile('modify_email_address');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@
|
|||
.xm .pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
|
||||
.xm .pagination-centered{text-align:center}
|
||||
/* Button */
|
||||
.xm .btn{font-size:12px;font-family:inherit;display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;line-height:20px;height:auto;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;border:1px solid #cccccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)}
|
||||
.xm .btn{font-size:12px;font-family:inherit;display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;line-height:20px;height:auto;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;border:1px solid #cccccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)}
|
||||
.xm .btn:hover,
|
||||
.xm .btn:focus,
|
||||
.xm .btn:active,
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
<input type="hidden" name="act" value="procMemberModifyInfoBefore" />
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/default/1" />
|
||||
<input cond="$success_return_url" type="hidden" name="success_return_url" value="{$success_return_url}" />
|
||||
<div>
|
||||
<input type="email" value="{$identifierValue}" readonly title="{$lang->email}" />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@
|
|||
<!--@end-->
|
||||
</select>
|
||||
<select name="search_target" style="margin-right:4px" title="{$lang->search_target}">
|
||||
{@$lang->search_target_list = array_merge($lang->search_target_list, $usedIdentifiers)}
|
||||
{@$lang->search_target_list = array_merge($usedIdentifiers, $lang->search_target_list)}
|
||||
<option value="{$key}" loop="$lang->search_target_list=>$key,$val" selected="selected"|cond="$search_target==$key">{$val}</option>
|
||||
</select>
|
||||
<input type="search" name="search_keyword" value="{htmlspecialchars($search_keyword, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}" style="width:140px">
|
||||
|
|
@ -154,7 +154,12 @@
|
|||
<h3>{$lang->member_group}</h3>
|
||||
<label loop="$group_list => $key,$val" for="g{$val->group_srl}" class="x_inline"><input type="checkbox" name="groups[]" id="g{$val->group_srl}" value="{$val->group_srl}"/> {$val->title}</label>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<div class="x_control-group _moveTarget" hidden>
|
||||
<h3>{$lang->denied}</h3>
|
||||
<label class="x_inline" for="appoval"><input type="radio" name="denied" id="appoval" value="N" /> {$lang->approval}</label>
|
||||
<label class="x_inline" for="deny"><input type="radio" name="denied" id="deny" value="Y" /> {$lang->denied}</label>
|
||||
</div>
|
||||
<div class="x_control-group _moveTarget" hidden>
|
||||
<h3>{$lang->about_send_message}</h3>
|
||||
<textarea rows="5" cols="42" id="message" style="width:98%" name="message" title="{$lang->about_send_message}"></textarea>
|
||||
</div>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue