Merge pull request #1 from xpressengine/develop

Develop
This commit is contained in:
stellar12 2014-10-19 22:47:54 +09:00
commit dff41b789d
394 changed files with 6876 additions and 25180 deletions

2
.gitignore vendored
View file

@ -2,5 +2,5 @@ config.user.inc.php
/files/
/build/
/node_modules/
.DS_Srore
.DS_Store
Thumbs.db

View file

@ -15,37 +15,7 @@ RewriteRule ^(.+)/files/(member_extra_info|attach|cache|faceOff)/(.*) ./files/$2
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.+)/(files|modules|widgets|widgetstyles|layouts|m.layouts|addons)/(.*) ./$2/$3 [L]
# rss , blogAPI
RewriteRule ^(rss|atom)$ ./index.php?module=rss&act=$1 [L]
RewriteRule ^([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?mid=$1&act=$2 [L]
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?vid=$1&mid=$2&act=$3 [L]
# trackback
RewriteRule ^([0-9]+)/(.+)/trackback$ ./index.php?document_srl=$1&key=$2&act=trackback [L]
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?mid=$1&document_srl=$2&key=$3&act=trackback [L]
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L]
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&mid=$2&document_srl=$3&key=$4&act=trackback [L]
# document permanent link
RewriteRule ^([0-9]+)$ ./index.php?document_srl=$1 [L,QSA]
# mid link
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_]+)/?$ ./index.php?mid=$1 [L,QSA]
# mid + document link
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)$ ./index.php?mid=$1&document_srl=$2 [L,QSA]
# vid + mid link
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/?$ ./index.php?vid=$1&mid=$2 [L,QSA]
# vid + mid + document link
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)$ ./index.php?vid=$1&mid=$2&document_srl=$3 [L,QSA]
# mid + entry title
RewriteRule ^([a-zA-Z0-9_]+)/entry/(.+)$ ./index.php?mid=$1&entry=$2 [L,QSA]
# vid + mid + entry title
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)$ ./index.php?vid=$1&mid=$2&entry=$3 [L,QSA]
#shop / vid / [category|product] / identifier
# router
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)$ ./index.php?act=route&vid=$1&type=$2&identifier=$3 [L,QSA]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php [L]

View file

@ -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
View 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에 맞지 않는 코드를 발견 하더라도 목적과 관계 없는 코드는 절대 고치지 마세요**

View file

@ -52,6 +52,7 @@ module.exports = function(grunt) {
},
'modules': {
files: {
'common/js/x.min.js' : ['common/js/x.js'],
// addon
'addons/captcha/captcha.min.js' : ['addons/captcha/captcha.js'],
'addons/captcha_member/captcha.min.js' : ['addons/captcha_member/captcha.js'],
@ -60,14 +61,20 @@ module.exports = function(grunt) {
'modules/editor/skins/xpresseditor/js/xpresseditor.min.js': ['modules/editor/skins/xpresseditor/js/xpresseditor.js'],
'modules/editor/skins/xpresseditor/js/xe_textarea.min.js': ['modules/editor/skins/xpresseditor/js/xe_textarea.js'],
'modules/editor/tpl/js/editor_common.min.js': ['modules/editor/tpl/js/editor_common.js'],
'modules/editor/tpl/js/swfupload.min.js': ['modules/editor/tpl/js/swfupload.js'],
'modules/editor/tpl/js/uploader.min.js': ['modules/editor/tpl/js/uploader.js'],
'modules/editor/tpl/js/editor.min.js': ['modules/editor/tpl/js/editor.js'],
'modules/editor/tpl/js/editor_module_config.min.js': ['modules/editor/tpl/js/editor_module_config.js'],
// module/admin
'modules/admin/tpl/js/admin.min.js': ['modules/admin/tpl/js/admin.js'],
'modules/admin/tpl/js/config.min.js': ['modules/admin/tpl/js/config.js'],
'modules/admin/tpl/js/menu_setup.min.js': ['modules/admin/tpl/js/menu_setup.js'],
'modules/admin/tpl/js/sitemap.min.js': ['modules/admin/tpl/js/sitemap.js'],
'modules/admin/tpl/js/theme.min.js': ['modules/admin/tpl/js/theme.js'],
// editor-component-multimedia-link
'modules/editor/components/multimedia_link/tpl/popup.min.js': ['modules/editor/components/multimedia_link/tpl/popup.js'],
//module/board
'modules/board/tpl/js/board.min.js': ['modules/board/tpl/js/board.js'],
'modules/board/tpl/js/board_admin.min.js': ['modules/board/tpl/js/board_admin.js'],
'modules/board/skins/default/board.default.min.js': ['modules/board/skins/default/board.default.js'],
'modules/board/m.skins/default/js/mboard.min.js': ['modules/board/m.skins/default/js/mboard.js'],
'modules/board/m.skins/simpleGray/js/mboard.min.js': ['modules/board/m.skins/simpleGray/js/mboard.js'],
// editor-component-image-gallery
'modules/editor/components/image_gallery/tpl/gallery.min.js' : ['modules/editor/components/image_gallery/tpl/gallery.js'],
'modules/editor/components/image_gallery/tpl/list_gallery.min.js' : ['modules/editor/components/image_gallery/tpl/list_gallery.js'],
@ -85,7 +92,7 @@ module.exports = function(grunt) {
'addons/oembed/jquery.oembed.min.js': ['addons/oembed/jquery.oembed.js'],
'addons/oembed/oembed.min.js': ['addons/oembed/oembed.js'],
}
}
},
},
cssmin: {
'common-css': {
@ -105,11 +112,6 @@ module.exports = function(grunt) {
'modules/editor/components/image_gallery/tpl/slide_gallery.min.css': ['modules/editor/components/image_gallery/tpl/slide_gallery.css'],
}
},
'editor-component-multimedia-link': {
files: {
'modules/editor/components/multimedia_link/tpl/popup.min.css': ['modules/editor/components/multimedia_link/tpl/popup.css'],
}
},
'moudle-widget-tpl': {
files: {
'modules/widget/tpl/css/widget.min.css': ['modules/widget/tpl/css/widget.css'],
@ -131,18 +133,24 @@ module.exports = function(grunt) {
files: {
'addons/oembed/jquery.oembed.min.css': ['addons/oembed/jquery.oembed.css'],
}
},
'module-board': {
files: {
'modules/board/skins/default/board.default.min.css': ['modules/board/skins/default/board.default.css'],
'modules/board/m.skins/default/css/mboard.min.css': ['modules/board/m.skins/default/css/mboard.css'],
'modules/board/m.skins/simpleGray/css/mboard.min.css': ['modules/board/m.skins/simpleGray/css/mboard.css']
}
}
},
jshint: {
files: [
'Gruntfile.js',
'common/js/*.js', '!common/js/html5.js', '!common/js/jquery.js', '!common/js/x.js', '!common/js/xe.js',
'modules/widget/tpl/js/generate_code.js',
'modules/widget/tpl/js/widget.js',
'modules/widget/tpl/js/widget_admin.js',
'!**/jquery*.js',
'!**/*.min.js',
'!**/*-packed.js'
'modules/admin/tpl/js/*.js',
'modules/board/tpl/js/*.js',
'modules/editor/tpl/js/*.js',
'modules/menu/tpl/js/*.js',
'modules/widget/tpl/js/*.js',
],
options : {
globalstrict: false,
@ -155,9 +163,10 @@ module.exports = function(grunt) {
"window" : true
},
ignores : [
'skins/xe_2010_gallery/js/jquery.easing.1.3.js',
'skins/xe_2010_gallery/js/json2007.js',
'**/jquery*.js',
'**/swfupload.js',
'**/*.min.js',
'**/*-packed.js',
'**/*.compressed.js'
]
}
@ -220,7 +229,7 @@ module.exports = function(grunt) {
grunt.registerTask('build', '', function(A, B) {
var _only_export = false;
var tasks = ['board', 'krzip', 'syndication'];
var tasks = ['krzip', 'syndication'];
if(!A) {
grunt.fail.warn('Undefined build target.');
@ -250,9 +259,10 @@ module.exports = function(grunt) {
if(tasks.length === 0) {
grunt.util.spawn({
cmd: "tar",
args: ['cfz', 'xe.'+version+'.tar.gz', 'xe/'],
args: ['cfz', '../xe.'+version+'.tar.gz', './'],
opts: {
cwd: 'build'
cwd: 'build/xe',
cache: false
}
}, function (error, result, code) {
grunt.log.ok('Archived(full) : ' + build_dir + '/xe.'+version+'.tar.gz');
@ -260,9 +270,10 @@ module.exports = function(grunt) {
grunt.util.spawn({
cmd: "zip",
args: ['-r', 'xe.'+version+'.zip', 'xe/'],
args: ['-r', '../xe.'+version+'.zip', './'],
opts: {
cwd: 'build'
cwd: 'build/xe',
cache: false
}
}, function (error, result, code) {
grunt.log.ok('Archived(full) : ' + build_dir + '/xe.'+version+'.zip');
@ -304,8 +315,8 @@ module.exports = function(grunt) {
// changed
if(diff.length) {
var args_tar = ['archive', '--prefix=xe/', '-o', 'build/xe.'+version+'.changed.tar.gz', version];
var args_zip = ['archive', '--prefix=xe/', '-o', 'build/xe.'+version+'.changed.zip', version];
var args_tar = ['archive', '-o', 'build/xe.'+version+'.changed.tar.gz', version];
var args_zip = ['archive', '-o', 'build/xe.'+version+'.changed.zip', version];
args_tar = args_tar.concat(diff);
args_zip = args_zip.concat(diff);
@ -337,15 +348,6 @@ module.exports = function(grunt) {
cmd: "tar",
args: ['xf', 'build/temp.full.tar', '-C', 'build/xe']
}, function (error, result, code) {
// board
grunt.util.spawn({
cmd: "git",
args: ['clone', '-b', 'master', 'git@github.com:xpressengine/xe-module-board.git', 'build/xe/modules/board']
}, function (error, result, code) {
grunt.file.delete('build/xe/modules/board/.git');
taskDone();
});
// krzip
grunt.util.spawn({
cmd: "git",

View file

@ -1,12 +1,29 @@
# XpressEngine
XpressEngine
============
[![Build Status](https://travis-ci.org/xpressengine/xe-core.svg?branch=master)](https://travis-ci.org/xpressengine/xe-core)
[![License](http://img.shields.io/badge/license-GNU%20LGPL-brightgreen.svg)](http://www.gnu.org/licenses/gpl.html)
[![Latest release](http://img.shields.io/github/release/xpressengine/xe-core.svg)](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, @dionirom, @dorami, @dragan-dan, ducduydaovn, duvent, @Eundong, @florinutz, @flourscent, @flyskyko, @ForPeople, FruitsHake, guny, @haneul, hankm2004, haojilin, heemin, ikko, johnsonshu, juanlee0, k10206, kagami, @khongchi, @largeden, liahona, lickawtl, mayoojin, mglclub, @misol, mmx900, mooo, mosmartin, @nagoon97, @ngleader, nicetwo, ovclas, @qw5414, @Rayyin, risapapa, rokmcssu, royallin, rubyeye, ryin005, sanghunjun, @sejin7940, @SMaker, @solidh, sspa3141, supershop, @taggon, @ucorina, unryong, venister, wdlee91, welcomeju, @YJSoft, ysnglee2000, zero
<http://www.xpressengine.com/contributors>
## 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.

View file

@ -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);

View file

@ -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);
}

View file

@ -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
{

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -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
{

View file

@ -10,7 +10,7 @@ if(!defined('__XE__'))
* @brief Counter add-on
*/
// Execute if called_position is before_display_content
if($called_position == 'before_module_init' && Context::get('module') != 'admin' && Context::getResponseMethod() == 'HTML' && Context::isInstalled())
if($called_position == 'before_module_init' && Context::get('module') != 'admin' && Context::getResponseMethod() == 'HTML' && Context::isInstalled() && !isCrawler())
{
$oCounterController = getController('counter');
$oCounterController->counterExecute();

View file

@ -101,10 +101,11 @@ div.oembedall-githubrepos ul.oembedall-repo-stats li.oembedall-forks a {
span.oembedall-closehide{
background-color: #aaa;
background-color: #EEE;
border-radius: 2px;
cursor: pointer;
margin-right: 3px;
padding: 0 3px;
}
div.oembedall-container {

View file

@ -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=?", {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
!function(a){var b="(https?|ftp|news|telnet|irc|mms)://",c="(?:[\\w\\-]+\\.)+(?:[a-z]+)",d="(?:1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9]?[0-9])",e="(?:"+d+"\\.){3}"+d,f="(?::([0-9]+))?",g="(?:/~[\\w-]+)?",h='((?:/[\\w!"$-/:-@]+)*)',i="(?:#([\\w!-@]+))?",j=new RegExp("("+b+"("+c+"|"+e+"|localhost)"+f+g+h+i+")","ig"),k=xe.createPlugin("OEmbed",{targets:[],init:function(){this.targets=[],this.enableAutoLink=!1,this.castedOembedA=!1,this.embedSetting=[]},API_ONREADY:function(){var b=this;this.extractTargets(a(".xe_content")),this.oApp.getPlugin("autolink").length&&(this.enableAutoLink=!0),b.cast("OEMBEDA"),this.enableAutoLink||a(this.targets).each(function(){b.cast("OEMBED",[this])})},API_BEFORE_AUTOLINK:function(){var a=this;a.cast("OEMBEDA")},API_AFTER_AUTOLINK:function(a,b){this.oembed(b[0])},API_OEMBED:function(b,c){if(!this.enableAutoLink){var d=c[0];if(!a(d).parent().length||"a"==a(d).parent().get(0).nodeName.toLowerCase())return this.oembed(a(d)),void 0;var e=d.nodeValue,f=a("<span>");e=e.replace(/</g,"&lt;").replace(/>/g,"&gt;"),e=e.replace(j,'<a href="$1" target="_blank">$1</a>'),a(d).before(f),a(d).replaceWith(e),c[0]=f.next("a"),f.remove(),this.oembed(c[0])}},API_OEMBEDA:function(){if(!this.castedOembedA){var b=this;this.castedOembedA=!0,a(".read_body a").not("_oembed").each(function(){b.oembed(a(this))})}},oembed:function(b){var c=this;this.embedSetting.maxWidth||(this.embedSetting.maxWidth=a(".xe_content").width()),b&&(b&&3==b.nodeType&&(b=a(b)),b.oembed(null,c.embedSetting).addClass("_oembed"))},extractTargets:function(b){var c=this,d=a(".xe_content",b);return d.length?(this.extractTargets(d),void 0):(a(b).contents().each(function(){var b=this.nodeName.toLowerCase();if(-1==a.inArray(b,["a","pre","xml","textarea","input","select","option","code","script","style","iframe","button","img","embed","object","ins"]))if(j.exec(""),3==this.nodeType){var d=this.nodeValue;if(d.length<5)return;if(!/(http|https|ftp|news|telnet|irc|mms):\/\//i.test(d))return;c.targets.push(this)}else c.extractTargets(this)}),void 0)}});xe.registerPlugin(new k)}(jQuery);
!function(a){var b="(https?|ftp|news|telnet|irc|mms)://",c="(?:[\\w\\-]+\\.)+(?:[a-z]+)",d="(?:1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9]?[0-9])",e="(?:"+d+"\\.){3}"+d,f="(?::([0-9]+))?",g="(?:/~[\\w-]+)?",h='((?:/[\\w!"$-/:-@]+)*)',i="(?:#([\\w!-@]+))?",j=new RegExp("("+b+"("+c+"|"+e+"|localhost)"+f+g+h+i+")","ig"),k=xe.createPlugin("OEmbed",{targets:[],init:function(){this.targets=[],this.enableAutoLink=!1,this.castedOembedA=!1,this.embedSetting=[]},API_ONREADY:function(){var b=this;this.extractTargets(a(".xe_content")),this.oApp.getPlugin("autolink").length&&(this.enableAutoLink=!0),b.cast("OEMBEDA"),this.enableAutoLink||a(this.targets).each(function(){b.cast("OEMBED",[this])})},API_BEFORE_AUTOLINK:function(){var a=this;a.cast("OEMBEDA")},API_AFTER_AUTOLINK:function(a,b){this.oembed(b[0])},API_OEMBED:function(b,c){if(!this.enableAutoLink){var d=c[0];if(!a(d).parent().length||"a"==a(d).parent().get(0).nodeName.toLowerCase())return void this.oembed(a(d));var e=d.nodeValue,f=a("<span>");e=e.replace(/</g,"&lt;").replace(/>/g,"&gt;"),e=e.replace(j,'<a href="$1" target="_blank">$1</a>'),a(d).before(f),a(d).replaceWith(e),c[0]=f.next("a"),f.remove(),this.oembed(c[0])}},API_OEMBEDA:function(){if(!this.castedOembedA){var b=this;this.castedOembedA=!0,a(".read_body a").not("_oembed").each(function(){b.oembed(a(this))})}},oembed:function(b){var c=this;this.embedSetting.maxWidth||(this.embedSetting.maxWidth=a(".xe_content").width()),b&&(b&&3==b.nodeType&&(b=a(b)),b.oembed(null,c.embedSetting).addClass("_oembed"))},extractTargets:function(b){var c=this,d=a(".xe_content",b);return d.length?void this.extractTargets(d):void a(b).contents().each(function(){var b=this.nodeName.toLowerCase();if(-1==a.inArray(b,["a","pre","xml","textarea","input","select","option","code","script","style","iframe","button","img","embed","object","ins"]))if(j.exec(""),3==this.nodeType){var d=this.nodeValue;if(d.length<5)return;if(!/(http|https|ftp|news|telnet|irc|mms):\/\//i.test(d))return;c.targets.push(this)}else c.extractTargets(this)})}});xe.registerPlugin(new k)}(jQuery);

View file

@ -1 +1 @@
!function(a){function b(){var b,c,e,f,g,h=a(document.body);return d?(b=a("#xe_gallery_controls"),c=a("#xe_gallery_holder"),e=a("#xe_gallery_closebtn"),f=a("#xe_gallery_prevbtn"),g=a("#xe_gallery_nextbtn")):(d=a("<div>").attr("id","xe_gallery_screen").css({position:"fixed",display:"none",backgroundColor:"black",zIndex:500,opacity:.7}),b=a("<div>").attr("id","xe_gallery_controls").css({position:"fixed",display:"none",overflow:"hidden",zIndex:510}),f=a('<button type="button" id="xe_gallery_prevbtn" />').css({left:"10px",backgroundPosition:"0 -64px"}).click(function(){d.xePrev()}).appendTo(b),e=a('<button type="button" id="xe_gallery_closebtn" />').css({top:"10px",backgroundPosition:"0 0"}).click(function(){d.xeHide()}).appendTo(b),g=a('<button type="button" id="xe_gallery_nextbtn" />').attr("id","xe_gallery_nextbtn").css({right:"10px",backgroundPosition:"0 -128px"}).click(function(){d.xeNext()}).appendTo(b),b.find(">button").css({position:"absolute",width:"64px",height:"64px",zIndex:530,cursor:"pointer",border:0,margin:0,padding:0,backgroundColor:"transparent",backgroundImage:"url("+request_uri+"addons/resize_image/btn.png)",backgroundRepeat:"no-repeat",opacity:".5",filter:"alpha(opacity=50)"}).mouseover(function(){a(this).css({opacity:"1",filter:"alpha(opacity=100)"})}).mouseout(function(){a(this).css({opacity:".5",filter:"alpha(opacity=50)"})}).focus(function(){a(this).trigger("mouseover")}).blur(function(){a(this).trigger("mouseout")}),c=a("<img>").attr("id","xe_gallery_holder").css({border:"5px solid white",zindex:520,maxWidth:"none",borderRadius:"5px",boxShadow:"0 0 10px #000"}).appendTo(b).draggable(),h.append(d).append(b),d.xeShow=function(){var b=(a(window).width(),a(window).height());a("#xe_gallery_controls,#xe_gallery_screen").show().css({top:0,right:0,bottom:0,left:0}),a("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top",Math.round(b/2-32)+"px"),this.xeMove(0)},d.xeHide=function(){d.hide(),b.hide()},d.xePrev=function(){this.xeMove(-1)},d.xeNext=function(){this.xeMove(1)},d.xeMove=function(b){var d=a(window).width(),h=a(window).height();this.index+=b,f.css("visibility",this.index>0?"visible":"hidden"),g.css("visibility",this.index<this.list.size()-1?"visible":"hidden");var i=this.list.eq(this.index).attr("rawsrc");i||(i=this.list.eq(this.index).attr("src")),c.attr("src",i).css({left:d/2-c.width()/2+"px",top:h/2-c.height()/2+"px"}),e.css({left:d/2-32+"px",top:"10px"}).focus()},a(document).keydown(function(a){return 27==a.which?(d.xeHide(),!1):!0})),d}function c(){var c=a(this).closest(".xe_content"),d=c.find("img[rel=xe_gallery]"),e=a.inArray(a(this).get(0),d.get()),f=b();f.list=d,f.index=e,f.xeShow()}var d=null;a(window).load(function(){function b(a,c){if(c||(c=0),!(c>=10)){var d=this,e={width:d.width(),height:d.height()};if(!e.width||!e.height)return setTimeout(function(){b.call(d,a,++c)},200),void 0;if(!(e.width<=a)){var f=a/e.width;d.removeAttr("width").removeAttr("height").css({width:a,height:parseInt(e.height*f,10)})}}}var d=/(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i,e=/(?:common\/tpl\/images\/blank\.gif$)/i,f=a('<div style="height:1px;overflow:hidden;opacity:0;display:block;clear:both"></div>');a(".xe_content").each(function(){var g=f.appendTo(this).width();f.remove(),g&&(a("img",this).each(function(){var c=a(this),f=c.attr("src");(!d.test(f)||e.test(f))&&(c.attr("rel","xe_gallery"),b.call(c,g))}),a("img[rel=xe_gallery]",this).live("mouseover",function(){var b=a(this);b.parent("a").length||b.attr("onclick")||b.css("cursor","pointer").click(c)}))})})}(jQuery);
!function(a){function b(){var b,c,e,f,g,h=a(document.body);return d?(b=a("#xe_gallery_controls"),c=a("#xe_gallery_holder"),e=a("#xe_gallery_closebtn"),f=a("#xe_gallery_prevbtn"),g=a("#xe_gallery_nextbtn")):(d=a("<div>").attr("id","xe_gallery_screen").css({position:"fixed",display:"none",backgroundColor:"black",zIndex:500,opacity:.7}),b=a("<div>").attr("id","xe_gallery_controls").css({position:"fixed",display:"none",overflow:"hidden",zIndex:510}),f=a('<button type="button" id="xe_gallery_prevbtn" />').css({left:"10px",backgroundPosition:"0 -64px"}).click(function(){d.xePrev()}).appendTo(b),e=a('<button type="button" id="xe_gallery_closebtn" />').css({top:"10px",backgroundPosition:"0 0"}).click(function(){d.xeHide()}).appendTo(b),g=a('<button type="button" id="xe_gallery_nextbtn" />').attr("id","xe_gallery_nextbtn").css({right:"10px",backgroundPosition:"0 -128px"}).click(function(){d.xeNext()}).appendTo(b),b.find(">button").css({position:"absolute",width:"64px",height:"64px",zIndex:530,cursor:"pointer",border:0,margin:0,padding:0,backgroundColor:"transparent",backgroundImage:"url("+request_uri+"addons/resize_image/btn.png)",backgroundRepeat:"no-repeat",opacity:".5",filter:"alpha(opacity=50)"}).mouseover(function(){a(this).css({opacity:"1",filter:"alpha(opacity=100)"})}).mouseout(function(){a(this).css({opacity:".5",filter:"alpha(opacity=50)"})}).focus(function(){a(this).trigger("mouseover")}).blur(function(){a(this).trigger("mouseout")}),c=a("<img>").attr("id","xe_gallery_holder").css({border:"5px solid white",zindex:520,maxWidth:"none",borderRadius:"5px",boxShadow:"0 0 10px #000"}).appendTo(b).draggable(),h.append(d).append(b),d.xeShow=function(){var b=(a(window).width(),a(window).height());a("#xe_gallery_controls,#xe_gallery_screen").show().css({top:0,right:0,bottom:0,left:0}),a("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top",Math.round(b/2-32)+"px"),this.xeMove(0)},d.xeHide=function(){d.hide(),b.hide()},d.xePrev=function(){this.xeMove(-1)},d.xeNext=function(){this.xeMove(1)},d.xeMove=function(b){var d=a(window).width(),h=a(window).height();this.index+=b,f.css("visibility",this.index>0?"visible":"hidden"),g.css("visibility",this.index<this.list.size()-1?"visible":"hidden");var i=this.list.eq(this.index).attr("rawsrc");i||(i=this.list.eq(this.index).attr("src")),c.attr("src",i).css({left:d/2-c.width()/2+"px",top:h/2-c.height()/2+"px"}),e.css({left:d/2-32+"px",top:"10px"}).focus()},a(document).keydown(function(a){return 27==a.which?(d.xeHide(),!1):!0})),d}function c(){var c=a(this).closest(".xe_content"),d=c.find("img[rel=xe_gallery]"),e=a.inArray(a(this).get(0),d.get()),f=b();f.list=d,f.index=e,f.xeShow()}var d=null;a(window).load(function(){function b(a,c){if(c||(c=0),!(c>=10)){var d=this,e={width:d.width(),height:d.height()};if(!e.width||!e.height)return void setTimeout(function(){b.call(d,a,++c)},200);if(!(e.width<=a)){var f=a/e.width;d.removeAttr("width").removeAttr("height").css({width:a,height:parseInt(e.height*f,10)})}}}var d=/(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i,e=/(?:common\/tpl\/images\/blank\.gif$)/i,f=a('<div style="height:1px;overflow:hidden;opacity:0;display:block;clear:both"></div>');a(".xe_content").each(function(){var g=f.appendTo(this).width();f.remove(),g&&(a("img",this).each(function(){var c=a(this),f=c.attr("src");(!d.test(f)||e.test(f))&&(c.attr("rel","xe_gallery"),b.call(c,g))}),a("img[rel=xe_gallery]",this).live("mouseover",function(){var b=a(this);b.parent("a").length||b.attr("onclick")||b.css("cursor","pointer").click(c)}))})})}(jQuery);

View file

@ -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())
{

View file

@ -420,7 +420,7 @@ body,table,input,textarea,select,button{font-family:나눔고딕,NanumGothic,NG,
<li id="UMAN_config_general_db_session">인증 세션 DB 사용: 인증 시 사용되는 PHP 세션을 DB로 사용하는 기능입니다. 웹서버의 사용률이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다. 단, 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.</li>
<li id="UMAN_config_general_qmail">Qmail 호환: Qmail등 CRLF를 줄 구분자로 인식하지 못하는 MTA에서 메일이 발송되도록 합니다.</li>
<li id="UMAN_config_general_sitelock">사이트 잠금: 지정한 IP 외 접근을 차단할 수 있습니다.</li>
<li id="UMAN_config_general_sitelock_whitelist">접근 허용 IP: 이곳에 관리자의 IP가 반드시 포함되어야 합니다. 만약 접근이 차단된 경우 './files/config/db.config.php' 파일에서 `$db_info->use_sitelock`를 'N'으로 변경하여 차단을 해제할 수 있습니다.</li>
<li id="UMAN_config_general_sitelock_whitelist">접근 허용 IP: 이곳에 관리자의 IP가 반드시 포함되어야 합니다. 만약 접근이 차단된 경우 './files/config/db.config.php' 파일에서 `'use_sitelock' => 'Y'`를 `'use_sitelock' => 'N'`으로 변경하여 차단을 해제할 수 있습니다.</li>
</ul>
</dd>
<dt id="UMAN_config_ftp">FTP 설정</dt>
@ -441,6 +441,23 @@ body,table,input,textarea,select,button{font-family:나눔고딕,NanumGothic,NG,
<dd>파일박스를 관리할 수 있습니다. 파일박스는 관리자가 재사용할 수 있는 이미지 파일을 관리하는 기능입니다. 회원 그룹 아이콘을 등록하면 이미지 파일은 파일박스에 업로드됩니다.</dd>
</dl>
</section>
<section class="h3">
<h1 id="UMAN_config_embed_filter">embed Filter</h1>
<p>&lt;iframe&gt; 또는 &lt;object&gt;, &lt;embed&gt; 태그에 허용 할 URL을 지정할 수 있습니다.<br>주로 domain을 포함한 URL을 지정하여 허용 URL을 지정할 수 있습니다.</p>
<p>domain을 포함하지 않은 짧거나 단순한 단어('video', 'swf' 등)만을 지정할 경우 손쉽게 악의적인 접근을 시도할 수 있으니 주의해야 합니다.</p>
<dl>
<dt id="UMAN_config_embed_filter_iframe">iFrame</dt>
<dd>
<p>&lt;iframe&gt; 태그에 허용 할 URL을 지정할 수 있습니다.</p>
<p>예시 : 'http://www.youtube.com/v/...'와 같은 URL을 &lt;iframe&gt;에 허용 하려면 'http://www.youtube.com/v/'처럼 입력하면 됩니다.</p>
</dd>
<dt id="UMAN_config_embed_filter_object">object / embed</dt>
<dd>
<p>&lt;object&gt;, &lt;embed&gt; 태그에 허용 할 URL을 지정할 수 있습니다.</p>
<p>주로 domain을 포함한 URL을 지정하여 허용 URL을 지정할 수 있습니다.<br>예시 : 'http://www.youtube.com/v/...'와 같은 URL을 &lt;object&gt;, &lt;embed&gt;에 허용 하려면 'http://www.youtube.com/v/'처럼 입력하면 됩니다.</p>
</dd>
</dl>
</section>
<section class="h3">
<h1 id="UMAN_advanced">고급</h1>
<dl>

View file

@ -8,6 +8,8 @@
* */
class CacheApc extends CacheBase
{
public static $isSupport = false;
/**
* Get instance of CacheApc
*
@ -30,7 +32,6 @@ class CacheApc extends CacheBase
*/
function CacheApc()
{
}
/**
@ -40,7 +41,7 @@ class CacheApc extends CacheBase
*/
function isSupport()
{
return function_exists('apc_add');
return self::$isSupport;
}
/**
@ -83,7 +84,7 @@ class CacheApc extends CacheBase
if($modified_time > 0 && $modified_time > $obj[0])
{
$this->_delete($_key);
$this->delete($key);
return false;
}
@ -109,24 +110,13 @@ class CacheApc extends CacheBase
if($modified_time > 0 && $modified_time > $obj[0])
{
$this->_delete($_key);
$this->delete($key);
return false;
}
return $obj[1];
}
/**
* Delete variable from the cache(private)
*
* @param string $_key Used to store the value.
* @return void
*/
function _delete($_key)
{
$this->put($_key, null, 1);
}
/**
* Delete variable from the cache
*
@ -135,7 +125,8 @@ class CacheApc extends CacheBase
*/
function delete($key)
{
$this->_delete($key);
$_key = md5(_XE_PATH_ . $key);
return apc_delete($_key);
}
/**
@ -148,6 +139,16 @@ class CacheApc extends CacheBase
return apc_clear_cache('user');
}
/**
* @DEPRECATED
*/
function _delete($key)
{
return $this->delete($key);
}
}
CacheApc::$isSupport = function_exists('apc_add');
/* End of file CacheApc.class.php */
/* Location: ./classes/cache/CacheApc.class.php */

View file

@ -6,7 +6,7 @@
*
* Filedisk Cache Handler
*
* @author Arnia Software (xe_dev@arnia.ro)
* @author NAVER (developers@xpressengine.com)
*/
class CacheFile extends CacheBase
{
@ -90,8 +90,15 @@ class CacheFile extends CacheBase
function isValid($key, $modified_time = 0)
{
$cache_file = $this->getCacheFileName($key);
if(file_exists($cache_file))
{
if($modified_time > 0 && filemtime($cache_file) < $modified_timed)
{
FileHandler::removeFile($cache_file);
return false;
}
return true;
}
@ -107,15 +114,19 @@ class CacheFile extends CacheBase
*/
function get($key, $modified_time = 0)
{
$cache_file = FileHandler::exists($this->getCacheFileName($key));
if($cache_file) $content = include($cache_file);
if(!$content)
if(!$cache_file = FileHandler::exists($this->getCacheFileName($key)))
{
return false;
}
if($modified_time > 0 && filemtime($cache_file) < $modified_timed)
{
FileHandler::removeFile($cache_file);
return false;
}
$content = include($cache_file);
return unserialize(stripslashes($content));
}

View file

@ -56,10 +56,11 @@ class CacheMemcache extends CacheBase
*/
function isSupport()
{
if($GLOBALS['XE_MEMCACHE_SUPPORT'])
if(isset($GLOBALS['XE_MEMCACHE_SUPPORT']))
{
return true;
}
if($this->Memcache->set('xe', 'xe', MEMCACHE_COMPRESSED, 1))
{
$GLOBALS['XE_MEMCACHE_SUPPORT'] = true;
@ -68,6 +69,7 @@ class CacheMemcache extends CacheBase
{
$GLOBALS['XE_MEMCACHE_SUPPORT'] = false;
}
return $GLOBALS['XE_MEMCACHE_SUPPORT'];
}

View file

@ -10,6 +10,8 @@
*/
class CacheWincache extends CacheBase
{
public static $isSupport = false;
/**
* Get instance of CacheWincache
*
@ -32,7 +34,6 @@ class CacheWincache extends CacheBase
*/
function CacheWincache()
{
}
/**
@ -42,7 +43,7 @@ class CacheWincache extends CacheBase
*/
function isSupport()
{
return function_exists('wincache_ucache_set');
return self::$isSupport;
}
/**
@ -150,7 +151,8 @@ class CacheWincache extends CacheBase
{
return wincache_ucache_clear();
}
}
CacheWincache::$isSupport = function_exists('wincache_ucache_set');
/* End of file CacheWincache.class.php */
/* Location: ./classes/cache/CacheWincache.class.php */

View file

@ -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();
@ -227,14 +230,30 @@ class Context
define('_XE_SITELOCK_MESSAGE_', $message);
header("HTTP/1.1 403 Forbidden");
include _XE_PATH_ . 'common/tpl/sitelock.html';
if(FileHandler::exists(_XE_PATH_ . 'common/tpl/sitelock.user.html'))
{
include _XE_PATH_ . 'common/tpl/sitelock.user.html';
}
else
{
include _XE_PATH_ . 'common/tpl/sitelock.html';
}
exit;
}
}
// check if using rewrite module
$this->allow_rewrite = ($this->db_info->use_rewrite == 'Y' ? TRUE : FALSE);
// If XE is installed, get virtual site information
if(self::isInstalled())
{
// If using rewrite module, initializes router
if($this->allow_rewrite)
{
Router::proc();
}
$oModuleModel = getModel('module');
$site_module_info = $oModuleModel->getDefaultMid();
@ -318,11 +337,9 @@ class Context
array(&$oSessionController, 'open'), array(&$oSessionController, 'close'), array(&$oSessionModel, 'read'), array(&$oSessionController, 'write'), array(&$oSessionController, 'destroy'), array(&$oSessionController, 'gc')
);
}
if($sess = $_POST[session_name()]) session_id($sess);
session_start();
if($sess = $_POST[session_name()])
{
session_id($sess);
}
// set authentication information in Context and session
if(self::isInstalled())
@ -355,9 +372,6 @@ class Context
$this->lang = &$GLOBALS['lang'];
$this->loadLang(_XE_PATH_ . 'common/lang/');
// check if using rewrite module
$this->allow_rewrite = ($this->db_info->use_rewrite == 'Y' ? TRUE : FALSE);
// set locations for javascript use
if($_SERVER['REQUEST_METHOD'] == 'GET')
{
@ -1056,6 +1070,7 @@ class Context
*/
function convertEncodingStr($str)
{
if(!$str) return null;
$obj = new stdClass();
$obj->str = $str;
$obj = self::convertEncoding($obj);
@ -1115,6 +1130,22 @@ class Context
($self->request_method = $_SERVER['REQUEST_METHOD']);
}
/**
* handle global arguments
*
* @return void
*/
function _checkGlobalVars()
{
$this->_recursiveCheckVar($_SERVER['HTTP_HOST']);
$pattern = "/[\,\"\'\{\}\[\]\(\);$]/";
if(preg_match($pattern, $_SERVER['HTTP_HOST']))
{
$this->isSuccessInit = FALSE;
}
}
/**
* handle request areguments for GET/POST
*
@ -1250,31 +1281,35 @@ class Context
$val = array($val);
}
$result = array();
foreach($val as $k => $v)
{
$k = htmlentities($k);
if($key === 'page' || $key === 'cpage' || substr_compare($key, 'srl', -3) === 0)
{
$val[$k] = !preg_match('/^[0-9,]+$/', $v) ? (int) $v : $v;
$result[$k] = !preg_match('/^[0-9,]+$/', $v) ? (int) $v : $v;
}
elseif($key === 'mid' || $key === 'vid' || $key === 'search_keyword')
{
$val[$k] = htmlspecialchars($v, ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE);
$result[$k] = htmlspecialchars($v, ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE);
}
else
{
$result[$k] = $v;
if($do_stripslashes && version_compare(PHP_VERSION, '5.9.0', '<') && get_magic_quotes_gpc())
{
$v = stripslashes($v);
$result[$k] = stripslashes($result[$k]);
}
if(!is_array($v))
if(!is_array($result[$k]))
{
$val[$k] = trim($v);
$result[$k] = trim($result[$k]);
}
}
}
return $isArray ? $val : $val[0];
return $isArray ? $result : $result[0];
}
/**
@ -1535,7 +1570,9 @@ class Context
'act.document_srl.key.mid.vid' => ($act == 'trackback') ? "$vid/$mid/$srl/$key/$act" : ''
);
$query = $target_map[$target];
Router::setMap($target_map);
$query = Router::makePrettyUrl($target);
}
if(!$query)

View file

@ -447,7 +447,8 @@ class DB
$log['act'] = Context::get('act');
$log['time'] = date('Y-m-d H:i:s');
$bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$bt = version_compare(PHP_VERSION, '5.3.6', '>=') ? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) : debug_backtrace();
foreach($bt as $no => $call)
{
if($call['function'] == 'executeQuery' || $call['function'] == 'executeQueryArray')
@ -455,6 +456,7 @@ class DB
$call_no = $no;
$call_no++;
$log['called_file'] = $bt[$call_no]['file'].':'.$bt[$call_no]['line'];
$log['called_file'] = str_replace(_XE_PATH_ , '', $log['called_file']);
$call_no++;
$log['called_method'] = $bt[$call_no]['class'].$bt[$call_no]['type'].$bt[$call_no]['function'];
break;
@ -487,20 +489,12 @@ class DB
$this->setQueryLog($log);
// if __LOG_SLOW_QUERY__ if defined, check elapsed time and leave query log
if(__LOG_SLOW_QUERY__ > 0 && $elapsed_time > __LOG_SLOW_QUERY__)
{
$buff = '';
$log_file = _XE_PATH_ . 'files/_db_slow_query.php';
if(!file_exists($log_file))
{
$buff = '<?php exit(); ?' . '>' . "\n";
}
$buff .= sprintf("%s\t%s\n\t%0.6f sec\tquery_id:%s\n\n", date("Y-m-d H:i"), $this->query, $elapsed_time, $this->query_id);
@file_put_contents($log_file, $buff, FILE_APPEND|LOCK_EX);
}
$log_args = new stdClass;
$log_args->query = $this->query;
$log_args->query_id = $this->query_id;
$log_args->caller = $log['called_method'] . '() in ' . $log['called_file'];
$log_args->connection = $log['connection'];
writeSlowlog('query', $elapsed_time, $log_args);
}
/**

View file

@ -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',
);

View file

@ -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

View file

@ -39,12 +39,12 @@ class DisplayHandler extends Handler
// Extract contents to display by the request method
if(Context::get('xeVirtualRequestMethod') == 'xml')
{
require_once("./classes/display/VirtualXMLDisplayHandler.php");
require_once(_XE_PATH_ . "classes/display/VirtualXMLDisplayHandler.php");
$handler = new VirtualXMLDisplayHandler();
}
else if(Context::getRequestMethod() == 'XMLRPC')
{
require_once("./classes/display/XMLDisplayHandler.php");
require_once(_XE_PATH_ . "classes/display/XMLDisplayHandler.php");
$handler = new XMLDisplayHandler();
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE)
{
@ -53,17 +53,17 @@ class DisplayHandler extends Handler
}
else if(Context::getRequestMethod() == 'JSON')
{
require_once("./classes/display/JSONDisplayHandler.php");
require_once(_XE_PATH_ . "classes/display/JSONDisplayHandler.php");
$handler = new JSONDisplayHandler();
}
else if(Context::getRequestMethod() == 'JS_CALLBACK')
{
require_once("./classes/display/JSCallbackDisplayHandler.php");
require_once(_XE_PATH_ . "classes/display/JSCallbackDisplayHandler.php");
$handler = new JSCallbackDisplayHandler();
}
else
{
require_once("./classes/display/HTMLDisplayHandler.php");
require_once(_XE_PATH_ . "classes/display/HTMLDisplayHandler.php");
$handler = new HTMLDisplayHandler();
}
@ -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())
)
)
),
@ -291,7 +292,7 @@ class DisplayHandler extends Handler
$buff = 'The IP address is not allowed. Change the value of __DEBUG_PROTECT_IP__ into your IP address in config/config.user.inc.php or config/config.inc.php';
}
return "<!--\r\n" . implode("\r\n", $buff) . "\r\n-->";
return "<!--\r\n" . $buff . "\r\n-->";
}
// Output to a file

View file

@ -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,10 +394,10 @@ class HTMLDisplayHandler
$lang_type = Context::getLangType();
// add common JS/CSS files
if(__DEBUG__)
if(__DEBUG__ || !__XE_VERSION_STABLE__)
{
$oContext->loadFile(array('./common/js/jquery.js', 'head', '', -110000), true);
$oContext->loadFile(array('./common/js/jquery-1.x.js', 'head', 'lt IE 9', -109000), true);
$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);
$oContext->loadFile(array('./common/js/x.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/common.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/js_app.js', 'head', '', -100000), true);
@ -407,8 +407,8 @@ class HTMLDisplayHandler
}
else
{
$oContext->loadFile(array('./common/js/jquery.min.js', 'head', '', -110000), true);
$oContext->loadFile(array('./common/js/jquery-1.x.min.js', 'head', 'lt IE 9', -109000), true);
$oContext->loadFile(array('./common/js/jquery-1.x.min.js', 'head', 'lt IE 9', -111000), true);
$oContext->loadFile(array('./common/js/jquery.min.js', 'head', 'gte IE 9', -110000), true);
$oContext->loadFile(array('./common/js/x.min.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/xe.min.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/css/xe.min.css', '', '', -1000000), 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,12 +449,25 @@ 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);
$oContext->loadFile(array('./common/js/x.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/common.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/js_app.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/xml_handler.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/xml_js_filter.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/css/xe.css', '', '', -1000000), true);
$oContext->loadFile(array('./common/css/mobile.css', '', '', -1000000), true);
}
else
{
$oContext->loadFile(array('./common/js/jquery-1.x.min.js', 'head', 'lt IE 9', -111000), true);
$oContext->loadFile(array('./common/js/jquery.min.js', 'head', 'gte IE 9', -110000), true);
$oContext->loadFile(array('./common/js/x.min.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/js/xe.min.js', 'head', '', -100000), true);
$oContext->loadFile(array('./common/css/xe.min.css', '', '', -1000000), true);
$oContext->loadFile(array('./common/css/mobile.min.css', '', '', -1000000), true);
}
}

View file

@ -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>';
}

View file

@ -230,9 +230,9 @@ class FileHandler
$path = self::getRealPath($path);
$output = array();
if(substr($path, -1) != DIRECTORY_SEPARATOR)
if(substr($path, -1) != '/')
{
$path .= DIRECTORY_SEPARATOR;
$path .= '/';
}
if(!is_dir($path))
@ -263,7 +263,7 @@ class FileHandler
$file = sprintf('%s%s', str_replace(_XE_PATH_, '', $path), $file);
}
$output[] = $file;
$output[] = str_replace(array('/\\', '//'), '/', $file);
}
return $output;
@ -515,7 +515,7 @@ class FileHandler
* @param string $post_data Request arguments array for POST method
* @return string If success, the content of the target file. Otherwise: none
*/
function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array())
function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array(), $request_config = array())
{
try
{
@ -533,6 +533,15 @@ class FileHandler
else
{
$oRequest = new HTTP_Request($url);
if(count($request_config) && method_exists($oRequest, 'setConfig'))
{
foreach($request_config as $key=>$val)
{
$oRequest->setConfig($key, $val);
}
}
if(count($headers) > 0)
{
foreach($headers as $key => $val)
@ -640,7 +649,7 @@ class FileHandler
break;
}
return (int) $val;
return $val;
}
/**
@ -1008,6 +1017,33 @@ class FileHandler
$path = self::getRealPath($path);
return is_dir($path) ? $path : FALSE;
}
/**
* Check is writable dir
*
* @param string $path Target dir path
* @return bool
*/
function isWritableDir($path)
{
$path = self::getRealPath($path);
if(is_dir($path)==FALSE)
{
return FALSE;
}
$checkFile = $path . '/_CheckWritableDir';
$fp = fopen($checkFile, 'w');
if(!is_resource($fp))
{
return FALSE;
}
fclose($fp);
self::removeFile($checkFile);
return TRUE;
}
}
/* End of file FileHandler.class.php */

View file

@ -8,7 +8,7 @@
class FrontEndFileHandler extends Handler
{
static $isSSL = FALSE;
static $isSSL = null;
/**
* Map for css
@ -50,12 +50,13 @@ class FrontEndFileHandler extends Handler
* Check SSL
*
* @return bool If using ssl returns true, otherwise returns false.
* @deprecated
*/
function isSsl()
{
if(self::$isSSL)
if(!is_null(self::$isSSL))
{
return TRUE;
return self::$isSSL;
}
$url_info = parse_url(Context::getRequestUrl());
@ -160,7 +161,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));

View file

@ -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');
@ -148,7 +162,7 @@ class XEHttpRequest
$is_chunked = FALSE;
while(strlen(trim($line = fgets($sock))))
{
list($equiv, $content) = preg_split('/ *: */', rtrim($line), 1);
list($equiv, $content) = preg_split('/ *: */', rtrim($line), 2);
if(!strcasecmp($equiv, 'Transfer-Encoding') && $content == 'chunked')
{
$is_chunked = TRUE;
@ -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

View file

@ -45,8 +45,12 @@ class ModuleHandler extends Handler
$oContext = Context::getInstance();
if($oContext->isSuccessInit == FALSE)
{
$this->error = 'msg_invalid_request';
return;
$logged_info = Context::get('logged_info');
if($logged_info->is_admin != "Y")
{
$this->error = 'msg_invalid_request';
return;
}
}
// Set variables from request arguments
@ -55,7 +59,10 @@ class ModuleHandler extends Handler
$this->mid = $mid ? $mid : Context::get('mid');
$this->document_srl = $document_srl ? (int) $document_srl : (int) Context::get('document_srl');
$this->module_srl = $module_srl ? (int) $module_srl : (int) Context::get('module_srl');
$this->entry = Context::convertEncodingStr(Context::get('entry'));
if($entry = Context::get('entry'))
{
$this->entry = Context::convertEncodingStr($entry);
}
// Validate variables to prevent XSS
$isInvalid = NULL;
@ -84,7 +91,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;
}
}
@ -105,6 +116,10 @@ class ModuleHandler extends Handler
* */
function init()
{
$oModuleModel = getModel('module');
$site_module_info = Context::get('site_module_info');
// if success_return_url and error_return_url is incorrect
$urls = array(Context::get('success_return_url'), Context::get('error_return_url'));
foreach($urls as $url)
@ -121,15 +136,12 @@ class ModuleHandler extends Handler
$defaultUrlInfo = parse_url($dbInfo->default_url);
$defaultHost = $defaultUrlInfo['host'];
if($host && $host != $defaultHost)
if($host && ($host != $defaultHost && $host != $site_module_info->domain))
{
throw new Exception('msg_default_url_is_null');
}
}
$oModuleModel = getModel('module');
$site_module_info = Context::get('site_module_info');
if(!$this->document_srl && $this->mid && $this->entry)
{
$oDocumentModel = getModel('document');
@ -154,15 +166,22 @@ class ModuleHandler extends Handler
{
// If it exists, compare mid based on the module information
// if mids are not matching, set it as the document's mid
if(($this->mid && $this->mid != $module_info->mid) || ($this->module_srl && $this->module_srl != $module_info->module_srl))
if(!$this->mid || ($this->mid != $module_info->mid))
{
$this->mid = $module_info->mid;
$this->module_srl = $module_info->module_srl;
Context::set('mid', $module_info->mid, TRUE);
header('location:' . getNotEncodedSiteUrl($site_info->domain, 'mid', $this->mid, 'document_srl', $this->document_srl, 'module_srl',''));
return FALSE;
}
if(Context::getRequestMethod() == 'GET')
{
$this->mid = $module_info->mid;
header('location:' . getNotEncodedSiteUrl($site_info->domain, 'mid', $this->mid, 'document_srl', $this->document_srl));
return FALSE;
}
else
{
$this->mid = $module_info->mid;
Context::set('mid', $this->mid);
}
}
// if requested module is different from one of the document, remove the module information retrieved based on the document number
if($this->module && $module_info->module != $this->module)
{
@ -532,7 +551,6 @@ class ModuleHandler extends Handler
}
$xml_info = $oModuleModel->getModuleActionXml($forward->module);
$oMemberModel = getModel('member');
if($this->module == "admin" && $type == "view")
{
@ -561,7 +579,7 @@ class ModuleHandler extends Handler
if($kind == 'admin')
{
$grant = $oModuleModel->getGrant($this->module_info, $logged_info);
if(!$grant->is_admin && !$grant->manager)
if(!$grant->manager)
{
$this->_setInputErrorToContext();
$this->error = 'msg_is_not_manager';
@ -571,6 +589,19 @@ class ModuleHandler extends Handler
$oMessageObject->dispMessage();
return $oMessageObject;
}
else
{
if(!$grant->is_admin && $this->module != $this->orig_module->module && $xml_info->permission->{$this->act} != 'manager')
{
$this->_setInputErrorToContext();
$this->error = 'msg_is_not_administrator';
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view');
$oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage();
return $oMessageObject;
}
}
}
}
else if($xml_info->default_index_act && method_exists($oModule, $xml_info->default_index_act))
@ -1013,7 +1044,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))
@ -1031,7 +1062,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;
}
@ -1130,6 +1161,13 @@ class ModuleHandler extends Handler
return new Object();
}
//store before trigger call time
$before_trigger_time = NULL;
if(__LOG_SLOW_TRIGGER__> 0)
{
$before_trigger_time = microtime(true);
}
foreach($triggers as $item)
{
$module = $item->module;
@ -1143,7 +1181,19 @@ class ModuleHandler extends Handler
continue;
}
$before_each_trigger_time = microtime(true);
$output = $oModule->{$called_method}($obj);
$after_each_trigger_time = microtime(true);
$elapsed_time_trigger = $after_each_trigger_time - $before_each_trigger_time;
$slowlog = new stdClass;
$slowlog->caller = $trigger_name . '.' . $called_position;
$slowlog->called = $module . '.' . $called_method;
$slowlog->called_extension = $module;
if($trigger_name != 'XE.writeSlowlog') writeSlowlog('trigger', $elapsed_time_trigger, $slowlog);
if(is_object($output) && method_exists($output, 'toBool') && !$output->toBool())
{
return $output;

View file

@ -165,7 +165,7 @@ class Object
}
/**
* Method to retrieve an object containing a key/value paris
* Method to retrieve an object containing a key/value pairs
*
* @return Object Returns an object containing key/value pairs
*/

View file

@ -0,0 +1,253 @@
<?php
/**
* @file Router.class.php
* @brief Parses URIs and determines routing
* @author FunnyXE (admin@funnyxe.com)
*/
class Router
{
/**
* URI Segments
* @var array
*/
private static $segments = array();
/**
* Routes
* @var array
*/
private static $routes = array(
// rss , blogAPI
'(rss|atom)' => array('module' => 'rss', 'act' => '$1', '[L]' => TRUE),
'([a-zA-Z0-9_]+)/(rss|atom|api)' => array('mid' => '$1', 'act' => '$2', '[L]' => TRUE),
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)' => array('vid' => '$1', 'mid' => '$2', 'act' => '$3', '[L]' => TRUE),
// trackback
'([0-9]+)/(.+)/trackback' => array('document_srl' => '$1', 'key' => '$2', 'act' => 'trackback', '[L]' => TRUE),
'([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('mid' => '$1', 'document_srl' => '$2', 'key' => '$3', 'act' => 'trackback', '[L]' => TRUE),
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3' , 'key' => '$4', 'act' => 'trackback', '[L]' => TRUE),
// document_srl
'([0-9]+)' => array('document_srl' => '$1', '[L]' => TRUE),
// mid
'([a-zA-Z0-9_]+)/?' => array('mid' => '$1', '[L]' => TRUE),
// mid + document_srl
'([a-zA-Z0-9_]+)/([0-9]+)' => array('mid' => '$1', 'document_srl' => '$2', '[L]' => TRUE),
// vid + mid
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/' => array('vid' => '$1', 'mid' => '$2', '[L]' => TRUE),
// vid + mid + document_srl
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)?' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3', '[L]' => TRUE),
// mid + entry title
'([a-zA-Z0-9_]+)/entry/(.+)' => array('mid' => '$1', 'entry' => '$2', '[L]' => TRUE),
// vid + mid + entry title
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)' => array('vid' => '$1', 'mid' => '$2', 'entry' => '$3', '[L]' => TRUE),
// shop / vid / [category|product] / identifier
'([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)' => array('act' => 'route', 'vid' => '$1', 'type' => '$2', 'identifier'=> '$3', '[L]' => TRUE)
);
/**
* Rewrite map
* @var array
*/
private static $rewrite_map = array();
/**
* @brief Applys routes.
* @see This function should be called only once
* @return void
*/
public static function proc()
{
$uri = $_SERVER['REQUEST_URI'];
if (stripos($uri, $_SERVER['SCRIPT_NAME']) === 0)
{
$uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
}
elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
{
$uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
}
if ($uri == '/' || empty($uri))
{
return;
}
// Get relative path from request uri
$path = parse_url($uri, PHP_URL_PATH);
// Do some final cleaning of the URI and return it
$path = str_replace(array('//', '../'), '/', trim($path, '/'));
if(strlen($path) > 0)
{
self::$segments = explode('/', $path);
}
if(isset(self::$routes[$path]))
{
foreach(self::$routes[$path] as $key => $val)
{
if(strlen($val) > 0)
{
if(substr_compare($val, '$', 0, 1) == 0)
{
$segment_index = (int) substr($val, 1) - 1;
if($segment_index < 0)
{
continue;
}
Context::set($key, self::$segments[$segment_index], TRUE);
}
else
{
Context::set($key, $val, TRUE);
}
}
else
{
Context::set($key, '', TRUE);
}
}
return;
}
$break = FALSE;
// Apply routes
foreach(self::$routes as $regex => $query)
{
// Stop the routing proccess
if($break)
{
break;
}
if(preg_match('#^' . $regex . '$#', $path, $matches))
{
foreach($query as $key => $val)
{
// If [L] keyword is defined
if($key == '[L]')
{
// Stop the routing process and don't apply any more rules
$break = TRUE;
continue;
}
if(strlen($val) > 0)
{
if(substr($val, 0, 1) == '$')
{
$segment_index = (int) substr($val, 1) - 1;
if($segment_index < 0)
{
continue;
}
Context::set($key, self::$segments[$segment_index], TRUE);
}
else
{
Context::set($key, $val, TRUE);
}
}
else
{
Context::set($key, '', TRUE);
}
}
}
}
}
/**
* @brief Add a rewrite map(s)
* @param array $map
* @return void
*/
public static function setMap($map)
{
self::$rewrite_map = array_merge(self::$rewrite_map, $map);
}
/**
* @brief Add a route
* @param string $target
* @param array $query
* @return void
*/
public static function add($target, $query)
{
self::$routes[$target] = $query;
}
/**
* @brief Add multiple routes
* @param array $routes
* @return void
*/
public function adds($routes)
{
self::$routes = array_merge(self::$routes, $routes);
}
/**
* @brief Get segment from request uri
* @param int $index
* @return string
*/
public static function getSegment($index)
{
return self::$segments[$index - 1];
}
/**
* @brief Get segment from request uri
* @param int $index
* @return string
*/
public static function getSegments()
{
return self::$segments;
}
/**
* @brief Get route info
* @param string $regex
* @return array
*/
public static function getRoute($regex)
{
return self::$routes[$regex];
}
/**
* @brief Get routes list
* @return array
*/
public static function getRoutes()
{
return self::$routes;
}
/**
* @brief Get routes list
* @param string $regex
* @return boolean
*/
public static function isExistsRoute($regex)
{
return isset(self::$routes[$regex]);
}
/**
* @brief Makes shortten url
* @param string $regex
* @return string
*/
public static function makePrettyUrl($regex)
{
return self::$rewrite_map[$regex];
}
}

View file

@ -590,37 +590,55 @@ class EmbedFilter
/**
* Make white domain list cache file from xml config file.
* @param $whitelist array
* @return void
*/
function _makeWhiteDomainList()
function _makeWhiteDomainList($whitelist = NULL)
{
$whiteUrlXmlFile = FileHandler::getRealPath($this->whiteUrlXmlFile);
$whiteUrlCacheFile = FileHandler::getRealPath($this->whiteUrlCacheFile);
$isMake = false;
$isMake = FALSE;
if(!file_exists($whiteUrlCacheFile))
{
$isMake = true;
$isMake = TRUE;
}
if(file_exists($whiteUrlCacheFile) && filemtime($whiteUrlCacheFile) < filemtime($whiteUrlXmlFile))
{
$isMake = true;
$isMake = TRUE;
}
if(gettype($whitelist) == 'array' && gettype($whitelist['object']) == 'array' && gettype($whitelist['iframe']) == 'array')
{
$isMake = FALSE;
}
if(isset($whitelist) && gettype($whitelist) == 'object')
{
$isMake = TRUE;
}
if($isMake)
{
$xmlBuff = FileHandler::readFile($this->whiteUrlXmlFile);
$whiteUrlList = array();
$whiteIframeUrlList = array();
$xmlParser = new XmlParser();
$domainListObj = $xmlParser->parse($xmlBuff);
$embedDomainList = $domainListObj->whiteurl->embed->domain;
$iframeDomainList = $domainListObj->whiteurl->iframe->domain;
$buff = '<?php if(!defined("__XE__")) exit();';
$buff .= '$whiteUrlList = array();';
$buff .= '$whiteIframeUrlList = array();';
if(is_array($embedDomainList))
if(gettype($whitelist->object) == 'array' && gettype($whitelist->iframe) == 'array')
{
$whiteUrlList = $whitelist->object;
$whiteIframeUrlList = $whitelist->iframe;
}
else
{
$xmlBuff = FileHandler::readFile($this->whiteUrlXmlFile);
$xmlParser = new XmlParser();
$domainListObj = $xmlParser->parse($xmlBuff);
$embedDomainList = $domainListObj->whiteurl->embed->domain;
$iframeDomainList = $domainListObj->whiteurl->iframe->domain;
if(!is_array($embedDomainList)) $embedDomainList = array();
if(!is_array($iframeDomainList)) $iframeDomainList = array();
foreach($embedDomainList AS $key => $value)
{
$patternList = $value->pattern;
@ -628,16 +646,15 @@ class EmbedFilter
{
foreach($patternList AS $key => $value)
{
$buff .= sprintf('$whiteUrlList[] = \'%s\';', $value->body);
$whiteUrlList[] = $value->body;
}
}
else
$buff .= sprintf('$whiteUrlList[] = \'%s\';', $patternList->body);
{
$whiteUrlList[] = $patternList->body;
}
}
}
if(is_array($iframeDomainList))
{
foreach($iframeDomainList AS $key => $value)
{
$patternList = $value->pattern;
@ -645,20 +662,39 @@ class EmbedFilter
{
foreach($patternList AS $key => $value)
{
$buff .= sprintf('$whiteIframeUrlList[] = \'%s\';', $value->body);
$whiteIframeUrlList[] = $value->body;
}
}
else
$buff .= sprintf('$whiteIframeUrlList[] = \'%s\';', $patternList->body);
{
$whiteIframeUrlList[] = $patternList->body;
}
}
}
if(Context::getDefaultUrl())
$db_info = Context::getDBInfo();
if($db_info->embed_white_object)
{
$buff .= sprintf('$whiteIframeUrlList[] = \'%s\';', Context::getDefaultUrl());
$whiteUrlList = array_merge($whiteUrlList, $db_info->embed_white_object);
}
$buff .= '?>';
FileHandler::writeFile($this->whiteUrlCacheFile, $buff);
if($db_info->embed_white_iframe)
{
$whiteIframeUrlList = array_merge($whiteIframeUrlList, $db_info->embed_white_iframe);
}
$whiteUrlList = array_unique($whiteUrlList);
$whiteIframeUrlList = array_unique($whiteIframeUrlList);
asort($whiteUrlList);
asort($whiteIframeUrlList);
$buff = array();
$buff[] = '<?php if(!defined("__XE__")) exit();';
$buff[] = '$whiteUrlList = ' . var_export($whiteUrlList, TRUE) . ';';
$buff[] = '$whiteIframeUrlList = ' . var_export($whiteIframeUrlList, TRUE) . ';';
FileHandler::writeFile($this->whiteUrlCacheFile, implode(PHP_EOL, $buff));
}
}

View file

@ -7,32 +7,14 @@
<pattern>http://event.dn.naver.com/sbsplayer/vmplayer.xap</pattern>
</domain>
<domain name="" isNAVER="true" desc="네이버 뮤직 서비스">
<pattern>http://test-player.naver.com/naverPlayer/posting/</pattern>
<pattern>http://alpha-player.naver.com/naverPlayer/posting/</pattern>
<pattern>http://beta-player.naver.com/naverPlayer/posting/</pattern>
<pattern>http://musicplayer.naver.com/naverPlayer/posting/</pattern>
<pattern>http://player.music.naver.com/naverPlayer/posting/</pattern>
<pattern>http://dev.player.music.naver.com/</pattern>
<pattern>http://test.player.music.naver.com/</pattern>
<pattern>http://qa.player.music.naver.com/</pattern>
<pattern>http://staging.player.music.naver.com/</pattern>
<pattern>http://alpha.player.music.naver.com/</pattern>
<pattern>http://beta.player.music.naver.com/</pattern>
<pattern>http://stage.player.music.naver.com/</pattern>
</domain>
<domain name="" isNAVER="true" desc="네이버 아이두게임">
<pattern>http://dev-idogame.hangame.com/idogame/ClientBin/iDoGamePlayer.xap</pattern>
<pattern>http://idogame.hangame.com/idogame/ClientBin/iDoGamePlayer.xap</pattern>
</domain>
<domain name="http://www.daum.net" desc="다음">
<pattern>http://flvs.daum.net/flvPlayer.swf</pattern>
<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>
@ -55,101 +37,17 @@
<pattern>http://play.tagstory.com/player/</pattern>
<pattern>http://www.tagstory.com/player/basic/</pattern>
</domain>
<domain name="http://www.pullbbang.com" desc="풀빵닷컴">
<pattern>http://play.pullbbang.com/</pattern>
</domain>
<domain name="" desc="미래에셋 미디어">
<pattern>http://media.miraeasset.com/swf/</pattern>
</domain>
<domain name="" desc="서울시 인터넷방송">
<pattern>http://tv.seoul.go.kr/common/player/posting/window_media_player.asp</pattern>
<pattern>http://stream.seoul.go.kr</pattern>
</domain>
<domain name="" desc="게임스팟 동영상">
<pattern>mms://vod.gamespot.lgcdn.com/</pattern>
<pattern>http://image.com/</pattern>
</domain>
<domain name="" desc="광고정보센터">
<pattern>mms://media.adic.co.kr/</pattern>
<pattern>http://static.adwaple.net/</pattern>
</domain>
<domain name="" desc="비법닷컴">
<pattern>http://www.vipup.com/scrap/scrap.asp</pattern>
</domain>
<domain name="" desc="영상 역사관">
<pattern>mms://125.60.2.110/e_history/</pattern>
<pattern>mms://218.38.152.33/e_history/</pattern>
<pattern>http://125.60.2.110/e_history/</pattern>
<pattern>http://218.38.152.33/e_history/</pattern>
</domain>
<domain name="" desc="중소기업청">
<pattern>http://www.smba.go.kr/mov/</pattern>
</domain>
<domain name="" desc="트라트라고">
<pattern>http://ucc.tlatlago.com/html/uccPlayer/</pattern>
</domain>
<domain name="" desc="싸이월드">
<pattern>http://dbi.video.cyworld.com/v.sk/</pattern>
</domain>
<domain name="" desc="이글루스 동영상">
<pattern>http://v.egloos.com/v.sk/</pattern>
</domain>
<domain name="" desc="뮤직쉐이크">
<pattern>http://www.musicshake.com/musicshakePlayer.swf</pattern>
<pattern>http://eng.musicshake.com/musicshakePlayer.swf</pattern>
<pattern>http://us.musicshake.com/musicshakePlayer.swf</pattern>
<pattern>http://ip.musicshake.com/musicshakePlayer.swf</pattern>
</domain>
<domain name="" desc="아프리카">
<pattern>http://live.afreeca.com:8057/</pattern>
<pattern>http://afbbs.afreeca.com:8080/</pattern>
</domain>
<domain name="" desc="플레이NC">
<pattern>http://static.plaync.co.kr/plaza/</pattern>
</domain>
<domain name="" desc="XTM">
<pattern>http://img.xtmtv.com/images/</pattern>
</domain>
<domain name="" desc="아이서브">
<pattern>http://tv.co.kr/pum/tvcell_basic.swf</pattern>
<pattern>http://tv.co.kr/pum/tvcell_mini.swf</pattern>
</domain>
<domain name="" desc="UC씽">
<pattern>http://ucsing.mnet.com/L_swf/ucsing_player.swf</pattern>
<pattern>http://flvfile.mnet.com</pattern>
</domain>
<domain name="http://www.snaps.co.kr" desc="SNAPS">
<pattern>http://www.snaps.co.kr/swf/LinkedApp.swf</pattern>
</domain>
<domain name="http://www.nate.com" desc="네이트">
<pattern>http://v.nate.com/v.sk/</pattern>
<pattern>http://w.blogdoc.nate.com/</pattern>
<pattern>http://blogdoc.nate.com/flash/blogdoc_widget_reco.swf</pattern>
</domain>
<domain name="http://www.paoin.com" desc="파오인 신문지면 뷰어">
<pattern>http://www.paoin.com/Common/swf/ArticleViewer02.swf</pattern>
<pattern>http://thumb.paoin.com/paoweb/common/flash/ArticleViewer02.swf</pattern>
<pattern>http://thumb.paoin.com/paoweb/common/flash/ArticleShare.swf</pattern>
</domain>
<domain name="http://www.atzine.com" desc="엣진 서비스">
<pattern>http://www.atzine.com/swf/TakeOutWrapper.swf?</pattern>
</domain>
<domain name="http://www.ohmynews.com" desc="오마이뉴스">
<pattern>http://www.ohmynews.com/</pattern>
</domain>
<domain name="http://www.jjanglive.com" desc="짱라이브 위젯">
<pattern>http://www.jjanglive.com/flash/webClient.swf</pattern>
<pattern>http://www.jjanglive.com/flash/AdShowClient.swf</pattern>
</domain>
<domain name="http://www.pmang.com" desc="피망">
<pattern>http://file.pmang.com/images/pmang/fifaonline/season2/img/squad/squadmaker_ot.swf</pattern>
<pattern>http://fifaonline.pmang.com/squad/t.nwz</pattern>
<pattern>http://file.pmang.com/images/pmang/gamepub/player/pm_player.swf</pattern>
<pattern>http://www.pmang.com/gamepub/media/player.nwz</pattern>
</domain>
<domain name="http://www.ccmpia.com" desc="CCMPIA">
<pattern>http://www.ccmpia.com/scripts/bgm2.php</pattern>
</domain>
<domain name="http://www.kbs.co.kr" desc="KBS">
<pattern>http://www.kbs.co.kr/zzim/vmplayer/vmplayer.xap</pattern>
<pattern>http://vmark.kbs.co.kr/zzim/vmplayer/vmplayer.xap</pattern>
@ -163,35 +61,6 @@
<domain name="http://www.imbc.com" desc="MBC">
<pattern>http://onemore.imbc.com/ClientBin/oneplus.xap</pattern>
</domain>
<domain name="http://www.xtmtv.com" desc="XTM">
<pattern>http://www.xtmtv.com/xtmPlayer/javascript/XTM_Scrap_Player.swf</pattern>
</domain>
<domain name="http://www.chtvn.com" desc="TVN">
<pattern>http://player.chtvn.com/tvN_Scrap_Player.swf?</pattern>
</domain>
<domain name="http://www.detailview.co.kr" desc="디테일뷰">
<pattern>http://storage.detailview.co.kr/</pattern>
<pattern>http://beta.detailview.co.kr/</pattern>
</domain>
<domain name="http://www.brightcove.com" desc="Brightcove">
<pattern>http://c.brightcove.com/services/viewer</pattern>
</domain>
<domain name="http://www.hyundai-kiamotors.com" desc="현대기아자동차">
<pattern>http://vod.hyundai-kiamotors.com/Flash/PlayerTest/WebPlayer.swf</pattern>
</domain>
<domain name="http://www.techdays.co.kr" desc="techdays">
<pattern>http://www.techdays.co.kr/2010spring/remix10/ClientBin/MediaPlayerTemplate.xap</pattern>
<pattern>http://www.microsoft.com</pattern>
</domain>
<domain name="http://www.wowplan.co.kr" desc="와우플랜">
<pattern>http://www.wowplan.co.kr/schedule/bin-debug/scheduleBlogPost.swf</pattern>
</domain>
<domain name="http://www.allblet.net" desc="allblet.net">
<pattern>http://showman.allblet.net/abp.swf</pattern>
</domain>
<domain name="http://dotsub.com" desc="dotsub.com">
<pattern>http://dotsub.com/static/players/portalplayer.swf</pattern>
</domain>
<domain name="" isNAVER="true" desc="socialsearch">
<pattern>http://static.campaign.naver.com/0/campaign/2010/10/socialsearch/swf/</pattern>
</domain>
@ -203,8 +72,8 @@
<pattern>http://www.youtube-nocookie.com/</pattern>
<pattern>https://www.youtube-nocookie.com/</pattern>
<pattern>//www.youtube.com/v/</pattern>
<pattern>//www.youtube-nocookie.com/</pattern>
<pattern>//www.youtube.com/embed/</pattern>
<pattern>//www.youtube-nocookie.com/</pattern>
</domain>
<domain name="http://maps.google.com" desc="구글맵스" mobile="true">
<pattern>http://maps.google.com/</pattern>
@ -213,27 +82,12 @@
<domain name="http://flvs.daum.net" desc="다음 TV 팟 동영상" mobile="false">
<pattern>http://flvs.daum.net/</pattern>
</domain>
<domain name="http://play.pullbbang.com" desc="풀빵 동영상" mobile="false">
<pattern>http://play.pullbbang.com/#.swf</pattern>
</domain>
<domain name="" desc="게임스팟 동영상">
<pattern>http://www.gamespot.com</pattern>
</domain>
<domain name="http://www.sbs.co.kr" desc="SBS">
<pattern>http://sbsplayer.sbs.co.kr/</pattern>
</domain>
<domain name="http://www.techdays.co.kr" desc="techdays">
<pattern>http://www.techdays.co.kr/2010spring/remix10/ClientBin/MediaPlayerTemplate.xap</pattern>
<pattern>http://www.microsoft.com</pattern>
</domain>
<domain name="http://dotsub.com" desc="dotsub.com">
<pattern>http://dotsub.com/</pattern>
</domain>
<domain name="http://www.travelro.co.kr" desc="트래블로">
<pattern>http://www.travelro.co.kr/</pattern>
</domain>
<domain name="http://www.vimeo.com" desc="vimeo.com">
<pattern>http://player.vimeo.com/</pattern>
<pattern>//player.vimeo.com/</pattern>
</domain>
</iframe>
</whiteurl>

View file

@ -116,7 +116,7 @@ class TemplateHandler
*/
public function compile($tpl_path, $tpl_filename, $tpl_file = '')
{
$buff = '';
$buff = false;
// store the starting time for debug information
if(__DEBUG__ == 3)
@ -159,7 +159,7 @@ class TemplateHandler
}
}
if(!$buff)
if($buff === FALSE)
{
$buff = $this->parse();
if($oCacheHandler->isSupport())
@ -365,12 +365,34 @@ class TemplateHandler
ob_start();
if(substr($buff, 0, 7) == 'file://')
{
include(substr($buff, 7));
if(__DEBUG__)
{
//load cache file from disk
$eval_str = FileHandler::readFile(substr($buff, 7));
$eval_str_buffed = "?>" . $eval_str;
@eval($eval_str_buffed);
$error_info = error_get_last();
//parse error
if ($error_info['type'] == 4)
{
throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}");
}
}
else
{
include(substr($buff, 7));
}
}
else
{
$eval_str = "?>" . $buff;
eval($eval_str);
@eval($eval_str);
$error_info = error_get_last();
//parse error
if ($error_info['type'] == 4)
{
throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}");
}
}
return ob_get_clean();

View file

@ -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();
@ -714,7 +714,7 @@ class Validator
{
$name = strtolower($name);
if(strpos('email,userid,url,alpha,alpha_number,number,', $name . ',') !== false)
if(in_array($name, array('email', 'userid', 'url', 'alpha', 'alpha_number', 'number')))
{
continue;
}

View file

@ -183,12 +183,10 @@ class Argument
}
else
{
$total = count($value);
for($i = 0; $i < $total; $i++)
foreach($value as $key=>$val)
{
$value[$i] = $this->_escapeStringValue($value[$i]);
$value[$key] = $this->_escapeStringValue($val);
}
//$value[$i] = '\''.$value[$i].'\'';
}
}
if($this->uses_default_value)

View file

@ -45,6 +45,10 @@ a img {
}
}
.xe-widget-wrapper {
overflow: hidden;
}
/* Popup Menu Area */
#popup_menu_area {
position: absolute;
@ -296,7 +300,7 @@ button.btn {
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
}
.btn-group>.btn: last-child {
.btn-group>.btn:last-child {
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;

File diff suppressed because one or more lines are too long

View file

@ -59,9 +59,9 @@ if(jQuery) jQuery.noConflict();
if(typeof(options.wrap) == "string") options.wrap ='#'+options.wrap;
if(options.wrap) {
obj = $(options.wrap).find('input[name='+itemName+']:checkbox');
obj = $(options.wrap).find('input[name="'+itemName+'"]:checkbox');
} else {
obj = $('input[name='+itemName+']:checkbox');
obj = $('input[name="'+itemName+'"]:checkbox');
}
if(options.checked == 'toggle') {
@ -900,7 +900,7 @@ function get_by_id(id) {
jQuery(function($){
// display popup menu that contains member actions and document actions
$(document).click(function(evt) {
$(document).on('click', function(evt) {
var $area = $('#popup_menu_area');
if(!$area.length) $area = $('<div id="popup_menu_area" tabindex="0" style="display:none;z-index:9999" />').appendTo(document.body);
@ -916,6 +916,18 @@ jQuery(function($){
if(cls) match = cls.match(new RegExp('(?:^| )((document|comment|member)_([1-9]\\d*))(?: |$)',''));
if(!match) return;
// mobile에서 touchstart에 의한 동작 시 pageX, pageY 위치를 구함
if(evt.pageX===undefined || evt.pageY===undefined)
{
var touch = evt.originalEvent.touches[0];
if(touch!==undefined || !touch)
{
touch = evt.originalEvent.changedTouches[0];
}
evt.pageX = touch.pageX;
evt.pageY = touch.pageY;
}
var action = 'get'+ucfirst(match[2])+'Menu';
var params = {
mid : current_mid,

View file

@ -1,2 +1,8 @@
/*! HTML5 Shiv pre3.5 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
(function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){l.shivMethods||c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return b[a]=c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}function p(a){var b,c=a.getElementsByTagName("*"),d=c.length,e=RegExp("^(?:"+i().join("|")+")$","i"),f=[];while(d--)b=c[d],e.test(b.nodeName)&&f.push(b.applyElement(q(b)));return f}function q(a){var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(n+":"+a.nodeName);while(d--)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function r(a){var b,c=a.split("{"),d=c.length,e=RegExp("(^|[\\s,>+~])("+i().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),f="$1"+n+"\\:$2";while(d--)b=c[d]=c[d].split("}"),b[b.length-1]=b[b.length-1].replace(e,f),c[d]=b.join("}");return c.join("{")}function s(a){var b=a.length;while(b--)a[b].removeNode()}function t(a){var b,c,d=a.namespaces,e=a.parentWindow;return!o||a.printShived?a:(typeof d[n]=="undefined"&&d.add(n),e.attachEvent("onbeforeprint",function(){var d,e,f,g=a.styleSheets,i=[],j=g.length,k=Array(j);while(j--)k[j]=g[j];while(f=k.pop())if(!f.disabled&&m.test(f.media)){for(d=f.imports,j=0,e=d.length;j<e;j++)k.push(d[j]);try{i.push(f.cssText)}catch(l){}}i=r(i.reverse().join("")),c=p(a),b=h(a,i)}),e.attachEvent("onafterprint",function(){s(c),b.removeNode(!0)}),a.printShived=!0,a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="<xyz></xyz>",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b);var m=/^$|\b(?:all|print)\b/,n="html5shiv",o=!g&&function(){var c=b.documentElement;return typeof b.namespaces!="undefined"&&typeof b.parentWindow!="undefined"&&typeof c.applyElement!="undefined"&&typeof c.removeNode!="undefined"&&typeof a.attachEvent!="undefined"}();l.type+=" print",l.shivPrint=t,t(b)})(this,document)
/*
HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}</style>";
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);
if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);

View file

@ -1,19 +0,0 @@
[option]
use_closure_compiler=true
[skip]
jquery.js
js_app.js
common.js
xml_handler.js
xml_js_filter.js
iepngfix_tilebg.js
xe.header.js
html5.js
[merge >> xe.js]
xe.header.js
js_app.js
common.js
xml_handler.js
xml_js_filter.js

File diff suppressed because it is too large Load diff

39
common/js/x.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,5 +0,0 @@
/**
* @file common/js/xe.min.js
* @author NAVER (developers@xpressengine.com)
* @brief XE Common JavaScript
**/

View file

@ -58,9 +58,9 @@ if(jQuery) jQuery.noConflict();
if(typeof(options.wrap) == "string") options.wrap ='#'+options.wrap;
if(options.wrap) {
obj = $(options.wrap).find('input[name='+itemName+']:checkbox');
obj = $(options.wrap).find('input[name="'+itemName+'"]:checkbox');
} else {
obj = $('input[name='+itemName+']:checkbox');
obj = $('input[name="'+itemName+'"]:checkbox');
}
if(options.checked == 'toggle') {
@ -899,7 +899,7 @@ function get_by_id(id) {
jQuery(function($){
// display popup menu that contains member actions and document actions
$(document).click(function(evt) {
$(document).on('click', function(evt) {
var $area = $('#popup_menu_area');
if(!$area.length) $area = $('<div id="popup_menu_area" tabindex="0" style="display:none;z-index:9999" />').appendTo(document.body);
@ -915,6 +915,18 @@ jQuery(function($){
if(cls) match = cls.match(new RegExp('(?:^| )((document|comment|member)_([1-9]\\d*))(?: |$)',''));
if(!match) return;
// mobile에서 touchstart에 의한 동작 시 pageX, pageY 위치를 구함
if(evt.pageX===undefined || evt.pageY===undefined)
{
var touch = evt.originalEvent.touches[0];
if(touch!==undefined || !touch)
{
touch = evt.originalEvent.changedTouches[0];
}
evt.pageX = touch.pageX;
evt.pageY = touch.pageY;
}
var action = 'get'+ucfirst(match[2])+'Menu';
var params = {
mid : current_mid,
@ -1702,7 +1714,7 @@ function xml2json(xml, tab, ignoreAttrib) {
}
$(function($){
$('.wfsr')
$(document)
.ajaxStart(function(){
$(window).bind('beforeunload', beforeUnloadHandler);
})

2
common/js/xe.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -414,31 +414,55 @@ function xml2json(xml, tab, ignoreAttrib) {
if(typeof(xeVid)!='undefined') $.extend(data,{vid:xeVid});
$.ajax({
type: "POST",
dataType: "json",
url: request_uri,
contentType: "application/json",
data: $.param(data),
success: function(data) {
$(".wfsr").hide().trigger('cancel_confirm');
if(data.error != '0' && data.error > -1000) {
if(data.error == -1 && data.message == 'msg_is_not_administrator') {
alert('You are not logged in as an administrator');
if($.isFunction(callback_error)) callback_error(data);
try {
$.ajax({
type: "POST",
dataType: "json",
url: request_uri,
contentType: "application/json",
data: $.param(data),
success: function(data) {
$(".wfsr").hide().trigger('cancel_confirm');
if(data.error != '0' && data.error > -1000) {
if(data.error == -1 && data.message == 'msg_is_not_administrator') {
alert('You are not logged in as an administrator');
if($.isFunction(callback_error)) callback_error(data);
return;
} else {
alert(data.message);
if($.isFunction(callback_error)) callback_error(data);
return;
} else {
alert(data.message);
if($.isFunction(callback_error)) callback_error(data);
return;
return;
}
}
}
if($.isFunction(callback_sucess)) callback_sucess(data);
}
});
if($.isFunction(callback_sucess)) callback_sucess(data);
},
error: function(xhr, textStatus) {
$(".wfsr").hide();
var msg = '';
if (textStatus == 'parsererror') {
msg = 'The result is not valid JSON :\n-------------------------------------\n';
if(xhr.responseText === "") return;
msg += xhr.responseText.replace(/<[^>]+>/g, '');
} else {
msg = textStatus;
}
try{
console.log(msg);
} catch(ee){}
}
});
} catch(e) {
alert(e);
return;
}
}
};
@ -458,17 +482,43 @@ function xml2json(xml, tab, ignoreAttrib) {
if(show_waiting_message) $(".wfsr").html(waiting_message).show();
$.extend(data,{module:action[0],act:action[1]});
$.ajax({
type:"POST",
dataType:"html",
url:request_uri,
data:$.param(data),
success : function(html){
$(".wfsr").hide().trigger('cancel_confirm');
self[type](html);
if($.isFunction(func)) func(args);
}
});
try {
$.ajax({
type:"POST",
dataType:"html",
url:request_uri,
data:$.param(data),
success : function(html){
$(".wfsr").hide().trigger('cancel_confirm');
self[type](html);
if($.isFunction(func)) func(args);
},
error: function(xhr, textStatus) {
$(".wfsr").hide();
var msg = '';
if (textStatus == 'parsererror') {
msg = 'The result is not valid page :\n-------------------------------------\n';
if(xhr.responseText === "") return;
msg += xhr.responseText.replace(/<[^>]+>/g, '');
} else {
msg = textStatus;
}
try{
console.log(msg);
} catch(ee){}
}
});
} catch(e) {
alert(e);
return;
}
}
};
@ -477,7 +527,7 @@ function xml2json(xml, tab, ignoreAttrib) {
}
$(function($){
$('.wfsr')
$(document)
.ajaxStart(function(){
$(window).bind('beforeunload', beforeUnloadHandler);
})

View file

@ -4,6 +4,7 @@
<value xml:lang="ko"><![CDATA[도움말]]></value>
<value xml:lang="en"><![CDATA[Help]]></value>
<value xml:lang="jp"><![CDATA[ヘルプ]]></value>
<value xml:lang="de"><![CDATA[Hilfe]]></value>
</item>
<item name="cmd_write">
<value xml:lang="ko"><![CDATA[쓰기]]></value>
@ -93,6 +94,7 @@
<value xml:lang="ko"><![CDATA[조회]]></value>
<value xml:lang="en"><![CDATA[Inquiry]]></value>
<value xml:lang="jp"><![CDATA[お問い合わせ]]></value>
<value xml:lang="de"><![CDATA[Ansichten]]></value>
</item>
<item name="all">
<value xml:lang="ko"><![CDATA[전체]]></value>
@ -100,6 +102,7 @@
<value xml:lang="jp"><![CDATA[すべて]]></value>
<value xml:lang="zh-CN"><![CDATA[全部]]></value>
<value xml:lang="zh-TW"><![CDATA[全部]]></value>
<value xml:lang="de"><![CDATA[Alle]]></value>
</item>
<item name="cmd_view_all">
<value xml:lang="ko"><![CDATA[전체 보기]]></value>
@ -1972,6 +1975,7 @@
<value xml:lang="jp"><![CDATA[非推奨数]]></value>
<value xml:lang="zh-CN"><![CDATA[Blames]]></value>
<value xml:lang="zh-TW"><![CDATA[Blames]]></value>
<value xml:lang="de"><![CDATA[Anzahl der Neinsager]]></value>
<value xml:lang="tr"><![CDATA[Suçlama]]></value>
</item>
<item name="comment_count">
@ -2176,7 +2180,7 @@
<value xml:lang="zh-CN"><![CDATA[版面管理]]></value>
<value xml:lang="zh-TW"><![CDATA[討論板管理]]></value>
<value xml:lang="fr"><![CDATA[Administration des Panneaux]]></value>
<value xml:lang="de"><![CDATA[Forum verwalten]]></value>
<value xml:lang="de"><![CDATA[Anschlagbrett verwalten]]></value>
<value xml:lang="ru"><![CDATA[Настройки форума]]></value>
<value xml:lang="es"><![CDATA[Adm. Tableros]]></value>
<value xml:lang="tr"><![CDATA[Yönetim Ayarları]]></value>
@ -2303,7 +2307,7 @@
<value xml:lang="jp"><![CDATA[その他]]></value>
<value xml:lang="zh-CN"><![CDATA[其他]]></value>
<value xml:lang="zh-TW"><![CDATA[其他]]></value>
<value xml:lang="de"><![CDATA[Sonstiges]]></value>
<value xml:lang="de"><![CDATA[Ander]]></value>
<value xml:lang="tr"><![CDATA[Diğer]]></value>
</item>
<item name="unit_sec">
@ -2394,6 +2398,7 @@
<value xml:lang="ko"><![CDATA[회]]></value>
<value xml:lang="en"><![CDATA[count]]></value>
<value xml:lang="jp"><![CDATA[回]]></value>
<value xml:lang="de"><![CDATA[Zeit]]></value>
</item>
<item name="unit_week" type="array">
<item name="Monday">
@ -2627,26 +2632,32 @@
<value xml:lang="ko"><![CDATA[IP주소 입력형식<br />1. 와일드카드(*) 사용가능(예: 192.168.0.*)<br />2. 하이픈(-)을 사용하여 대역으로 입력가능<br />(단, 대역폭으로 입력할 경우 와일드카드 사용불가. 예: 192.168.0.1-192.168.0.254)<br />3.여러개의 항목은 줄을 바꾸어 입력하세요]]></value>
<value xml:lang="en"><![CDATA[IP address input format<br />You can use wildcard(*) (ex: 192.168.0.*)<br />You can use hyphen(*) for ip range (you can't use wild card with hyphen, ex: 192.168.0.1-192.168.0.254)<br />]]></value>
<value xml:lang="jp"><![CDATA[IPアドレス入力方法<br />ワイルドカード使用可能192.168.0.*)<br />2.ハイフン(-)を使用して帯域で入力可能<br />ただし、帯域幅で入力する場合、ワイルドカードは使用不可。例192.168.0.1-192.168.0.254<br />3.複数の項目は行を変えて入力してください。]]></value>
<value xml:lang="de"><![CDATA[IP adresse eingabeformat<br />Sie können Platzhalter (*) verwenden (zB:. 192.168.0 *)<br />Sie können Bindestrich (*) für IP-Bereich nutzen (können Sie nicht wild card mit Bindestrich, ex: 192.168.0.1-192.168.0.254)]]></value>
</item>
<item name="msg_invalid_ip">
<value xml:lang="ko"><![CDATA[잘못된 IP주소 형식입니다.]]></value>
<value xml:lang="en"><![CDATA[Specified IP address is invalid.]]></value>
<value xml:lang="jp"><![CDATA[正しくないIPアドレス形式です。]]></value>
<value xml:lang="de"><![CDATA[Angegebenen IP adresse ist ungültig.]]></value>
</item>
<item name="msg_no_root">
<value xml:lang="ko"><![CDATA[루트는 선택 할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[You cannot select a root.]]></value>
<value xml:lang="jp"><![CDATA[ルートは選択できません。]]></value>
<value xml:lang="de"><![CDATA[Sie können eine root nicht auswählen.]]></value>
</item>
<item name="msg_no_shortcut">
<value xml:lang="ko"><![CDATA[바로가기는 선택 할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[You cannot select a shortcut.]]></value>
<value xml:lang="jp"><![CDATA[ショートカットは選択できません。]]></value>
<value xml:lang="de"><![CDATA[Sie können eine verknüpfung nicht auswählen.]]></value>
</item>
<item name="msg_select_menu">
<value xml:lang="ko"><![CDATA[대상 메뉴 선택]]></value>
<value xml:lang="en"><![CDATA[Select target menu]]></value>
<value xml:lang="jp"><![CDATA[対象メニュー選択]]></value>
<value xml:lang="de"><![CDATA[Wählen Sie das Menü, das Sie anwenden möchten]]></value>
</item>
<item name="msg_call_server">
<value xml:lang="ko"><![CDATA[서버에 요청 중입니다. 잠시만 기다려주세요.]]></value>
@ -2890,6 +2901,7 @@
<value xml:lang="jp"><![CDATA[検索対象がありません。]]></value>
<value xml:lang="zh-CN"><![CDATA[搜索不到目标]]></value>
<value xml:lang="zh-TW"><![CDATA[搜尋不到目標]]></value>
<value xml:lang="de"><![CDATA[Nicht finden können die das Suchziel.]]></value>
<value xml:lang="tr"><![CDATA[Arama amacı bulunamadı]]></value>
</item>
<item name="msg_empty_search_keyword">
@ -2898,6 +2910,7 @@
<value xml:lang="jp"><![CDATA[キーワードがありません。]]></value>
<value xml:lang="zh-CN"><![CDATA[搜索不到关键字]]></value>
<value xml:lang="zh-TW"><![CDATA[搜尋不到關鍵字]]></value>
<value xml:lang="de"><![CDATA[Nicht finden können das Stichwort.]]></value>
<value xml:lang="tr"><![CDATA[Anahtar kelime yok]]></value>
</item>
<item name="comment_to_be_approved">
@ -2905,6 +2918,7 @@
<value xml:lang="en"><![CDATA[Your comment must be approved by admin before being published.]]></value>
<value xml:lang="jp"><![CDATA[管理者の確認が必要なコメントです。]]></value>
<value xml:lang="zh-CN"><![CDATA[您的回复在通过管理员审核之后才会被显示出来。]]></value>
<value xml:lang="de"><![CDATA[Ihr Kommentar muss von admin vor der Veröffentlichung genehmigt werden.]]></value>
<value xml:lang="tr"><![CDATA[Yorumunuz, yayınlanmadan önce adminden onay almanız gerekir]]></value>
</item>
<item name="success_registed">
@ -2964,9 +2978,10 @@
<value xml:lang="mn"><![CDATA[Устгагдсан]]></value>
</item>
<item name="success_declare_canceled">
<value xml:lang="ko"><![CDATA[신고 취소되었습니다.]]></value>
<value xml:lang="ko"><![CDATA[신고 취소되었습니다.]]></value>
<value xml:lang="en"><![CDATA[Declare was canceled successfully.]]></value>
<value xml:lang="jp"><![CDATA[通報が取り消しされました。]]></value>
<value xml:lang="de"><![CDATA[Deklarieren wurde abgebrochen.]]></value>
</item>
<item name="success_restore">
<value xml:lang="ko"><![CDATA[복원했습니다.]]></value>
@ -3092,6 +3107,7 @@
<value xml:lang="ko"><![CDATA[수정하지 못했습니다.]]></value>
<value xml:lang="en"><![CDATA[Fail to update.]]></value>
<value xml:lang="jp"><![CDATA[修正されませんでした。]]></value>
<value xml:lang="de"><![CDATA[Update fehlgeschlagen]]></value>
<value xml:lang="tr"><![CDATA[Güncellenemedi]]></value>
</item>
<item name="fail_to_delete">
@ -3301,6 +3317,7 @@
<value xml:lang="ko"><![CDATA[처리하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Are you sure you want to process?]]></value>
<value xml:lang="jp"><![CDATA[処理しますか?]]></value>
<value xml:lang="de"><![CDATA[Sind Sie sicher, dass Sie fortfahren möchten?]]></value>
</item>
<item name="column_type">
<value xml:lang="ko"><![CDATA[형식]]></value>
@ -3578,6 +3595,7 @@
<value xml:lang="jp"><![CDATA[%sの値が正しくありません。]]></value>
<value xml:lang="zh-CN"><![CDATA[%s值有误。]]></value>
<value xml:lang="zh-TW"><![CDATA[%s值有誤。]]></value>
<value xml:lang="de"><![CDATA[Der Wert% ist ungültig.]]></value>
<value xml:lang="tr"><![CDATA[%s değeri uymuyordur.]]></value>
</item>
<item name="invalid_email">
@ -3717,6 +3735,19 @@
<value xml:lang="mn"><![CDATA[%s-ын хэлбэр буруу байна. Зөвхөн тоогоор оруулах ёстой.]]></value>
</item>
</item>
<item name="security_invalid_session">
<value xml:lang="ko"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="en"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="jp"><![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="de"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="es"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="tr"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="vi"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="mn"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
</item>
<item name="security_warning_embed">
<value xml:lang="ko"><![CDATA[보안 문제로 관리자 아이디로는 embed를 볼 수 없습니다. 확인하려면 다른 아이디로 접속하세요]]></value>
<value xml:lang="en"><![CDATA[Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID.]]></value>
@ -3822,6 +3853,7 @@
<value xml:lang="ko"><![CDATA[모바일]]></value>
<value xml:lang="en"><![CDATA[Mobile]]></value>
<value xml:lang="jp"><![CDATA[モバイル]]></value>
<value xml:lang="de"><![CDATA[Handy]]></value>
</item>
<item name="mobile_view">
<value xml:lang="ko"><![CDATA[모바일 뷰 사용]]></value>
@ -3852,6 +3884,7 @@
<value xml:lang="en"><![CDATA[Simple View]]></value>
<value xml:lang="jp"><![CDATA[シンプルビュー]]></value>
<value xml:lang="zh-CN"><![CDATA[预览]]></value>
<value xml:lang="de"><![CDATA[einfache ansicht]]></value>
<value xml:lang="tr"><![CDATA[Basit Görünüm]]></value>
</item>
<item name="detail_view">
@ -3859,6 +3892,7 @@
<value xml:lang="en"><![CDATA[Detail View]]></value>
<value xml:lang="jp"><![CDATA[詳細ビュー]]></value>
<value xml:lang="zh-CN"><![CDATA[查看详情]]></value>
<value xml:lang="de"><![CDATA[detail ansicht]]></value>
<value xml:lang="tr"><![CDATA[Detaylı Görünüm]]></value>
</item>
<item name="more">
@ -3867,19 +3901,22 @@
<value xml:lang="jp"><![CDATA[もっと見る]]></value>
<value xml:lang="zh-CN"><![CDATA[更多]]></value>
<value xml:lang="zh-TW"><![CDATA[更多]]></value>
<value xml:lang="de"><![CDATA[mehr]]></value>
<value xml:lang="tr"><![CDATA[Daha Fazla]]></value>
<value xml:lang="vi"><![CDATA[Xem thêm]]></value>
</item>
<item name="skip_to_content">
<value xml:lang="ko"><![CDATA[메뉴 건너뛰기]]></value>
<value xml:lang="en"><![CDATA[Skip to content]]></value>
<value xml:lang="en"><![CDATA[Skip to menu]]></value>
<value xml:lang="jp"><![CDATA[メニュースキップ]]></value>
<value xml:lang="de"><![CDATA[Menü überspringen]]></value>
</item>
<item name="dashboard">
<value xml:lang="ko"><![CDATA[대시보드]]></value>
<value xml:lang="en"><![CDATA[Dashboard]]></value>
<value xml:lang="jp"><![CDATA[ダッシュボード]]></value>
<value xml:lang="zh-CN"><![CDATA[控制面板]]></value>
<value xml:lang="de"><![CDATA[Armaturenbrett]]></value>
<value xml:lang="tr"><![CDATA[Kontrol Paneli]]></value>
</item>
<item name="user">
@ -3887,21 +3924,25 @@
<value xml:lang="en"><![CDATA[Member]]></value>
<value xml:lang="jp"><![CDATA[会員]]></value>
<value xml:lang="zh-CN"><![CDATA[会员]]></value>
<value xml:lang="de"><![CDATA[Mitglied]]></value>
<value xml:lang="tr"><![CDATA[Üye]]></value>
</item>
<item name="yes">
<value xml:lang="ko"><![CDATA[예]]></value>
<value xml:lang="en"><![CDATA[Yes]]></value>
<value xml:lang="jp"><![CDATA[はい]]></value>
<value xml:lang="de"><![CDATA[ja]]></value>
</item>
<item name="not">
<value xml:lang="ko"><![CDATA[아니오]]></value>
<value xml:lang="en"><![CDATA[No]]></value>
<value xml:lang="jp"><![CDATA[いいえ]]></value>
<value xml:lang="de"><![CDATA[nicht]]></value>
</item>
<item name="msg_default_url_is_null">
<value xml:lang="ko"><![CDATA[기본 URL 설정이 안 되어 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Default url is null.]]></value>
<value xml:lang="jp"><![CDATA[基本URLが設定されていません。]]></value>
<value xml:lang="de"><![CDATA[Standard URL ist null.]]></value>
</item>
</lang>

View file

@ -25,7 +25,7 @@
</block>
<!-- JS -->
<block loop="$js_files=>$key,$js_file">
<block cond="$js_file['targetie']"><!--[if {$js_file['targetie']}]></block>
<block cond="$js_file['targetie']"><!--[if {$js_file['targetie']}]><block cond="stripos($js_file['targetie'], 'gt') === 0"><!--></block></block>
<script src="{$js_file['file']}"></script>
<block cond="$js_file['targetie']"><![endif]--></block>
</block>

View file

@ -11,19 +11,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
<!--// TITLE -->
<title>{Context::getBrowserTitle()}</title>
<!--// CSS-->
<!--@foreach($css_files as $key => $css_file)-->
<!--@if($css_file['targetie'])--><!--[if {$css_file['targetie']}]><!--@end-->
<link rel="stylesheet" href="{$css_file['file']}" media="{$css_file['media']}"|cond="$css_file['media'] != 'all'" />
<!--@if($css_file['targetie'])--><![endif]--><!--@end-->
<!--@end-->
<!--// JS -->
<!--@foreach($js_files as $key => $js_file)-->
<!--@if($js_file['targetie'])--><!--[if {$js_file['targetie']}]><!--@end-->
<script src="{$js_file['file']}"></script>
<!--@if($js_file['targetie'])--><![endif]--><!--@end-->
<!--@end-->
<!-- CSS -->
<block loop="$css_files=>$key,$css_file">
<block cond="$css_file['targetie']"><!--[if {$css_file['targetie']}]></block>
<link rel="stylesheet" href="{$css_file['file']}" media="{$css_file['media']}"|cond="$css_file['media'] != 'all'" />
<block cond="$css_file['targetie']"><![endif]--></block>
</block>
<!-- JS -->
<block loop="$js_files=>$key,$js_file">
<block cond="$js_file['targetie']"><!--[if {$js_file['targetie']}]><block cond="stripos($js_file['targetie'], 'gt') === 0"><!--></block></block>
<script src="{$js_file['file']}"></script>
<block cond="$js_file['targetie']"><![endif]--></block>
</block>
<!--[if lt IE 9]><script src="../js/html5.js"></script><![endif]-->
<!--// RSS -->

View file

@ -9,11 +9,11 @@
*/
if(version_compare(PHP_VERSION, '5.4.0', '<'))
{
@error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
@error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_WARNING);
}
else
{
@error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT);
@error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_WARNING ^ E_STRICT);
}
if(!defined('__XE__'))
@ -29,7 +29,11 @@ define('__ZBXE__', __XE__);
/**
* Display XE's full version.
*/
define('__XE_VERSION__', '1.7.4-beta.6');
define('__XE_VERSION__', '1.7.7.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.
@ -45,11 +49,6 @@ define('_XE_PATH_', str_replace('config/config.inc.php', '', str_replace('\\', '
// Set can use other method instead cookie to store session id(for file upload)
ini_set('session.use_only_cookies', 0);
// Set Real IP Address of Client.
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if(file_exists(_XE_PATH_ . 'config/package.inc.php'))
{
@ -174,6 +173,20 @@ if(!defined('__LOG_SLOW_QUERY__'))
define('__LOG_SLOW_QUERY__', 0);
}
if(!defined('__LOG_SLOW_TRIGGER__'))
{
/**
* Trigger excute time log
*
* <pre>
* 0: Do not leave a log
* > 0: leave a log when the trigger takes over specified milliseconds
* Log file is saved as ./files/_db_slow_trigger.php file
* </pre>
*/
define('__LOG_SLOW_TRIGGER__', 0);
}
if(!defined('__DEBUG_QUERY__'))
{
/**
@ -255,6 +268,7 @@ if(!defined('__XE_LOADED_CLASS__'))
require(_XE_PATH_ . 'classes/xml/XmlJsFilter.class.php');
require(_XE_PATH_ . 'classes/xml/XmlLangParser.class.php');
require(_XE_PATH_ . 'classes/cache/CacheHandler.class.php');
require(_XE_PATH_ . 'classes/router/Router.class.php');
require(_XE_PATH_ . 'classes/context/Context.class.php');
require(_XE_PATH_ . 'classes/db/DB.class.php');
require(_XE_PATH_ . 'classes/file/FileHandler.class.php');

View file

@ -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;
}
/**
@ -675,43 +714,9 @@ function zdate($str, $format = 'Y-m-d H:i:s', $conversion = TRUE)
}
}
// If year value is less than 1970, handle it separately.
if((int) substr($str, 0, 4) < 1970)
{
$hour = (int) substr($str, 8, 2);
$min = (int) substr($str, 10, 2);
$sec = (int) substr($str, 12, 2);
$year = (int) substr($str, 0, 4);
$month = (int) substr($str, 4, 2);
$day = (int) substr($str, 6, 2);
$date = new DateTime($str);
$string = $date->format($format);
// leading zero?
$lz = create_function('$n', 'return ($n>9?"":"0").$n;');
$trans = array(
'Y' => $year,
'y' => $lz($year % 100),
'm' => $lz($month),
'n' => $month,
'd' => $lz($day),
'j' => $day,
'G' => $hour,
'H' => $lz($hour),
'g' => $hour % 12,
'h' => $lz($hour % 12),
'i' => $lz($min),
's' => $lz($sec),
'M' => getMonthName($month),
'F' => getMonthName($month, FALSE)
);
$string = strtr($format, $trans);
}
else
{
// if year value is greater than 1970, get unixtime by using ztime() for date() function's argument.
$string = date($format, ztime($str));
}
// change day and am/pm for each language
$unit_week = Context::getLang('unit_week');
$unit_meridiem = Context::getLang('unit_meridiem');
@ -758,7 +763,7 @@ function debugPrint($debug_output = NULL, $display_option = TRUE, $file = '_debu
}
static $firephp;
$bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$bt = debug_backtrace();
if(is_array($bt))
{
$bt_debug_print = array_shift($bt);
@ -776,7 +781,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')
@ -833,6 +838,60 @@ function debugPrint($debug_output = NULL, $display_option = TRUE, $file = '_debu
}
}
/**
* @param string $type query, trigger
* @param float $elapsed_time
* @param object $obj
*/
function writeSlowlog($type, $elapsed_time, $obj)
{
static $log_filename = array(
'query' => 'files/_slowlog_query.php',
'trigger' => 'files/_slowlog_trigger.php',
'addon' => 'files/_slowlog_addon.php'
);
$write_file = true;
$log_file = _XE_PATH_ . $log_filename[$type];
$buff = array();
$buff[] = '<?php exit(); ?>';
$buff[] = date('c');
if($type == 'trigger' && __LOG_SLOW_TRIGGER__ > 0 && $elapsed_time > __LOG_SLOW_TRIGGER__)
{
$buff[] = "\tCaller : " . $obj->caller;
$buff[] = "\tCalled : " . $obj->called;
}
else if($type == 'query' && __LOG_SLOW_QUERY__ > 0 && $elapsed_time > __LOG_SLOW_QUERY__)
{
$buff[] = $obj->query;
$buff[] = "\tQuery ID : " . $obj->query_id;
$buff[] = "\tCaller : " . $obj->caller;
$buff[] = "\tConnection : " . $obj->connection;
}
else
{
$write_file = false;
}
if($write_file)
{
$buff[] = sprintf("\t%0.6f sec", $elapsed_time);
$buff[] = PHP_EOL . PHP_EOL;
file_put_contents($log_file, implode(PHP_EOL, $buff), FILE_APPEND);
}
$trigger_args = $obj;
$trigger_args->_log_type = $type;
$trigger_args->_elapsed_time = $elapsed_time;
if($type != 'query')
{
ModuleHandler::triggerCall('XE.writeSlowlog', 'after', $trigger_args);
}
}
/**
* microtime() return
*

View file

@ -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)

View file

@ -1,2 +0,0 @@
@charset "utf-8";
.visual>button>i{top:50%}

View file

@ -1,5 +0,0 @@
@charset "utf-8";
.gnb,
.gnb>ul>li.active>a,
.gnb>ul>li.hover>a{filter:none}
.visual>button>i{top:auto}

View file

@ -1,6 +1,4 @@
<load target="default.layout.css" />
<load target="default.layout.ie78.css" targetie="lt IE 9" />
<load target="default.layout.ie7.css" targetie="IE 7" />
<load target="default.layout.webfont.css" cond="$layout_info->WEB_FONT == 'YES'" />
<load target="../../common/js/respond.min.js" targetie="lt IE 9" />
<load target="default.layout.js" type="body" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Before After
Before After

View file

@ -98,9 +98,10 @@ class addonAdminModel extends addon
// Add the path (files/addons precedence)
$path = $this->getAddonPath($addon_name);
// Wanted information on the add-on
unset($info);
$info = $this->getAddonInfoXml($addon_name, $site_srl, $gtype);
if(!$info) $info = new stdClass();
$info->addon = $addon_name;
$info->path = $path;
$info->activated = FALSE;
@ -255,7 +256,16 @@ class addonAdminModel extends addon
foreach($extra_vars as $key => $val)
{
if(!$val)
{
continue;
}
$obj = new stdClass();
if(!$val->attrs)
{
$val->attrs = new stdClass();
}
if(!$val->attrs->type)
{
$val->attrs->type = 'text';
@ -341,6 +351,11 @@ class addonAdminModel extends addon
$addon_info->extra_vars = array();
foreach($extra_vars as $key => $val)
{
if(!$val)
{
continue;
}
$obj = new stdClass();
$obj->group = $group->title->body;

View file

@ -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');

View file

@ -100,6 +100,7 @@ class addonController extends addon
$mid_list = NULL;
}
$buff[] = '$before_time = microtime(true);';
$buff[] = '$rm = \'' . $extra_vars->xe_run_method . "';";
$buff[] = '$ml = array(';
if($mid_list)
@ -127,8 +128,15 @@ class addonController extends addon
$buff[] = 'if(isset($ml[$_m]) || count($ml) === 0){';
$buff[] = $addon_include;
$buff[] = '}}}';
$buff[] = '$after_time = microtime(true);';
$buff[] = '$addon_time_log = new stdClass();';
$buff[] = '$addon_time_log->_log_type = "addon";';
$buff[] = '$addon_time_log->caller = $called_position;';
$buff[] = '$addon_time_log->called = "' . $addon . '";';
$buff[] = '$addon_time_log->called_extension = "' . $addon . '";';
$buff[] = '$addon_time_log->_elapsed_time = $after_time-$before_time;';
$buff[] = 'ModuleHandler::triggerCall("XE.writeSlowlog", "after", $addon_time_log);';
}
$addon_path = _XE_PATH_ . 'files/cache/addons/';
FileHandler::makeDir($addon_path);
$addon_file = $addon_path . ($gtype == 'site' ? $site_srl : '') . $type . '.acivated_addons.cache.php';

View file

@ -15,7 +15,7 @@
<description xml:lang="vi">Module này dành cho việc bảo trì những Addon đang sử dụng và không sử dụng.</description>
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
<description xml:lang="jp">アドオンの「登録、使用・未使用」などを設定する管理モジュールです。</description>
<description xml:lang="jp">アドオンの登録、もしくは「使用・未使用」を設定します。</description>
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
<description xml:lang="zh-TW">設定附加元件「登錄、啟用、禁用」的管理模組。</description>

View file

@ -15,7 +15,7 @@
<title xml:lang="en">Add-ons</title>
<title xml:lang="ko">설치된 애드온</title>
<title xml:lang="zh-CN">插件</title>
<title xml:lang="jp">設置されたアドオン</title>
<title xml:lang="jp">アドオン</title>
<title xml:lang="es">Add-ons</title>
<title xml:lang="ru">Add-ons</title>
<title xml:lang="fr">Add-ons</title>

View file

@ -59,7 +59,7 @@
<item name="about_addon_mid">
<value xml:lang="ko"><![CDATA[애드온이 사용될 대상을 지정할 수 있습니다. (모두 해제 시 모든 대상에서 사용 가능합니다.)]]></value>
<value xml:lang="en"><![CDATA[Select a target where the added is used. (If you select none, the addon will be used on all targets.)]]></value>
<value xml:lang="jp"><![CDATA[アドオンを使用する対象を指定します。(選択しない場合、すべてのモジュールが利用可能対象となります]]></value>
<value xml:lang="jp"><![CDATA[アドオンを使用する対象を指定します。(選択しない場合、すべてのモジュールで利用可能になります。)]]></value>
<value xml:lang="zh-CN"><![CDATA[可以指定使用插件的对象。(全部解除表示可用在所有对象。)]]></value>
<value xml:lang="zh-TW"><![CDATA[可以指定使用附加元件的目標。(全部不選取表示可用於所有目標。)]]></value>
<value xml:lang="fr"><![CDATA[On peut choisir des objets dans lesquels la Compagnon soit utilisé.<br />(Tout sera choisi quand rien n'est choisi.)]]></value>
@ -83,7 +83,7 @@
<item name="installed_addons">
<value xml:lang="ko"><![CDATA[설치된 애드온]]></value>
<value xml:lang="en"><![CDATA[Installed Add-ons]]></value>
<value xml:lang="jp"><![CDATA[インストールされているアドオン]]></value>
<value xml:lang="jp"><![CDATA[インストールされアドオン]]></value>
<value xml:lang="zh-CN"><![CDATA[已安装插件]]></value>
<value xml:lang="zh-TW"><![CDATA[已安裝附加元件]]></value>
</item>
@ -104,7 +104,7 @@
<item name="about_fixed">
<value xml:lang="ko"><![CDATA[체크하면 사이트 관리자가 이 설정을 변경할 수 없음.]]></value>
<value xml:lang="en"><![CDATA[Check this, and the site administrator cannot change this setting.]]></value>
<value xml:lang="jp"><![CDATA[選択すると、サイトマネージャーがこの設定を変更することができません。]]></value>
<value xml:lang="jp"><![CDATA[選択すると、サイト管理者がこの設定を変更することができません。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择此项后,网站管理员将无法更改设置。]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇此項後,網站管理員將無法變更設定。]]></value>
</item>

View file

@ -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($){

View file

@ -120,6 +120,11 @@ class adminAdminController extends admin
$db = DB::getInstance();
$db->deleteDuplicateIndexes();
}
// check autoinstall packages
$oAutoinstallAdminController = getAdminController('autoinstall');
$oAutoinstallAdminController->checkInstalled();
$this->setMessage('success_updated');
}
@ -467,11 +472,19 @@ class adminAdminController extends admin
*/
function procAdminRemoveIcons()
{
$site_info = Context::get('site_module_info');
$virtual_site = '';
if($site_info->site_srl)
{
$virtual_site = $site_info->site_srl . '/';
}
$iconname = Context::get('iconname');
$file_exist = FileHandler::readFile(_XE_PATH_ . 'files/attach/xeicon/' . $iconname);
$file_exist = FileHandler::readFile(_XE_PATH_ . 'files/attach/xeicon/' . $virtual_site . $iconname);
if($file_exist)
{
@FileHandler::removeFile(_XE_PATH_ . 'files/attach/xeicon/' . $iconname);
@FileHandler::removeFile(_XE_PATH_ . 'files/attach/xeicon/' . $virtual_site . $iconname);
}
else
{
@ -498,7 +511,7 @@ class adminAdminController extends admin
{
$whitelist = '';
}
$whitelist .= ',127.0.0.1';
$whitelist .= ',127.0.0.1,' . $_SERVER['REMOTE_ADDR'];
$whitelist = explode(',',trim($whitelist, ','));
$whitelist = array_unique($whitelist);
@ -514,6 +527,49 @@ class adminAdminController extends admin
return new Object(-1, 'msg_invalid_request');
}
if(!in_array(Context::getRequestMethod(), array('XMLRPC','JSON')))
{
$returnUrl = Context::get('success_return_url');
if(!$returnUrl) $returnUrl = getNotEncodedUrl('', 'act', 'dispAdminConfigGeneral');
header('location:' . $returnUrl);
return;
}
}
function procAdminUpdateEmbedWhitelist()
{
$vars = Context::getRequestVars();
$db_info = Context::getDbInfo();
$white_object = $vars->embed_white_object;
$white_object = preg_replace("/[\r\n|\r|\n]+/", '|@|', $white_object);
$white_object = preg_replace("/[\s\'\"]+/", '', $white_object);
$white_object = explode('|@|', $white_object);
$white_object = array_unique($white_object);
$white_iframe = $vars->embed_white_iframe;
$white_iframe = preg_replace("/[\r\n|\r|\n]+/", '|@|', $white_iframe);
$white_iframe = preg_replace("/[\s\'\"]+/", '', $white_iframe);
$white_iframe = explode('|@|', $white_iframe);
$white_iframe = array_unique($white_iframe);
$whitelist = new stdClass;
$whitelist->object = $white_object;
$whitelist->iframe = $white_iframe;
$db_info->embed_white_object = $white_object;
$db_info->embed_white_iframe = $white_iframe;
$oInstallController = getController('install');
if(!$oInstallController->makeConfigFile())
{
return new Object(-1, 'msg_invalid_request');
}
require_once(_XE_PATH_ . 'classes/security/EmbedFilter.class.php');
$oEmbedFilter = EmbedFilter::getInstance();
$oEmbedFilter->_makeWhiteDomainList($whitelist);
if(!in_array(Context::getRequestMethod(), array('XMLRPC','JSON')))
{
@ -522,12 +578,6 @@ class adminAdminController extends admin
header('location:' . $returnUrl);
return;
}
}
}

View file

@ -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))
{
@ -350,7 +434,7 @@ class adminAdminModel extends admin
$info['module'] = '';
$oModuleModel = getModel('module');
$module_list = $oModuleModel->getModuleList();
foreach($module_list as $module)
if($module_list) foreach($module_list as $module)
{
if(in_array($module->module, $skip['module']))
{
@ -363,7 +447,7 @@ class adminAdminModel extends admin
$info['addon'] = '';
$oAddonAdminModel = getAdminModel('addon');
$addon_list = $oAddonAdminModel->getAddonList();
foreach($addon_list as $addon)
if($addon_list) foreach($addon_list as $addon)
{
if(in_array($addon->addon, $skip['addon']))
{
@ -376,7 +460,7 @@ class adminAdminModel extends admin
$info['layout'] = "";
$oLayoutModel = getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList();
foreach($layout_list as $layout)
if($layout_list) foreach($layout_list as $layout)
{
if(in_array($layout->layout, $skip['layout']))
{
@ -389,7 +473,7 @@ class adminAdminModel extends admin
$info['widget'] = "";
$oWidgetModel = getModel('widget');
$widget_list = $oWidgetModel->getDownloadedWidgetList();
foreach($widget_list as $widget)
if($widget_list) foreach($widget_list as $widget)
{
if(in_array($widget->widget, $skip['widget']))
{
@ -402,7 +486,7 @@ class adminAdminModel extends admin
$info['widgetstyle'] = "";
$oWidgetModel = getModel('widget');
$widgetstyle_list = $oWidgetModel->getDownloadedWidgetStyleList();
foreach($widgetstyle_list as $widgetstyle)
if($widgetstyle_list) foreach($widgetstyle_list as $widgetstyle)
{
if(in_array($widgetstyle->widgetStyle, $skip['widgetstyle']))
{
@ -863,14 +947,22 @@ class adminAdminModel extends admin
function iconUrlCheck($iconname, $default_icon_name)
{
$file_exsit = FileHandler::readFile(_XE_PATH_ . 'files/attach/xeicon/' . $iconname);
$site_info = Context::get('site_module_info');
$virtual_site = '';
if($site_info->site_srl)
{
$virtual_site = $site_info->site_srl . '/';
}
$file_exsit = FileHandler::readFile(_XE_PATH_ . 'files/attach/xeicon/' . $virtual_site . $iconname);
if(!$file_exsit)
{
$icon_url = './modules/admin/tpl/img/' . $default_icon_name;
}
else
{
$icon_url = $db_info->default_url . 'files/attach/xeicon/' . $iconname;
$icon_url = $db_info->default_url . 'files/attach/xeicon/' . $virtual_site . $iconname;
}
return $icon_url;
}

View file

@ -138,19 +138,15 @@ class adminAdminView extends admin
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$result = $oAdminAdminModel->checkAdminMenu();
if(!$result->php_file)
{
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
include $result->php_file;
$oModuleModel = getModel('module');
$moduleActionInfo = $oModuleModel->getModuleActionXml($module);
// get current menu's subMenuTitle
$moduleActionInfo = $oModuleModel->getModuleActionXml($module);
$currentAct = Context::get('act');
$subMenuTitle = '';
foreach((array) $moduleActionInfo->menu as $key => $value)
{
if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts))
@ -159,48 +155,26 @@ class adminAdminView extends admin
break;
}
}
// get current menu's srl(=parentSrl)
$parentSrl = 0;
$oMenuAdminConroller = getAdminController('menu');
if(!$_SESSION['isMakeXml'])
foreach((array) $menu->list as $parentKey => $parentMenu)
{
foreach((array) $menu->list as $parentKey => $parentMenu)
if(!is_array($parentMenu['list']) || !count($parentMenu['list']))
{
if(!$parentMenu['text'])
{
$oMenuAdminConroller->makeXmlFile($result->menu_srl);
$_SESSION['isMakeXml'] = true;
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
continue;
}
if($parentMenu['href'] == '#' && count($parentMenu['list']))
{
$firstChild = current($parentMenu['list']);
$menu->list[$parentKey]['href'] = $firstChild['href'];
}
if(!is_array($parentMenu['list']) || !count($parentMenu['list']))
foreach($parentMenu['list'] as $childKey => $childMenu)
{
if($subMenuTitle == $childMenu['text'] && $parentSrl == 0)
{
continue;
}
if($parentMenu['href'] == '#' && count($parentMenu['list']))
{
$firstChild = current($parentMenu['list']);
$menu->list[$parentKey]['href'] = $firstChild['href'];
}
foreach($parentMenu['list'] as $childKey => $childMenu)
{
if(!$childMenu['text'])
{
$oMenuAdminConroller->makeXmlFile($result->menu_srl);
$_SESSION['isMakeXml'] = true;
header('Location: ' . getNotEncodedUrl('', 'module', 'admin'));
Context::close();
exit;
}
if($subMenuTitle == $childMenu['text'])
{
$parentSrl = $childMenu['parent_srl'];
break;
}
$parentSrl = $childMenu['parent_srl'];
}
}
}
@ -374,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..');
@ -413,8 +402,11 @@ class adminAdminView extends admin
Context::set('langs', Context::loadLangSupported());
// site lock
Context::set('IP', $_SERVER['REMOTE_ADDR']);
if(!$db_info->sitelock_title) $db_info->sitelock_title = 'Maintenance in progress...';
if(!in_array('127.0.0.1', $db_info->sitelock_whitelist)) $db_info->sitelock_whitelist[] = '127.0.0.1';
if(!in_array($_SERVER['REMOTE_ADDR'], $db_info->sitelock_whitelist)) $db_info->sitelock_whitelist[] = $_SERVER['REMOTE_ADDR'];
$db_info->sitelock_whitelist = array_unique($db_info->sitelock_whitelist);
Context::set('remote_addr', $_SERVER['REMOTE_ADDR']);
Context::set('use_sitelock', $db_info->use_sitelock);
Context::set('sitelock_title', $db_info->sitelock_title);
@ -423,6 +415,7 @@ class adminAdminView extends admin
$whitelist = implode("\r\n", $db_info->sitelock_whitelist);
Context::set('sitelock_whitelist', $whitelist);
if($db_info->admin_ip_list) $admin_ip_list = implode("\r\n", $db_info->admin_ip_list);
else $admin_ip_list = '';
Context::set('admin_ip_list', $admin_ip_list);
@ -439,13 +432,17 @@ class adminAdminView extends admin
$config = $oDocumentModel->getDocumentConfig();
Context::set('thumbnail_type', $config->thumbnail_type);
Context::set('IP', $_SERVER['REMOTE_ADDR']);
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('module');
Context::set('siteTitle', $config->siteTitle);
Context::set('htmlFooter', $config->htmlFooter);
// embed filter
require_once(_XE_PATH_ . 'classes/security/EmbedFilter.class.php');
$oEmbedFilter = EmbedFilter::getInstance();
context::set('embed_white_object', implode(PHP_EOL, $oEmbedFilter->whiteUrlList));
context::set('embed_white_iframe', implode(PHP_EOL, $oEmbedFilter->whiteIframeUrlList));
$columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl');
$start_module = $oModuleModel->getSiteInfo(0, $columnList);
@ -622,6 +619,7 @@ class adminAdminView extends admin
$info['PHP_Core'] = $php_core;
$str_info = "[XE Server Environment " . date("Y-m-d") . "]\n\n";
$str_info .= "realpath : ".realpath('./')."\n";
foreach( $info as $key=>$value )
{
if( is_array( $value ) == false ) {

View file

@ -91,8 +91,8 @@ class admin extends ModuleObject
if(!$output->menu_srl)
{
$oAdminClass = getClass('admin');
$oAdminClass->createXeAdminMenu();
$this->createXeAdminMenu();
$output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName);
}
else
{
@ -123,10 +123,9 @@ class admin extends ModuleObject
//insert menu
$args = new stdClass();
$args->title = $this->adminMenuName;
$args->menu_srl = getNextSequence();
$menuSrl = $args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
$menuSrl = $args->menu_srl;
Context::set('admin_menu_srl', $menuSrl);
unset($args);
@ -182,74 +181,70 @@ class admin extends ModuleObject
'subMenu' => array('comment'),
),
4 => array(
'module' => 'trackback',
'subMenu' => array('trackback'),
),
5 => array(
'module' => 'file',
'subMenu' => array('file'),
),
6 => array(
5 => array(
'module' => 'poll',
'subMenu' => array('poll'),
),
7 => array(
6 => array(
'module' => 'rss',
'subMenu' => array('rss'),
),
8 => array(
7 => array(
'module' => 'module',
'subMenu' => array('multilingual'),
),
9 => array(
8 => array(
'module' => 'importer',
'subMenu' => array('importer'),
),
10 => array(
9 => array(
'module' => 'trash',
'subMenu' => array('trash'),
),
11 => array(
10 => array(
'module' => 'autoinstall',
'subMenu' => array('easyInstall'),
),
12 => array(
11 => array(
'module' => 'layout',
'subMenu' => array('installedLayout'),
),
13 => array(
12 => array(
'module' => 'module',
'subMenu' => array('installedModule'),
),
14 => array(
13 => array(
'module' => 'widget',
'subMenu' => array('installedWidget'),
),
15 => array(
14 => array(
'module' => 'addon',
'subMenu' => array('installedAddon'),
),
16 => array(
15 => array(
'module' => 'editor',
'subMenu' => array('editor'),
),
17 => array(
16 => array(
'module' => 'spamfilter',
'subMenu' => array('spamFilter'),
),
18 => array(
17 => array(
'module' => 'admin',
'subMenu' => array('adminConfigurationGeneral', 'adminConfigurationFtp', 'adminMenuSetup'),
),
19 => array(
18 => array(
'module' => 'file',
'subMenu' => array('fileUpload'),
),
20 => array(
19 => array(
'module' => 'module',
'subMenu' => array('filebox'),
),
21 => array(
20 => array(
'module' => 'point',
'subMenu' => array('point')
),
@ -319,7 +314,6 @@ class admin extends ModuleObject
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'rss':
@ -368,7 +362,6 @@ class admin extends ModuleObject
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'rss':

View file

@ -19,6 +19,7 @@
<action name="procAdminDeleteLogo" type="controller" />
<action name="procAdminMenuReset" type="controller" />
<action name="procAdminUpdateSitelock" type="controller" />
<action name="procAdminUpdateEmbedWhitelist" type="controller" />
<action name="getAdminFTPList" type="model" />
<action name="getAdminFTPPath" type="model" />

View file

@ -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="jp"><![CDATA[モバイル機器で接続した際にモバイルページを表示しますか?]]></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">
@ -925,13 +926,13 @@
<item name="input_footer_script">
<value xml:lang="ko"><![CDATA[하단(footer) 스크립트]]></value>
<value xml:lang="en"><![CDATA[Footer script]]></value>
<value xml:lang="jp"><![CDATA[下段footerスクリプト]]]></value>
<value xml:lang="jp"><![CDATA[下段footerスクリプト]]></value>
<value xml:lang="zh-CN"><![CDATA[输入页脚脚本]]></value>
<value xml:lang="tr"><![CDATA[Alt (footer) Script Eklemek]]></value>
</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>
@ -953,7 +954,7 @@
<item name="admin_ip_limit">
<value xml:lang="ko"><![CDATA[관리자 IP대역]]></value>
<value xml:lang="en"><![CDATA[Sepcify IP address band that can access the admin page.]]></value>
<value xml:lang="jp"><![CDATA[管理者ページへアクセス可能なIP帯域を指定します。]]></value>
<value xml:lang="jp"><![CDATA[管理者のIPアドレス帯域]]></value>
<value xml:lang="zh-CN"><![CDATA[后台IP绑定]]></value>
<value xml:lang="tr"><![CDATA[Yönetici sayfasına ulaşabileceğiniz IP aralığını belirleyiniz.]]></value>
</item>
@ -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>
@ -981,7 +982,7 @@
<item name="allow_use_favicon">
<value xml:lang="ko"><![CDATA[파비콘 지정]]></value>
<value xml:lang="en"><![CDATA[Do you want to use favicon?]]></value>
<value xml:lang="jp"><![CDATA[ファビコンを使用しますか?]]></value>
<value xml:lang="jp"><![CDATA[ファビコン設定]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用自定义favicon?]]></value>
<value xml:lang="tr"><![CDATA[Favicon'u kullanmak istiyor musunuz?]]></value>
</item>
@ -995,7 +996,7 @@
<item name="allow_use_mobile_icon">
<value xml:lang="ko"><![CDATA[모바일 홈 화면 아이콘]]></value>
<value xml:lang="en"><![CDATA[Do you want to use the mobile home screen icon?]]></value>
<value xml:lang="jp"><![CDATA[モバイル待ち受け画面のアイコンを使用しますか?]]></value>
<value xml:lang="jp"><![CDATA[待受画面のアイコン設定]]></value>
<value xml:lang="zh-CN"><![CDATA[是否启用移动版屏幕图标?]]></value>
<value xml:lang="tr"><![CDATA[Mobil Ana Ekran Simgesini kullanmak istiyor musunuz?]]></value>
</item>
@ -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' 파일에서 `$db_info->use_sitelock`를 'N'으로 변경하여 차단을 해제할 수 있습니다.]]></value>
<value xml:lang="jp"><![CDATA[ここに管理者のIPを必ず記入てください。<br />もし接近が遮断された場合、'./files/config/db.config.php' ファイルから `$db_info->use_sitelock`を 'N'へ変更すれば遮断が解除できます。]]></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'이며<br />'./common/tpl/sitelock.user.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'.<br />You can modify design file by creating './common/tpl/sitelock.user.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>

View 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>&rsaquo;</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>&rsaquo;</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>&rsaquo;</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>&rsaquo;</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>

View 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>&rsaquo;</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>&rsaquo;</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>&rsaquo;</i> {$lang->more}</a></p>
</section>
</div>

View file

@ -24,7 +24,7 @@
<!-- GNB -->
<nav class="gnb <!--@if($_COOKIE['__xe_admin_gnb_status'] == 'open')-->open<!--@end-->" id="gnb">
<a href="#gnbNav"><i class="x_icon-align-justify x_icon-white"></i><b></b> Menu Open/Close</a>
<ul id="gnbNav" class="ex"|cond="$_COOKIE['__xe_admin_gnb_ex_status'] == 'open'">
<ul id="gnbNav" class="ex">
<script>
var __xe_admin_gnb_txs = new Array();
</script>
@ -49,9 +49,6 @@
</li>
<li cond="!is_array($favorite_list) || count($favorite_list) < 1"><a href="{getUrl('', 'module', 'admin', 'act', 'dispModuleAdminContent')}">{$lang->no_data}</a></li>
</ul>
<div class="exMenu">
<button type="button" title="{$lang->advanced_settings}"><i class="x_icon-chevron-down"></i><i class="x_icon-chevron-up"></i></button>
</div>
</li>
<!--@end-->
<li class="<!--@if($parentSrl==$key || $value['href']=='index.php?module=admin' && !$mid && !$act)-->active open<!--@elseif($_COOKIE['__xe_admin_gnb_tx_' . md5($value['href'])] == 'open')-->open<!--@end-->">

View file

@ -98,8 +98,8 @@
<input type="hidden" name="module" value="install">
<input type="hidden" name="act" value="procInstallAdminConfigIconUpload">
<p>
<input type="file" name="favicon" id="favicon" title="Mobile Home Icon"/>
<input class="x_btn" type="submit" value="{$lang->cmd_submit}" style="vertical-align:top">
<input type="file" name="favicon" id="favicon" title="Favicon"/>
<input class="x_btn" type="submit" value="{$lang->cmd_preview}" style="vertical-align:top">
</p>
</form>
<span class="x_help-block">{$lang->about_use_favicon}</span>
@ -118,7 +118,7 @@
<input type="hidden" name="act" value="procInstallAdminConfigIconUpload">
<p>
<input type="file" name="mobicon" id="mobicon" title="Mobile Home Icon"/>
<input class="x_btn" type="submit" value="{$lang->cmd_submit}" style="vertical-align:top">
<input class="x_btn" type="submit" value="{$lang->cmd_preview}" style="vertical-align:top">
</p>
</form>
<span class="x_help-block">{$lang->detail_use_mobile_icon}</span>
@ -131,6 +131,38 @@
</div>
</div>
</section>
<section class="section">
<h1>embed Filter {$lang->subtitle_embed_whitelist} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_embed_filter" target="_blank">{$lang->help}</a></h1>
<form action="./" method="post" class="x_form-horizontal">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminUpdateEmbedWhitelist" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_general/1" />
<div class="x_control-group">
<label class="x_control-label" for="embed_white_iframe">iFrame <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_config_embed_filter_iframe" target="_blank">{$lang->help}</a></label>
<div class="x_controls" style="margin-right:14px">
<textarea name="embed_white_iframe" id="embed_white_iframe" rows="4" style="width:100%;">{$embed_white_iframe}</textarea>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="embed_white_object">object/embed</label>
<div class="x_controls" style="margin-right:14px">
<textarea name="embed_white_object" id="embed_white_object" rows="4" cols="42" style="width:100%;">{$embed_white_object}</textarea>
</div>
</div>
<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>
</form>
</section>
<section class="section collapsed">
<h1>{$lang->subtitle_advanced}</h1>
<form action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">

View file

@ -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-"],

View file

@ -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;

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,5 @@
@charset "utf-8";
@font-face{font-family:NG;src:url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.eot);src:local(),url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.woff) format('woff')}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,NG,,Dotum,Arial,Helvetica,sans-serif}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:Arial,Helvetica,sans-serif}
@media all and (max-width:980px){
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:sans-serif}
}

View file

@ -1,6 +1,5 @@
@charset "utf-8";
@font-face{font-family:NG;src:url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.eot);src:local(),url(https://themes.googleusercontent.com/static/fonts/earlyaccess/nanumgothic/v3/NanumGothic-Regular.woff) format('woff')}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,NG,,Dotum,Arial,Helvetica,sans-serif}
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:,NanumGothic,,Dotum,Arial,Helvetica,sans-serif}
@media all and (max-width:980px){
body>.x,.x table,.x input,.x textarea,.x select,.x button{font-family:sans-serif}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Before After
Before After

View file

@ -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>&rsaquo;</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>&rsaquo;</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>&rsaquo;</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>&rsaquo;</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>

View file

@ -1,21 +1,21 @@
/* NAVER (developers@xpressengine.com) */
// install module
function doInstallModule(module) {
var params = new Array();
params['module_name'] = module;
exec_xml('install','procInstallAdminInstall',params, completeInstallModule);
var params = [];
params.module_name = module;
exec_xml('install','procInstallAdminInstall',params, completeInstallModule);
}
// upgrade module
function doUpdateModule(module) {
var params = new Array();
params['module_name'] = module;
exec_xml('install','procInstallAdminUpdate',params, completeInstallModule);
var params = [];
params.module_name = module;
exec_xml('install','procInstallAdminUpdate',params, completeInstallModule);
}
function completeInstallModule(ret_obj) {
alert(ret_obj['message']);
location.reload();
alert(ret_obj.message);
location.reload();
}
jQuery(function($){
@ -73,7 +73,8 @@ jQuery(function($){
});
});
$('.x .x_tab-content>.x_tab-pane:not(".x_active")').hide();
}
};
$('.x .x_tabbable').xeTabbable();
$(document.body).on('click', '.x .x_nav-tabs>li>a[href^="#"]', function(){
var $this = $(this);
@ -337,7 +338,7 @@ jQuery(function($){
// Modal Window
jQuery(function($){
var ESC = 27;
var xeModalStack = new Array();
var xeModalStack = [];
var xeModalInitailZIndex = 1040;
// modal backdrop
@ -376,8 +377,8 @@ jQuery(function($){
if(!$modal.parent('body').length) {
$btnClose = $('<button type="button" class="x_close">&times;</button>');
$btnClose.click(function(){ $modal.data('anchor').trigger('close.mw') });
$modal.find('[data-hide]').click(function(){ $modal.data('anchor').trigger('close.mw') });
$btnClose.click(function(){ $modal.data('anchor').trigger('close.mw'); });
$modal.find('[data-hide]').click(function(){ $modal.data('anchor').trigger('close.mw'); });
$('body').append($modal);
$modal.prepend($btnClose); // prepend close button
}
@ -399,7 +400,7 @@ jQuery(function($){
$modal.data('state', 'showing');
// after event trigger
function after(){ $this.trigger('after-open.mw') };
function after(){ $this.trigger('after-open.mw'); }
$(document).bind('keydown.mw', function(event){
if(event.which == ESC) {
@ -421,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(){
@ -448,7 +457,7 @@ jQuery(function($){
$modal.data('state', 'hiding');
// after event trigger
function after(){ $this.trigger('after-close.mw') };
function after(){ $this.trigger('after-close.mw'); }
$modal.fadeOut(duration, after);
$('body').css('overflow','auto');
@ -487,7 +496,7 @@ jQuery(function($){
$layer.hide()
.not('.xe-toggling-content')
.addClass('xe-toggling-content')
.mousedown(function(event){ dont_close_this_time = true })
.mousedown(function(event){ dont_close_this_time = true; })
.focusout(function(event){
setTimeout(function(){
if(!dont_close_this_time && !$layer.find(':focus').length && $layer.data('state') == 'showing') $anchor.trigger('close.tc');
@ -552,7 +561,7 @@ jQuery(function($){
);
// triggering after
function trigger_after(){ $this.trigger('after-open.tc') }
function trigger_after(){ $this.trigger('after-open.tc'); }
switch(effect) {
case 'slide':
@ -595,7 +604,7 @@ jQuery(function($){
$this.trigger('before-close.tc');
// triggering after
function trigger_after(){ $this.trigger('after-close.tc') };
function trigger_after(){ $this.trigger('after-close.tc'); }
// close this layer
switch(effect) {
@ -649,7 +658,7 @@ jQuery(function($){
$li = $('<li />').appendTo($ul);
$('<button type="button" />').text(list[i].domain).data('site_srl', list[i].site_srl).appendTo($li);
}
};
}
$.exec_json('admin.getSiteAllList', {domain:val}, on_complete);
})
@ -680,7 +689,7 @@ jQuery(function($){
})
.trigger('show');
}
};
}
$finder.find('a.tgAnchor.findsite').trigger('close.tc');
@ -758,6 +767,7 @@ jQuery(function($){
var sDomain;
var rxFilter = new RegExp(sFilter, "ig");
var list = aSiteListData;
var replaceHighlight = function(sKeyword){ return '<span class="highlight">'+sKeyword+'</span>'; };
$siteList.empty();
@ -765,9 +775,8 @@ jQuery(function($){
sDomain = list[i].domain;
if(sFilter){
if(!sDomain.match(rxFilter)) continue;
sDomain = sDomain.replace(rxFilter, function(sKeyword){
return '<span class="highlight">'+sKeyword+'</span>';
});
sDomain = sDomain.replace(rxFilter, replaceHighlight);
}
$li = $('<li />').appendTo($siteList);
@ -814,7 +823,7 @@ jQuery(function($){
setSiteList($siteFinder.val());
$siteFinder.focus();
};
}
$siteList.empty();
$instanceList.empty();
@ -849,7 +858,7 @@ jQuery(function($){
$siteList.find('li').removeClass('x_active');
$this.parent('li').addClass('x_active');
};
}
$moduleList.empty();
$instanceListDiv.hide();
@ -948,7 +957,7 @@ jQuery(function($){
});
return this;
}
};
});
jQuery(function($){
@ -969,7 +978,7 @@ jQuery(function($){
}
return _hide.apply(this, arguments);
}
};
var _show = $.fn.show;
$.fn.show = function(speed, easing, callback, htOpt) {
@ -989,11 +998,10 @@ jQuery(function($){
var $this = $(this);
// elem. display not yet... using setTimeout...
setTimeout(function(){$this.trigger('after-show', [htOpt]) }, 0);
setTimeout(function(){$this.trigger('after-show', [htOpt]); }, 0);
return rst;
}
};
});
jQuery(function($){
@ -1003,18 +1011,7 @@ jQuery(function($){
//xe.cmd_cancel = "{$lang->cmd_cancel}";
//xe.cmd_confirm = "{$lang->cmd_confirm}";
var $msgBox = $.xeMsgBox.$msgBox = $("<section />").addClass("x_modal _common x").hide().css('z-index', 9999);
$msgBox.html('<button type="button" class="x_close _cancel">&times;</button>\
<div class="x_modal-header">\
<h1 class="_title"></h1>\
</div>\
<div class="x_modal-body">\
<div class="_text"></div>\
</div>\
<div class="x_modal-footer">\
<button type="button" class="x_btn x_pull-left _cancel">'+xe.cmd_cancel+'</button>\
<button type="submit" class="x_btn x_btn-inverse x_pull-right x_btn-primary _ok">'+xe.cmd_confirm+'</button>\
</div>');
$msgBox.html('<button type="button" class="x_close _cancel">&times;</button> <div class="x_modal-header"> <h1 class="_title"></h1> </div> <div class="x_modal-body"> <div class="_text"></div> </div> <div class="x_modal-footer"> <button type="button" class="x_btn x_pull-left _cancel">'+xe.cmd_cancel+'</button> <button type="submit" class="x_btn x_btn-inverse x_pull-right x_btn-primary _ok">'+xe.cmd_confirm+'</button> </div> ');
$("body").append($msgBox);
$msgBox.find("._ok").click(function(){
$.xeMsgBox.fnOnOK();
@ -1119,13 +1116,13 @@ jQuery(function($){
}
$msgBox.show();
}
};
$.xeMsgBox.alertDialog = function(htOptions){
htOptions = htOptions || {};
htOptions.bAlert = true;
this.showMsgBox(htOptions);
}
};
$.xeMsgBox.alert = function(sText){
htOptions = {
bAlert : true,
@ -1135,13 +1132,13 @@ jQuery(function($){
};
this.showMsgBox(htOptions);
}
};
$.xeMsgBox.confirmDialog = function(htOptions){
htOptions = htOptions || {};
htOptions.bAlert = false;
this.showMsgBox(htOptions);
}
};
var $foggyLayer = $.xeMsgBox.$foggyLayer = $("<div />");
$foggyLayer.css({
@ -1168,16 +1165,16 @@ jQuery(function($){
height: $(document).height()
});
}, 0);
}
};
$(window).resize($.xeMsgBox._resizeFoggy);
$.xeMsgBox._resizeFoggy();
$.xeMsgBox._showFoggy = function(){
$foggyLayer.show();
}
};
$.xeMsgBox._hideFoggy = function(){
$foggyLayer.hide();
}
};
});
jQuery(function($){
@ -1207,7 +1204,7 @@ jQuery(function($){
height: $(document).height()
});
}, 0);
}
};
$(window).resize($.xeFoggy._resizeFoggy);
$.xeFoggy._resizeFoggy();
@ -1222,10 +1219,10 @@ jQuery(function($){
});
}
$foggyLayer.show();
}
};
$.xeFoggy.hide = function(){
$foggyLayer.hide();
}
};
});
// Sortable table
@ -1280,7 +1277,7 @@ jQuery(function($){
.addClass('draggable')
.css({
position: 'absolute',
opacity : .6,
opacity : 0.6,
width : width,
height : height,
left : offset.left,
@ -1292,7 +1289,7 @@ jQuery(function($){
$holder
.css({
position:'absolute',
opacity : .6,
opacity : 0.6,
width : width,
height : '10px',
left : offset.left,
@ -1303,7 +1300,7 @@ jQuery(function($){
})
.appendTo($table);
$tr.css('opacity', .6);
$tr.css('opacity', 0.6);
$(document)
.unbind('mousedown.st mouseup.st')
@ -1349,7 +1346,7 @@ jQuery(function($){
$table.trigger('after-drag.st');
});
})
});
return this;
};
@ -1374,7 +1371,7 @@ jQuery(function($){
$list.find('.select')
.bind('click', function(event){
var selectedImages = $('input.select_checkbox:checked');
if(selectedImages.length == 0) {
if(selectedImages.length === 0) {
var selectedImgSrc = $(this).closest('tr').find('img.filebox_item').attr('src');
if(!selectedImgSrc){
alert("None selected!");
@ -1423,8 +1420,8 @@ jQuery(function($){
var detailBtn = $('.x .dsTg .__detail');
var tdTitle = $('.x .dsTg td.title');
tdTitle.each(function(){
var $t = $(this)
if($t.find('p.x_alert').length==0){
var $t = $(this);
if($t.find('p.x_alert').length === 0){
$t.addClass('tg').find('>*:not(:first-child)').hide();
}
});
@ -1838,7 +1835,7 @@ jQuery(function($){
}, on_complete);
return this;
}
};
});
// Apply Multilingual UI
@ -1872,13 +1869,15 @@ jQuery(function($){
function makeUI(){
var $multilingualWindow = $('#g11n');
var width = $this.width();
var $displayInput;
if(t.tagName == 'TEXTAREA' || $this.data('type') == 'textarea'){
var $displayInput = $('<textarea id="lang_' + id + '" class="lang_code" style="width:' + width + 'px" data-width="' + width + '">').data('lang-id', id);
$displayInput = $('<textarea id="lang_' + id + '" class="lang_code" style="width:' + width + 'px" data-width="' + width + '">').data('lang-id', id);
}else{
var $displayInput = $('<input type="text" id="lang_' + id + '" class="lang_code" style="width:' + (width-28) + 'px" data-width="' + (width-28) + '">').data('lang-id', id);
$displayInput = $('<input type="text" id="lang_' + id + '" class="lang_code" style="width:' + (width-28) + 'px" data-width="' + (width-28) + '">').data('lang-id', id);
}
$displayInput.attr('placeholder', $this.attr('placeholder'))
$displayInput.attr('placeholder', $this.attr('placeholder'));
var $remover = $('<button type="button" class="x_add-on remover" title="' + xe.cmd_remove_multilingual_text + '"><i class="x_icon-remove"></i>' + xe.cmd_remove_multilingual_text + '</button>').data('lang-target', id);
var $setter = $('<a href="#g11n" class="x_add-on modalAnchor" title="' + xe.cmd_set_multilingual_text + '"><i class="x_icon-globe"></i>' + xe.cmd_set_multilingual_text + '</a>').data('lang-target', id);
@ -1965,16 +1964,17 @@ jQuery(function($){
function loadValue(){
reset();
var pattern = /^\$user_lang->/;
function on_complete2(data){
if(!data || !data.langs) return;
var width = $displayInput.width();
$displayInput.closest('.g11n').addClass('active');
$displayInput.val(data.langs[xe.current_lang]).attr('disabled', 'disabled').width(width - 44).data('active', true);
}
if(pattern.test($displayInput.val())){
function on_complete2(data){
if(!data || !data.langs) return;
var width = $displayInput.width();
$displayInput.closest('.g11n').addClass('active');
$displayInput.val(data.langs[xe.current_lang]).attr('disabled', 'disabled').width(width - 44).data('active', true);
}
$.exec_json('module.getModuleAdminLangCode', {
'name': $displayInput.val().replace('$user_lang->', ''),
'mid': current_url.getQuery('mid')
@ -2040,12 +2040,8 @@ jQuery(function($){
//data-multiple
$.xeMenuSelectorVar = {bMultiSelect: false};
$.template( "menuSelector_menuTree", '<ul>{{html Nodes}}</ul>' );
$.template( "menuSelector_menuTreeNode", ' <li>\
<a href="#" class="_nodeType_${NodeType} _menu_node _menu_url_${MenuUrl}" data-param=\'{ "sMenuId":"${MenuId}", "sMenuUrl":"${MenuUrl}", "sMenuTitle":"${MenuTitle}", "sType":"${MenuType}", "sModuleSrl":"${ModuleSrl}" }\'>${MenuTitle}</a>\
{{html SubTree}}\
</li>' );
//data-param=\'{ "sMenuId":"${MenuId}", "sMenuUrl":"${MenuUrl}", "sMenuTitle":"${MenuTitle}" }\'
$.template('menuSelector_menuTree', '<ul>{{html Nodes}}</ul>');
$.template('menuSelector_menuTreeNode', '<li> <a href="#" class="_nodeType_${NodeType} _menu_node _menu_url_${MenuUrl}" data-param=\'{ "sMenuId":"${MenuId}", "sMenuUrl":"${MenuUrl}", "sMenuTitle":"${MenuTitle}", "sType":"${MenuType}", "sModuleSrl":"${ModuleSrl}" }\'>${MenuTitle}</a> {{html SubTree}} </li>'); //data-param=\'{ "sMenuId":"${MenuId}", "sMenuUrl":"${MenuUrl}", "sMenuTitle":"${MenuTitle}" }\'
function onSiteMapReceived(htData){
var $ = jQuery;
@ -2168,7 +2164,7 @@ jQuery(function($){
htNodeInfo = {};
$.exec_json("menu.getMenuAdminSiteMap", params, onSiteMapReceived);
}
};
// return html
function createTreeMarkup(aNode, sParentSrl, sMenuTree, sMenuTreeNode){
@ -2177,13 +2173,11 @@ jQuery(function($){
sMenuTree = sMenuTree || "menuSelector_menuTree";
sMenuTreeNode = sMenuTreeNode || "menuSelector_menuTreeNode";
var $ = jQuery;
if(aNode.length == 0){
if(aNode.length === 0){
return "";
}
var sActiveBtn, sNormalBtn, sHoverBtn, sExpand, sLink, aSubNodes, sNodeSrl, sOpenWindow, sParentSrl, nSelected, sText, sURL, sIsStartModule, aSubNode, sModuleType;
var sActiveBtn, sNormalBtn, sHoverBtn, sExpand, sLink, aSubNodes, sNodeSrl, sOpenWindow, nSelected, sText, sURL, sIsStartModule, aSubNode, sModuleType;
// 1: Sitemap node, 2: Menu node
var nNodeType;
@ -2292,8 +2286,8 @@ jQuery(function($){
$.xeMenuSelectorVar.bMultiSelect = ""+$btn.data('multiple') == "true";
//{sMenuId":"578", "sMenuUrl":"page_ANom60", "sMenuTitle":"wwww", "sType":"WIDGET" }
$.xeMenuSelectorVar.aAllowedType = $.grep((""+($btn.data('allowedType') || "")).split(','), function(el){return el !== ""});
$.xeMenuSelectorVar.aDisallowedType = $.grep((""+($btn.data('disallowedType') || "")).split(','), function(el){return el !== ""});
$.xeMenuSelectorVar.aAllowedType = $.grep((""+($btn.data('allowedType') || '')).split(','), function(el){return el !== '';});
$.xeMenuSelectorVar.aDisallowedType = $.grep((""+($btn.data('disallowedType') || '')).split(','), function(el){return el !== '';});
$.xeMenuSelectorVar.aDisallowedType.push("_ROOT");
$.xeMenuSelectorVar.aDisallowedType.push("_SHORTCUT");
@ -2305,22 +2299,22 @@ jQuery(function($){
});
$.exec_json('admin.getSiteAllList', {domain:""}, onSiteAllListCompleted);
}
};
function xeMenuSearch(ev){
var $btn = $(ev.target);
$.xeMenuSelectorVar.bMultiSelect = ""+$btn.data('multiple') == "true";
//{sMenuId":"578", "sMenuUrl":"page_ANom60", "sMenuTitle":"wwww", "sType":"WIDGET" }
$.xeMenuSelectorVar.aAllowedType = $.grep((""+($btn.data('allowedType') || "")).split(','), function(el){return el !== ""});
$.xeMenuSelectorVar.aDisallowedType = $.grep((""+($btn.data('disallowedType') || "")).split(','), function(el){return el !== ""});
$.xeMenuSelectorVar.aAllowedType = $.grep((""+($btn.data('allowedType') || '')).split(','), function(el){return el !== '';});
$.xeMenuSelectorVar.aDisallowedType = $.grep((""+($btn.data('disallowedType') || '')).split(','), function(el){return el !== '';});
$.xeMenuSelectorVar.aDisallowedType.push("_ROOT");
$.xeMenuSelectorVar.aDisallowedType.push("_SHORTCUT");
if($.inArray("page", $.xeMenuSelectorVar.aAllowedType) > -1){
$.xeMenuSelectorVar.aAllowedType.push("ARTICLE", "WIDGET", "OUTSIDE");
if($.inArray('page', $.xeMenuSelectorVar.aAllowedType) > -1){
$.xeMenuSelectorVar.aAllowedType.push('ARTICLE', 'WIDGET', 'OUTSIDE');
}
if($.inArray("page", $.xeMenuSelectorVar.aDisallowedType) > -1){
$.xeMenuSelectorVar.aDisallowedType.push("ARTICLE", "WIDGET", "OUTSIDE");
if($.inArray('page', $.xeMenuSelectorVar.aDisallowedType) > -1){
$.xeMenuSelectorVar.aDisallowedType.push('ARTICLE', 'WIDGET', 'OUTSIDE');
}
//bMultiSelect = //data-multiple
@ -2424,7 +2418,7 @@ jQuery(function($){
});
return this;
}
};
$msgBox = $('.x_modal._common');
$msgBox.on('change', '.site_selector', function(ev){
@ -2451,7 +2445,7 @@ jQuery(function($){
try {
window.alert = function(){
return $.xeMsgBox.alert.apply($.xeMsgBox, arguments);
}
};
setTimeout(function(){$('div.message.info').fadeOut(1000);}, 2500);
}catch(e){}
});

File diff suppressed because one or more lines are too long

View file

@ -3,6 +3,7 @@ jQuery(function($){
$('#sitefind_addBtn').css('display','');
});
});
function setStartModule(){
var target_module = jQuery('.moduleIdList option:selected').text();
var index_module_srl = jQuery('.moduleIdList').val();
@ -10,104 +11,106 @@ function setStartModule(){
jQuery('#index_module_srl').val(index_module_srl);
jQuery('.moduleList,.moduleIdList, .site_keyword_search, #sitefind_addBtn').css('display','none');
}
function viewSiteSearch(){
jQuery(".site_keyword_search").css("display","");
}
function getFTPList(pwd)
{
var form = jQuery("#ftp_form").get(0);
if(typeof(pwd) != 'undefined')
{
form.ftp_root_path.value = pwd;
}
else
{
if(!form.ftp_root_path.value && typeof(form.sftp) != 'undefined' && form.sftp.checked)
{
form.ftp_root_path.value = xe_root;
}
var form = jQuery("#ftp_form").get(0);
if(typeof(pwd) != 'undefined')
{
form.ftp_root_path.value = pwd;
}
else
{
if(!form.ftp_root_path.value && typeof(form.sftp) != 'undefined' && form.sftp.checked)
{
form.ftp_root_path.value = xe_root;
}
else
{
form.ftp_root_path.value = "/";
}
}
{
form.ftp_root_path.value = "/";
}
}
var params= new Array();
var params = [];
//ftp_pasv not used
params['ftp_user'] = jQuery("#ftp_user").val();
params['ftp_password'] =jQuery("#ftp_password").val();
params['ftp_host'] = jQuery("#ftp_host").val();
params['ftp_port'] = jQuery("#ftp_port").val();
params['ftp_root_path'] = jQuery("#ftp_root_path").val();
params['sftp'] = jQuery("input[name=sftp]:checked").val();
params.ftp_user = jQuery("#ftp_user").val();
params.ftp_password =jQuery("#ftp_password").val();
params.ftp_host = jQuery("#ftp_host").val();
params.ftp_port = jQuery("#ftp_port").val();
params.ftp_root_path = jQuery("#ftp_root_path").val();
params.sftp = jQuery("input[name=sftp]:checked").val();
exec_xml('admin', 'getAdminFTPList', params, completeGetFtpInfo, ['list', 'error', 'message'], params, form);
exec_xml('admin', 'getAdminFTPList', params, completeGetFtpInfo, ['list', 'error', 'message'], params, form);
}
function removeFTPInfo()
{
var params = {};
exec_xml('install', 'procInstallAdminRemoveFTPInfo', params, filterAlertMessage, ['error', 'message'], params);
var params = {};
exec_xml('install', 'procInstallAdminRemoveFTPInfo', params, filterAlertMessage, ['error', 'message'], params);
}
function completeGetFtpInfo(ret_obj)
{
if(ret_obj['error'] != 0)
{
alert(ret_obj['error']);
alert(ret_obj['message']);
return;
}
var e = jQuery("#ftpSuggestion").empty();
if(ret_obj.error !== 0)
{
alert(ret_obj.error);
alert(ret_obj.message);
return;
}
var e = jQuery("#ftpSuggestion").empty();
var list = "";
if(!jQuery.isArray(ret_obj['list']['item']))
{
ret_obj['list']['item'] = [ret_obj['list']['item']];
}
var list = "";
if(!jQuery.isArray(ret_obj.list.item))
{
ret_obj.list.item = [ret_obj.list.item];
}
pwd = jQuery("#ftp_form").get(0).ftp_root_path.value;
if(pwd != "/")
{
arr = pwd.split("/");
arr.pop();
arr.pop();
arr.push("");
target = arr.join("/");
list = list + "<li><button type='button' onclick=\"getFTPList('"+target+"')\">../</button></li>";
}
pwd = jQuery("#ftp_form").get(0).ftp_root_path.value;
if(pwd != "/")
{
arr = pwd.split("/");
arr.pop();
arr.pop();
arr.push("");
target = arr.join("/");
list = list + "<li><button type='button' onclick=\"getFTPList('"+target+"')\">../</button></li>";
}
for(var i=0;i<ret_obj['list']['item'].length;i++)
{
var v = ret_obj['list']['item'][i];
if(v == "../")
{
continue;
}
else if( v == "./")
{
continue;
}
else
{
list = list + "<li><button type='button' onclick=\"getFTPList('"+pwd+v+"')\">"+v+"</button></li>";
}
}
list = "<ul>"+list+"</ul>";
e.append(jQuery(list));
for(var i=0;i<ret_obj.list.item.length;i++)
{
var v = ret_obj.list.item[i];
if(v == "../")
{
continue;
}
else if( v == "./")
{
continue;
}
else
{
list = list + "<li><button type='button' onclick=\"getFTPList('"+pwd+v+"')\">"+v+"</button></li>";
}
}
list = "<ul>"+list+"</ul>";
e.append(jQuery(list));
}
var icon = null;
function deleteIcon(iconname){
var params = new Array();
params['iconname'] = iconname;
var params = [];
params.iconname = iconname;
exec_xml('admin', 'procAdminRemoveIcons', params, iconDeleteMessage, ['error', 'message'], params);
icon = iconname;
}
function iconDeleteMessage(ret_obj){
alert(ret_obj['message']);
alert(ret_obj.message);
if (ret_obj['error'] == '0')
if (ret_obj.error == '0')
{
if (icon == 'favicon.ico'){
jQuery('.faviconPreview img').attr('src', 'modules/admin/tpl/img/faviconSample.png');
@ -118,17 +121,17 @@ function iconDeleteMessage(ret_obj){
}
function doRecompileCacheFile() {
if (!confirm(xe.lang.confirm_run)) return;
var params = new Array();
var params = [];
exec_xml("admin","procAdminRecompileCacheFile", params, completeCacheMessage);
}
function completeCacheMessage(ret_obj) {
alert(ret_obj['message']);
alert(ret_obj.message);
}
function doResetAdminMenu() {
if (!confirm(xe.lang.confirm_reset_admin_menu)) return;
var params = new Array();
params['menu_srl'] = admin_menu_srl;
var params = [];
params.menu_srl = admin_menu_srl;
exec_xml("admin","procAdminMenuReset", params, completeResetAdminMenu);
}
function completeResetAdminMenu(ret_obj) {

View file

@ -1 +1 @@
function setStartModule(){var a=jQuery(".moduleIdList option:selected").text(),b=jQuery(".moduleIdList").val();jQuery("#_target_module").val(a),jQuery("#index_module_srl").val(b),jQuery(".moduleList,.moduleIdList, .site_keyword_search, #sitefind_addBtn").css("display","none")}function viewSiteSearch(){jQuery(".site_keyword_search").css("display","")}function getFTPList(a){var b=jQuery("#ftp_form").get(0);b.ftp_root_path.value="undefined"!=typeof a?a:!b.ftp_root_path.value&&"undefined"!=typeof b.sftp&&b.sftp.checked?xe_root:"/";var c=new Array;c.ftp_user=jQuery("#ftp_user").val(),c.ftp_password=jQuery("#ftp_password").val(),c.ftp_host=jQuery("#ftp_host").val(),c.ftp_port=jQuery("#ftp_port").val(),c.ftp_root_path=jQuery("#ftp_root_path").val(),c.sftp=jQuery("input[name=sftp]:checked").val(),exec_xml("admin","getAdminFTPList",c,completeGetFtpInfo,["list","error","message"],c,b)}function removeFTPInfo(){var a={};exec_xml("install","procInstallAdminRemoveFTPInfo",a,filterAlertMessage,["error","message"],a)}function completeGetFtpInfo(a){if(0!=a.error)return alert(a.error),alert(a.message),void 0;var b=jQuery("#ftpSuggestion").empty(),c="";jQuery.isArray(a.list.item)||(a.list.item=[a.list.item]),pwd=jQuery("#ftp_form").get(0).ftp_root_path.value,"/"!=pwd&&(arr=pwd.split("/"),arr.pop(),arr.pop(),arr.push(""),target=arr.join("/"),c=c+"<li><button type='button' onclick=\"getFTPList('"+target+"')\">../</button></li>");for(var d=0;d<a.list.item.length;d++){var e=a.list.item[d];"../"!=e&&"./"!=e&&(c=c+"<li><button type='button' onclick=\"getFTPList('"+pwd+e+"')\">"+e+"</button></li>")}c="<ul>"+c+"</ul>",b.append(jQuery(c))}function deleteIcon(a){var b=new Array;b.iconname=a,exec_xml("admin","procAdminRemoveIcons",b,iconDeleteMessage,["error","message"],b),icon=a}function iconDeleteMessage(a){alert(a.message),"0"==a.error&&("favicon.ico"==icon?jQuery(".faviconPreview img").attr("src","modules/admin/tpl/img/faviconSample.png"):"mobicon.png"==icon&&jQuery(".mobiconPreview img").attr("src","modules/admin/tpl/img/mobiconSample.png"))}function doRecompileCacheFile(){if(confirm(xe.lang.confirm_run)){var a=new Array;exec_xml("admin","procAdminRecompileCacheFile",a,completeCacheMessage)}}function completeCacheMessage(a){alert(a.message)}function doResetAdminMenu(){if(confirm(xe.lang.confirm_reset_admin_menu)){var a=new Array;a.menu_srl=admin_menu_srl,exec_xml("admin","procAdminMenuReset",a,completeResetAdminMenu)}}function completeResetAdminMenu(){document.location.reload()}jQuery(function(a){a(".tgContent ul").bind("click",function(){a("#sitefind_addBtn").css("display","")})});var icon=null;
function setStartModule(){var a=jQuery(".moduleIdList option:selected").text(),b=jQuery(".moduleIdList").val();jQuery("#_target_module").val(a),jQuery("#index_module_srl").val(b),jQuery(".moduleList,.moduleIdList, .site_keyword_search, #sitefind_addBtn").css("display","none")}function viewSiteSearch(){jQuery(".site_keyword_search").css("display","")}function getFTPList(a){var b=jQuery("#ftp_form").get(0);b.ftp_root_path.value="undefined"!=typeof a?a:!b.ftp_root_path.value&&"undefined"!=typeof b.sftp&&b.sftp.checked?xe_root:"/";var c=[];c.ftp_user=jQuery("#ftp_user").val(),c.ftp_password=jQuery("#ftp_password").val(),c.ftp_host=jQuery("#ftp_host").val(),c.ftp_port=jQuery("#ftp_port").val(),c.ftp_root_path=jQuery("#ftp_root_path").val(),c.sftp=jQuery("input[name=sftp]:checked").val(),exec_xml("admin","getAdminFTPList",c,completeGetFtpInfo,["list","error","message"],c,b)}function removeFTPInfo(){var a={};exec_xml("install","procInstallAdminRemoveFTPInfo",a,filterAlertMessage,["error","message"],a)}function completeGetFtpInfo(a){if(0!==a.error)return alert(a.error),void alert(a.message);var b=jQuery("#ftpSuggestion").empty(),c="";jQuery.isArray(a.list.item)||(a.list.item=[a.list.item]),pwd=jQuery("#ftp_form").get(0).ftp_root_path.value,"/"!=pwd&&(arr=pwd.split("/"),arr.pop(),arr.pop(),arr.push(""),target=arr.join("/"),c=c+"<li><button type='button' onclick=\"getFTPList('"+target+"')\">../</button></li>");for(var d=0;d<a.list.item.length;d++){var e=a.list.item[d];"../"!=e&&"./"!=e&&(c=c+"<li><button type='button' onclick=\"getFTPList('"+pwd+e+"')\">"+e+"</button></li>")}c="<ul>"+c+"</ul>",b.append(jQuery(c))}function deleteIcon(a){var b=[];b.iconname=a,exec_xml("admin","procAdminRemoveIcons",b,iconDeleteMessage,["error","message"],b),icon=a}function iconDeleteMessage(a){alert(a.message),"0"==a.error&&("favicon.ico"==icon?jQuery(".faviconPreview img").attr("src","modules/admin/tpl/img/faviconSample.png"):"mobicon.png"==icon&&jQuery(".mobiconPreview img").attr("src","modules/admin/tpl/img/mobiconSample.png"))}function doRecompileCacheFile(){if(confirm(xe.lang.confirm_run)){var a=[];exec_xml("admin","procAdminRecompileCacheFile",a,completeCacheMessage)}}function completeCacheMessage(a){alert(a.message)}function doResetAdminMenu(){if(confirm(xe.lang.confirm_reset_admin_menu)){var a=[];a.menu_srl=admin_menu_srl,exec_xml("admin","procAdminMenuReset",a,completeResetAdminMenu)}}function completeResetAdminMenu(){document.location.reload()}jQuery(function(a){a(".tgContent ul").bind("click",function(){a("#sitefind_addBtn").css("display","")})});var icon=null;

View file

@ -435,7 +435,7 @@
.undelegate(".jstree")
.removeData("jstree-instance-id")
.find("[class^='jstree']")
.andSelf()
.addBack()
.attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
$(document)
.unbind(".jstree-" + n)
@ -678,7 +678,7 @@
}
else {
original_obj = obj;
if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); }
if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").addBack(); }
else { obj = obj.find("li.jstree-closed"); }
}
var _this = this;
@ -694,12 +694,12 @@
var _this = this;
obj = obj ? this._get_node(obj) : this.get_container();
if(!obj || obj === -1) { obj = this.get_container_ul(); }
obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); });
obj.find("li.jstree-open").addBack().each(function () { _this.close_node(this, !do_animation); });
this.__callback({ "obj" : obj });
},
clean_node : function (obj) {
obj = obj && obj != -1 ? $(obj) : this.get_container_ul();
obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li");
obj = obj.is("li") ? obj.find("li").addBack() : obj.find("li");
obj.removeClass("jstree-last")
.filter("li:last-child").addClass("jstree-last").end()
.filter(":has(li)")
@ -922,7 +922,7 @@
if(!obj || !obj.o || obj.or[0] === obj.o[0]) { return false; }
if(obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp - 1 === obj.o.index()) { return false; }
obj.o.each(function () {
if(r.parentsUntil(".jstree", "li").andSelf().index(this) !== -1) { ret = false; return false; }
if(r.parentsUntil(".jstree", "li").addBack().index(this) !== -1) { ret = false; return false; }
});
return ret;
},
@ -941,7 +941,7 @@
var o = false;
if(is_copy) {
o = obj.o.clone(true);
o.find("*[id]").andSelf().each(function () {
o.find("*[id]").addBack().each(function () {
if(this.id) { this.id = "copy_" + this.id; }
});
}
@ -1138,7 +1138,7 @@
switch(!0) {
case (is_range):
this.data.ui.last_selected.addClass("jstree-last-selected");
obj = obj[ obj.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil" ](".jstree-last-selected").andSelf();
obj = obj[ obj.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil" ](".jstree-last-selected").addBack();
if(s.select_limit == -1 || obj.length < s.select_limit) {
this.data.ui.last_selected.removeClass("jstree-last-selected");
this.data.ui.selected.each(function () {
@ -1242,7 +1242,7 @@
.bind("move_node.jstree", $.proxy(function (e, data) {
if(this._get_settings().crrm.move.open_onmove) {
var t = this;
data.rslt.np.parentsUntil(".jstree").andSelf().filter(".jstree-closed").each(function () {
data.rslt.np.parentsUntil(".jstree").addBack().filter(".jstree-closed").each(function () {
t.open_node(this, false, true);
});
}
@ -2800,7 +2800,7 @@
obj.each(function () {
t = $(this);
c = t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" : "jstree-unchecked";
t.find("li").andSelf().each(function () {
t.find("li").addBack().each(function () {
var $t = $(this), nm;
$t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c );
if(rc) {
@ -2844,13 +2844,13 @@
}
else {
if(state) {
coll = obj.find("li").andSelf();
coll = obj.find("li").addBack();
if(!coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; }
coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
if(rc) { coll.children(":checkbox").removeAttr("checked"); }
}
else {
coll = obj.find("li").andSelf();
coll = obj.find("li").addBack();
if(!coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; }
coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
if(rc) { coll.children(":checkbox").attr("checked","checked"); }
@ -2861,8 +2861,8 @@
var $this = $(this);
if(state) {
if($this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) {
$this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
$this.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { $this.parentsUntil(".jstree", "li").addBack().children(":checkbox").removeAttr("checked"); }
return false;
}
else {
@ -2872,8 +2872,8 @@
}
else {
if($this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) {
$this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
$this.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { $this.parentsUntil(".jstree", "li").addBack().children(":checkbox").removeAttr("checked"); }
return false;
}
else {
@ -2944,8 +2944,8 @@
else if(a === 0 && b === 0) { this.change_state(obj, true); }
else if(a === c) { this.change_state(obj, false); }
else {
obj.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { obj.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
obj.parentsUntil(".jstree","li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
if(rc) { obj.parentsUntil(".jstree", "li").addBack().children(":checkbox").removeAttr("checked"); }
}
},
reselect : function () {
@ -3415,7 +3415,7 @@
this.get_container()
.bind("search.jstree", function (e, data) {
$(this).children("ul").find("li").hide().removeClass("jstree-last");
data.rslt.nodes.parentsUntil(".jstree").andSelf().show()
data.rslt.nodes.parentsUntil(".jstree").addBack().show()
.filter("ul").each(function () { $(this).children("li:visible").eq(-1).addClass("jstree-last"); });
})
.bind("clear_search.jstree", function () {
@ -4001,7 +4001,7 @@
// this used to use html() and clean the whitespace, but this way any attached data was lost
this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true);
// remove white space from LI node - otherwise nodes appear a bit to the right
this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove();
this.data.html_data.original_container_html.find("li").addBack().contents().filter(function() { return this.nodeType == 3; }).remove();
},
defaults : {
data : false,
@ -4427,7 +4427,7 @@
obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj);
if(obj === false) { return; } // added for removing root nodes
obj.each(function () {
$(this).find("li").andSelf().each(function () {
$(this).find("li").addBack().each(function () {
var $t = $(this);
if($t.children(".jstree-wholerow-span").length) { return true; }
$t.prepend("<span class='jstree-wholerow-span' style='width:" + ($t.parentsUntil(".jstree","li").length * 18) + "px;'>&#160;</span>");

View file

@ -9,8 +9,8 @@ jQuery(function($){
editForm.find('input[name=parent_srl]').val(parentSrl);
if(!menuList)
{
var params = new Array();
var response_tags = new Array('menuList');
var params = [];
var response_tags = ['menuList'];
exec_xml("menu","procMenuAdminAllActList", params, completeGetActList, response_tags);
}
});
@ -22,7 +22,7 @@ jQuery(function($){
moduleList = obj.menuList;
if(moduleList)
{
var menuNameList = $('#menuNameList');
var menuNameList = $('#menuNameList');
for(var x in moduleList)
{
var menuList = moduleList[x];
@ -42,7 +42,7 @@ jQuery(function($){
});
$('a._child_delete').click(function() {
var menu_item_srl = $(this).parents('li').find('._item_key').val();
var menu_item_srl = $(this).closest('li').find('._item_key').val();
listForm.find('input[name=menu_item_srl]').val(menu_item_srl);
listForm.submit();
});
@ -63,12 +63,9 @@ $('form.adminMap')
} else {
$pkey.val('0');
}
})
var
dragging = false,
$holder = $('<li class="placeholder">');
});
var dragging = false, $holder = $('<li class="placeholder">');
$('form.adminMap>ul')
.delegate('li:not(.placeholder,.parent)', {
'mousedown.st' : function(event) {
@ -109,7 +106,7 @@ $('form.adminMap>ul')
.addClass('draggable')
.css({
position: 'absolute',
opacity : .6,
opacity : 0.6,
width : width,
height : height,
left : offset.left,
@ -122,7 +119,7 @@ $('form.adminMap>ul')
$holder
.css({
position:'absolute',
opacity : .6,
opacity : 0.6,
width : width,
height : '10px',
left : offset.left,
@ -131,7 +128,7 @@ $('form.adminMap>ul')
})
.appendTo($ul.eq(0));
$this.css('opacity', .6);
$this.css('opacity', 0.6);
$(document)
.unbind('mousemove.st mouseup.st')
@ -187,8 +184,8 @@ $('form.adminMap>ul')
$dropzone[dropzone.state]($this.hide());
}
$this.slideDown(100, function(){ $this.removeClass('active') });
$li.slideUp(100, function(){ var $par = $li.parent(); $li.remove(); if(!$par.children('li').length) $par.remove() });
$this.slideDown(100, function(){ $this.removeClass('active'); });
$li.slideUp(100, function(){ var $par = $li.parent(); $li.remove(); if(!$par.children('li').length) $par.remove(); });
// trigger 'dropped.st' event
$this.trigger('dropped.st');

View file

@ -1 +1 @@
jQuery(function(a){function b(b){var c;if(moduleList=b.menuList){var d=a("#menuNameList");for(var e in moduleList){var f=moduleList[e];c=a('<optgroup label="'+e+'" />').appendTo(d);for(var g in f)c.append('<option value="'+e+":"+g+'">'+f[g].title+"</option>")}}}var c,d,e=a("#editForm"),f=a("#listForm");a("a._add").click(function(){if(d=a(this).parent().prevAll("._item_key").val(),e.find("input[name=parent_srl]").val(d),!c){var f=new Array,g=new Array("menuList");exec_xml("menu","procMenuAdminAllActList",f,b,g)}}),a("a._parent_delete").click(function(){var b=a(this).parent().prevAll("._parent_key").val();f.find("input[name=menu_item_srl]").val(b),f.submit()}),a("a._child_delete").click(function(){var b=a(this).parents("li").find("._item_key").val();f.find("input[name=menu_item_srl]").val(b),f.submit()})}),jQuery(function(a){function b(a,b){for(var c=0,d=0;a&&a!=b;)c+=a.offsetTop,d+=a.offsetLeft,a=a.offsetParent;return{top:c,left:d}}a("form.adminMap").delegate("li:not(.placeholder)","dropped.st",function(){var b,c,d=a(this);b=d.find(">input._parent_key"),c=!!d.parent("ul").parent("li").length,c?b.val(d.parent("ul").parent("li").find(">input._item_key").val()):b.val("0")});var c=!1,d=a('<li class="placeholder">');a("form.adminMap>ul").delegate("li:not(.placeholder,.parent)",{"mousedown.st":function(e){var f,g,h,i,j,k,l,m,n,o;if(!a(e.target).is("a,input,label,textarea")&&1==e.which){for(c=!0,f=a(this),j=f.height(),i=f.width(),g=f.parentsUntil(".adminMap").filter("ul"),h=g.eq(-1),l={x:e.pageX,y:e.pageY},k=b(this,h.get(0)),$clone=f.clone(!0).attr("target",!0),n=g.length-1;n;n--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();return m=[],h.find("li").each(function(){if(f[0]===this||f.has(this).length)return!0;var c=b(this,h.get(0));m.push({top:c.top,bottom:c.top+32,$item:a(this)})}),$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:.6,width:i,height:j,left:k.left,top:k.top,zIndex:100}).appendTo(h.eq(0)),d.css({position:"absolute",opacity:.6,width:i,height:"10px",left:k.left,top:k.top,zIndex:99}).appendTo(h.eq(0)),f.css("opacity",.6),a(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f,g;for(o=null,b={x:l.x-a.pageX,y:l.y-a.pageY},c=k.top-b.y,e=0,f=m.length;f>e;e++)g=m[e],g.top>c||g.bottom<c||(o={element:g.$item},g.$item.hasClass("parent")?(o.state="prepend",d.css("top",g.bottom-5)):g.top>c-12?(o.state="before",d.css("top",g.top-5)):(o.state="after",d.css("top",g.bottom-5)));$clone.css({top:c})}).bind("mouseup.st",function(){var b,e;c=!1,a(document).unbind("mousemove.st mouseup.st"),f.css("opacity",""),$clone.remove(),d.remove(),e=a("<li />").height(f.height()),o&&(b=a(o.element),f.before(e),"prepend"==o.state?(b.find(">ul").length||b.find(">.side").after("<ul>"),b.find(">ul").prepend(f.hide())):b[o.state](f.hide()),f.slideDown(100,function(){f.removeClass("active")}),e.slideUp(100,function(){var a=e.parent();e.remove(),a.children("li").length||a.remove()}),f.trigger("dropped.st"))}),!1}},"mouseover.st":function(){return c||a(this).addClass("active"),!1},"mouseout.st":function(){return c||a(this).removeClass("active"),!1}}).find("li li").prepend('<button type="button" class="moveTo">Move to</button>').end().end(),a('<div id="dropzone-marker" />').css({display:"none",position:"absolute",backgroundColor:"#000",opacity:.7}).appendTo("body")});
jQuery(function(a){function b(b){var c;if(moduleList=b.menuList){var d=a("#menuNameList");for(var e in moduleList){var f=moduleList[e];c=a('<optgroup label="'+e+'" />').appendTo(d);for(var g in f)c.append('<option value="'+e+":"+g+'">'+f[g].title+"</option>")}}}var c,d,e=a("#editForm"),f=a("#listForm");a("a._add").click(function(){if(d=a(this).parent().prevAll("._item_key").val(),e.find("input[name=parent_srl]").val(d),!c){var f=[],g=["menuList"];exec_xml("menu","procMenuAdminAllActList",f,b,g)}}),a("a._parent_delete").click(function(){var b=a(this).parent().prevAll("._parent_key").val();f.find("input[name=menu_item_srl]").val(b),f.submit()}),a("a._child_delete").click(function(){var b=a(this).closest("li").find("._item_key").val();f.find("input[name=menu_item_srl]").val(b),f.submit()})}),jQuery(function(a){function b(a,b){for(var c=0,d=0;a&&a!=b;)c+=a.offsetTop,d+=a.offsetLeft,a=a.offsetParent;return{top:c,left:d}}a("form.adminMap").delegate("li:not(.placeholder)","dropped.st",function(){var b,c,d=a(this);b=d.find(">input._parent_key"),c=!!d.parent("ul").parent("li").length,b.val(c?d.parent("ul").parent("li").find(">input._item_key").val():"0")});var c=!1,d=a('<li class="placeholder">');a("form.adminMap>ul").delegate("li:not(.placeholder,.parent)",{"mousedown.st":function(e){var f,g,h,i,j,k,l,m,n,o;if(!a(e.target).is("a,input,label,textarea")&&1==e.which){for(c=!0,f=a(this),j=f.height(),i=f.width(),g=f.parentsUntil(".adminMap").filter("ul"),h=g.eq(-1),l={x:e.pageX,y:e.pageY},k=b(this,h.get(0)),$clone=f.clone(!0).attr("target",!0),n=g.length-1;n;n--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();return m=[],h.find("li").each(function(){if(f[0]===this||f.has(this).length)return!0;var c=b(this,h.get(0));m.push({top:c.top,bottom:c.top+32,$item:a(this)})}),$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:.6,width:i,height:j,left:k.left,top:k.top,zIndex:100}).appendTo(h.eq(0)),d.css({position:"absolute",opacity:.6,width:i,height:"10px",left:k.left,top:k.top,zIndex:99}).appendTo(h.eq(0)),f.css("opacity",.6),a(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,c,e,f,g;for(o=null,b={x:l.x-a.pageX,y:l.y-a.pageY},c=k.top-b.y,e=0,f=m.length;f>e;e++)g=m[e],g.top>c||g.bottom<c||(o={element:g.$item},g.$item.hasClass("parent")?(o.state="prepend",d.css("top",g.bottom-5)):g.top>c-12?(o.state="before",d.css("top",g.top-5)):(o.state="after",d.css("top",g.bottom-5)));$clone.css({top:c})}).bind("mouseup.st",function(){var b,e;c=!1,a(document).unbind("mousemove.st mouseup.st"),f.css("opacity",""),$clone.remove(),d.remove(),e=a("<li />").height(f.height()),o&&(b=a(o.element),f.before(e),"prepend"==o.state?(b.find(">ul").length||b.find(">.side").after("<ul>"),b.find(">ul").prepend(f.hide())):b[o.state](f.hide()),f.slideDown(100,function(){f.removeClass("active")}),e.slideUp(100,function(){var a=e.parent();e.remove(),a.children("li").length||a.remove()}),f.trigger("dropped.st"))}),!1}},"mouseover.st":function(){return c||a(this).addClass("active"),!1},"mouseout.st":function(){return c||a(this).removeClass("active"),!1}}).find("li li").prepend('<button type="button" class="moveTo">Move to</button>').end().end(),a('<div id="dropzone-marker" />').css({display:"none",position:"absolute",backgroundColor:"#000",opacity:.7}).appendTo("body")});

View file

@ -1,2 +0,0 @@
[option]
use_closure_compiler=true

View file

@ -1,199 +0,0 @@
/* NAVER (developers@xpressengine.com) */
jQuery(function($){
var
dragging = false,
$holder = $('<li class="placeholder">');
$('form.siteMap')
.delegate('li:not(.placeholder)', {
'mousedown.st' : function(event) {
var $this, $uls, $ul, width, height, offset, position, offsets, i, dropzone, wrapper='';
if($(event.target).is('a,input,label,textarea') || event.which != 1) return;
dragging = true;
$this = $(this);
height = $this.height();
width = $this.width();
$uls = $this.parentsUntil('.siteMap').filter('ul');
$ul = $uls.eq(-1);
$ul.css('position', 'relative');
position = {x:event.pageX, y:event.pageY};
offset = getOffset(this, $ul.get(0));
$clone = $this.clone(true).attr('target', true);
for(i=$uls.length-1; i; i--) {
$clone = $clone.wrap('<li><ul /></li>').parent().parent();
}
// get offsets of all list-item elements
offsets = [];
$ul.find('li').each(function(idx) {
if($this[0] === this || $this.has(this).length) return true;
var o = getOffset(this, $ul.get(0));
offsets.push({top:o.top, bottom:o.top+32, item:this});
});
// Remove unnecessary elements from the clone, set class name and styles.
// Append it to the list
$clone
.find('.side,input').remove().end()
.addClass('draggable')
.css({
position: 'absolute',
opacity : .6,
width : width,
height : height,
left : offset.left,
top : offset.top,
zIndex : 100
})
.appendTo($ul.eq(0));
// Set a place holder
$holder
.css({
position:'absolute',
opacity : .6,
width : width,
height : '5px',
left : offset.left,
top : offset.top,
zIndex :99
})
.appendTo($ul.eq(0));
$this.css('opacity', .6);
$(document)
.unbind('mousemove.st mouseup.st')
.bind('mousemove.st', function(event) {
var diff, nTop, item, i, c, o, t;
dropzone = null;
diff = {x:position.x-event.pageX, y:position.y-event.pageY};
nTop = offset.top - diff.y;
for(i=0,c=offsets.length; i < c; i++) {
t = nTop;
o = offsets[i];
if(i == 0 && t < o.top) t = o.top;
if(i == c-1 && t > o.bottom) t = o.bottom;
if(o.top <= t && o.bottom >= t) {
dropzone = {element:o.item, state:setHolder(o,t)};
break;
}
}
$clone.css({top:nTop});
})
.bind('mouseup.st', function(event) {
var $dropzone, $li;
dragging = false;
$(document).unbind('mousemove.st mouseup.st');
$this.css('opacity', '');
$clone.remove();
$holder.remove();
// dummy list item for animation
$li = $('<li />').height($this.height());
if(!dropzone) return;
$dropzone = $(dropzone.element);
$this.before($li);
if(dropzone.state == 'prepend') {
if(!$dropzone.find('>ul').length) $dropzone.find('>.side').after('<ul>');
$dropzone.find('>ul').prepend($this.hide());
} else {
$dropzone[dropzone.state]($this.hide());
}
$this.slideDown(100, function(){ $this.removeClass('active') });
$li.slideUp(100, function(){ var $par = $li.parent(); $li.remove(); if(!$par.children('li').length) $par.remove() });
// trigger 'dropped.st' event
$this.trigger('dropped.st');
});
return false;
},
'mouseover.st' : function() {
if(!dragging) $(this).addClass('active');
return false;
},
'mouseout.st' : function() {
if(!dragging) $(this).removeClass('active');
return false;
}
})
.find('li')
.prepend('<button type="button" class="moveTo">Move to</button>')
.append('<span class="vr"></span><span class="hr"></span>')
.find('input:text')
.focus(function(){
var $this = $(this), $label = $this.prev('label'), $par = $this.parent();
$this.width($par.width() - (parseInt($par.css('text-indent'))||0) - $this.next('.side').width() - 60).css('opacity', '');
$label.hide();
})
.blur(function(){
var $this = $(this), $label = $this.prev('label'), val = $this.val();
$this.width(0).css('opacity', 0);
$label.removeClass('no-text').empty().text(val).show();
if(!val) $label.addClass('no-text').text('---');
})
.each(function(i,input){
var $this = $(this), id='sitemap-id-'+i;
$this
.attr('id', id)
.css({width:0,opacity:0,overflow:'hidden'})
.before('<label />')
.prev('label')
.attr('for', id)
.text($this.val());
})
.end()
.end()
function getOffset(elem, offsetParent) {
var top = 0, left = 0;
while(elem && elem != offsetParent) {
top += elem.offsetTop;
left += elem.offsetLeft;
elem = elem.offsetParent;
}
return {top:top, left:left};
}
function setHolder(info, yPos) {
if(Math.abs(info.top-yPos) <= 3) {
$holder.css({top:info.top-3,height:'5px'});
return 'before';
} else if(Math.abs(info.bottom-yPos) <= 3) {
$holder.css({top:info.bottom-3,height:'5px'});
return 'after';
} else {
$holder.css({top:info.top+3,height:'27px'});
return 'prepend';
}
}
});

View file

@ -1 +0,0 @@
jQuery(function(a){function b(a,b){for(var c=0,d=0;a&&a!=b;)c+=a.offsetTop,d+=a.offsetLeft,a=a.offsetParent;return{top:c,left:d}}function c(a,b){return Math.abs(a.top-b)<=3?(e.css({top:a.top-3,height:"5px"}),"before"):Math.abs(a.bottom-b)<=3?(e.css({top:a.bottom-3,height:"5px"}),"after"):(e.css({top:a.top+3,height:"27px"}),"prepend")}var d=!1,e=a('<li class="placeholder">');a("form.siteMap").delegate("li:not(.placeholder)",{"mousedown.st":function(f){var g,h,i,j,k,l,m,n,o,p;if(!a(f.target).is("a,input,label,textarea")&&1==f.which){for(d=!0,g=a(this),k=g.height(),j=g.width(),h=g.parentsUntil(".siteMap").filter("ul"),i=h.eq(-1),i.css("position","relative"),m={x:f.pageX,y:f.pageY},l=b(this,i.get(0)),$clone=g.clone(!0).attr("target",!0),o=h.length-1;o;o--)$clone=$clone.wrap("<li><ul /></li>").parent().parent();return n=[],i.find("li").each(function(){if(g[0]===this||g.has(this).length)return!0;var a=b(this,i.get(0));n.push({top:a.top,bottom:a.top+32,item:this})}),$clone.find(".side,input").remove().end().addClass("draggable").css({position:"absolute",opacity:.6,width:j,height:k,left:l.left,top:l.top,zIndex:100}).appendTo(i.eq(0)),e.css({position:"absolute",opacity:.6,width:j,height:"5px",left:l.left,top:l.top,zIndex:99}).appendTo(i.eq(0)),g.css("opacity",.6),a(document).unbind("mousemove.st mouseup.st").bind("mousemove.st",function(a){var b,d,e,f,g,h;for(p=null,b={x:m.x-a.pageX,y:m.y-a.pageY},d=l.top-b.y,e=0,f=n.length;f>e;e++)if(h=d,g=n[e],0==e&&h<g.top&&(h=g.top),e==f-1&&h>g.bottom&&(h=g.bottom),g.top<=h&&g.bottom>=h){p={element:g.item,state:c(g,h)};break}$clone.css({top:d})}).bind("mouseup.st",function(){var b,c;d=!1,a(document).unbind("mousemove.st mouseup.st"),g.css("opacity",""),$clone.remove(),e.remove(),c=a("<li />").height(g.height()),p&&(b=a(p.element),g.before(c),"prepend"==p.state?(b.find(">ul").length||b.find(">.side").after("<ul>"),b.find(">ul").prepend(g.hide())):b[p.state](g.hide()),g.slideDown(100,function(){g.removeClass("active")}),c.slideUp(100,function(){var a=c.parent();c.remove(),a.children("li").length||a.remove()}),g.trigger("dropped.st"))}),!1}},"mouseover.st":function(){return d||a(this).addClass("active"),!1},"mouseout.st":function(){return d||a(this).removeClass("active"),!1}}).find("li").prepend('<button type="button" class="moveTo">Move to</button>').append('<span class="vr"></span><span class="hr"></span>').find("input:text").focus(function(){var b=a(this),c=b.prev("label"),d=b.parent();b.width(d.width()-(parseInt(d.css("text-indent"))||0)-b.next(".side").width()-60).css("opacity",""),c.hide()}).blur(function(){var b=a(this),c=b.prev("label"),d=b.val();b.width(0).css("opacity",0),c.removeClass("no-text").empty().text(d).show(),d||c.addClass("no-text").text("---")}).each(function(b){var c=a(this),d="sitemap-id-"+b;c.attr("id",d).css({width:0,opacity:0,overflow:"hidden"}).before("<label />").prev("label").attr("for",d).text(c.val())}).end().end()});

Some files were not shown because too many files have changed in this diff Show more