merger from branch luminous (~r11576)

git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11580 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2012-10-04 05:04:23 +00:00
commit 51bb8d1985
91 changed files with 1157 additions and 703 deletions

View file

@ -22,7 +22,9 @@ RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?vid=$1&
# 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]
# administrator page
RewriteRule ^admin/?$ ./index.php?module=admin [L]

View file

@ -235,16 +235,19 @@ class Context {
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
// if signed in, validate it.
if($oMemberModel->isLogged()) {
$oMemberController->setSessionInfo();
}
elseif($_COOKIE['xeak']) { // check auto sign-in
$oMemberController->doAutologin();
}
if($oMemberController && $oMemberModel)
{
// if signed in, validate it.
if($oMemberModel->isLogged()) {
$oMemberController->setSessionInfo();
}
elseif($_COOKIE['xeak']) { // check auto sign-in
$oMemberController->doAutologin();
}
$this->set('is_logged', $oMemberModel->isLogged() );
$this->set('logged_info', $oMemberModel->getLoggedInfo() );
$this->set('is_logged', $oMemberModel->isLogged() );
$this->set('logged_info', $oMemberModel->getLoggedInfo() );
}
}
// load common language file
@ -726,17 +729,49 @@ class Context {
$flag = true;
foreach($obj as $key=>$val) {
if(!$val) continue;
if($val && iconv($charset,$charset,$val)!=$val) $flag = false;
if(!is_array($val) && iconv($charset,$charset,$val)!=$val) $flag = false;
else if(is_array($val))
{
$userdata = array('charset1'=>$charset,'charset2'=>$charset,'useFlag'=>true);
Context::arrayConvWalkCallback($val,null,$userdata);
if($userdata['returnFlag'] === false) $flag = false;
}
}
if($flag) {
if($charset == 'UTF-8') return $obj;
foreach($obj as $key => $val) $obj->{$key} = iconv($charset,'UTF-8',$val);
foreach($obj as $key => $val)
{
if(!is_array($val)) $obj->{$key} = iconv($charset,'UTF-8',$val);
else Context::arrayConvWalkCallback($val,null,array($charset,'UTF-8'));
}
return $obj;
}
}
return $obj;
}
/**
* Convert array type variables into UTF-8
*
* @param mixed $val
* @param string $key
* @param mixed $userdata charset1 charset2 useFlag retrunFlag
* @see arrayConvWalkCallback will replaced array_walk_recursive in >=PHP5
* @return object converted object
*/
function arrayConvWalkCallback(&$val, $key = null, &$userdata)
{
if (is_array($val)) array_walk($val,'Context::arrayConvWalkCallback',&$userdata);
else
{
if(!$userdata['useFlag']) $val = iconv($userdata['charset1'],$userdata['charset2'],$val);
else
{
if(iconv($charset,$charset,$val)!=$val) $userdata['returnFlag'] = (bool)false;
}
}
}
/**
* Convert strings into UTF-8
@ -810,6 +845,13 @@ class Context {
elseif($this->getRequestMethod()=='POST'&&isset($_POST[$key])) $set_to_vars = true;
else $set_to_vars = false;
if($set_to_vars)
{
$val = preg_replace('/<\?/i', '', $val);
$val = preg_replace('/<\%/i', '', $val);
$val = preg_replace('/<script\s+language\s*=\s*("|\')php("|\')\s*>/ism', '', $val);
}
$this->set($key, $val, $set_to_vars);
}
}
@ -1090,7 +1132,9 @@ class Context {
'act.mid' =>$is_feed?"$mid/$act":'',
'act.mid.vid'=>$is_feed?"$vid/$mid/$act":'',
'act.document_srl.key' =>($act=='trackback')?"$srl/$key/$act":'',
'act.document_srl.key.vid'=>($act=='trackback')?"$vid/$srl/$key/$act":''
'act.document_srl.key.mid'=>($act=='trackback')?"$mid/$srl/$key/$act":'',
'act.document_srl.key.vid'=>($act=='trackback')?"$vid/$srl/$key/$act":'',
'act.document_srl.key.mid.vid'=>($act=='trackback')?"$vid/$mid/$srl/$key/$act":''
);
$query = $target_map[$target];
@ -1102,7 +1146,7 @@ class Context {
if(is_array($val) && count($val)) {
foreach($val as $k => $v) $queries[] = $key.'['.$k.']='.urlencode($v);
} else {
$queries[] = $key.'='.urlencode($val);
$queries[] = $key.'='.@urlencode($val);
}
}
if(count($queries)) $query = 'index.php?'.implode('&', $queries);

View file

@ -407,6 +407,7 @@
*/
function executeQuery($query_id, $args = NULL, $arg_columns = NULL) {
static $cache_file = array();
if(!$query_id) return new Object(-1, 'msg_invalid_queryid');
if(!$this->db_type) return;
@ -414,7 +415,7 @@
$this->query_id = $query_id;
if(!isset($cache_file[$query_id])) {
if(!isset($cache_file[$query_id]) || !file_exists($cache_file[$query_id])) {
$id_args = explode('.', $query_id);
if(count($id_args) == 2) {
$target = 'modules';

View file

@ -455,7 +455,7 @@
if ($notnull) $query .= "not null ";
$this->_query ($query);
return $this->_query ($query);
}
/**

View file

@ -310,7 +310,7 @@
if($default) $query .= sprintf(" default '%s' ", $default);
if($notnull) $query .= " not null ";
$this->_query($query);
return $this->_query($query);
}
/**

View file

@ -256,7 +256,7 @@ class DBMysql extends DB {
if($default) $query .= sprintf(" default '%s' ", $default);
if($notnull) $query .= " not null ";
$this->_query($query);
return $this->_query($query);
}
/**

View file

@ -370,6 +370,32 @@ class FileHandler {
* @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()) {
if(version_compare(PHP_VERSION, '5.0.0', '>='))
{
return include _XE_PATH_ . 'classes/file/getRemoteResourcePHP5.php';
}
else
{
return FileHandler::_getRemoteResource($url, $boyd, $timeout, $mehtod, $conent_type, $headers, $cookies, $post_data);
}
}
/**
* Return remote file's content via HTTP
*
* If the target is moved (when return code is 300~399), this function follows the location specified response header.
*
* @param string $url The address of the target file
* @param string $body HTTP request body
* @param int $timeout Connection timeout
* @param string $method GET/POST
* @param string $content_type Content type header of HTTP request
* @param string[] $headers Headers key vaule array.
* @param string[] $cookies Cookies key value array.
* @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()) {
requirePear();
require_once('HTTP/Request.php');

View file

@ -0,0 +1,9 @@
<?php
try
{
return self::_getRemoteResource($url, $body, $timeout, $method, $content_type, $headers, $cookies, $post_data);
}
catch(Exception $e)
{
return NULL;
}

View file

@ -99,7 +99,29 @@
$pathInfo = pathinfo($args[0]);
$file->fileName = $pathInfo['basename'];
$file->filePath = $this->_getAbsFileUrl($pathInfo['dirname']);
$file->fileRealPath = FileHandler::getRealPath($pathInfo['dirname']);
$file->fileExtension = strtolower($pathInfo['extension']);
$file->fileNameNoExt = preg_replace("/\.{$file->fileExtension}$/", '', $file->fileName);
// Remove .min
$file->fileNameNoExt = preg_replace("/\.min$/", '', $file->fileNameNoExt);
$file->fileName = $file->keyName = "{$file->fileNameNoExt}.{$file->fileExtension}";
// if no debug mode load minified file
if(!__DEBUG__)
{
$tmp = "{$file->fileNameNoExt}.min.{$file->fileExtension}";
if(file_exists("{$file->fileRealPath}/{$tmp}"))
{
$file->fileName = $tmp;
$file->useMin = TRUE;
}
}
if(!$file->useMin && !file_exists("{$file->fileRealPath}/{$file->fileName}"))
{
$file->fileName = "{$file->fileNameNoExt}.min.{$file->fileExtension}";
}
if (strpos($file->filePath, '://') == false)
{
@ -121,7 +143,7 @@
if (!$file->media) $file->media = 'all';
$map = &$this->cssMap;
$mapIndex = &$this->cssMapIndex;
$key = $file->filePath . $file->fileName . "\t" . $file->targetIe . "\t" . $file->media;
$key = $file->filePath . $file->keyName . "\t" . $file->targetIe . "\t" . $file->media;
$this->_arrangeCssIndex($pathInfo['dirname'], $file);
}
@ -138,11 +160,11 @@
$map = &$this->jsHeadMap;
$mapIndex = &$this->jsHeadMapIndex;
}
$key = $file->filePath . $file->fileName . "\t" . $file->targetIe;
$key = $file->filePath . $file->keyName . "\t" . $file->targetIe;
}
(is_null($file->index))?$file->index=0:$file->index=$file->index;
if (!isset($map[$file->index][$key]) || $mapIndex[$key] != $file->index)
if (!isset($map[$file->index][$key]) || $mapIndex[$key] > $file->index)
{
$this->unloadFile($args[0], $args[2], $args[1]);
$map[$file->index][$key] = $file;

View file

@ -373,6 +373,20 @@
{
$oModule = &$this->getModuleInstance($forward->module, $type, $kind);
}
if(!is_object($oModule)) {
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
$oMessageObject->setError(-1);
$oMessageObject->setMessage('msg_module_is_not_exists');
$oMessageObject->dispMessage();
if($this->httpStatusCode)
{
$oMessageObject->setHttpStatusCode($this->httpStatusCode);
}
return $oMessageObject;
}
$xml_info = $oModuleModel->getModuleActionXml($forward->module);
$oMemberModel = &getModel('member');
@ -698,6 +712,7 @@
if(__DEBUG__==3) $start_time = getMicroTime();
$parent_module = $module;
$kind = strtolower($kind);
$type = strtolower($type);
@ -714,10 +729,13 @@
// if there is no instance of the module in global variable, create a new one
if(!isset($GLOBALS['_loaded_module'][$module][$type][$kind]))
{
$parent_module = $module;
ModuleHandler::_getModuleFilePath($module, $type, $kind, $class_path, $high_class_file, $class_file, $instance_name);
$class_path = ModuleHandler::getModulePath($module);
if(!is_dir(FileHandler::getRealPath($class_path))) return NULL;
if($extend_module && (!is_readable($high_class_file) || !is_readable($class_file)))
{
$module = $parent_module;
ModuleHandler::_getModuleFilePath($module, $type, $kind, $class_path, $high_class_file, $class_file, $instance_name);
}
// Get base class name and load the file contains it
if(!class_exists($module)) {
@ -726,23 +744,6 @@
require_once($high_class_file);
}
// Get the object's name
$types = explode(' ', 'view controller model api wap mobile class');
if(!in_array($type, $types)) $type = $types[0];
if($type == 'class') {
$instance_name = '%s';
$class_file = '%s%s.%s.php';
} elseif($kind == 'admin' && array_search($type, $types) < 3) {
$instance_name = '%sAdmin%s';
$class_file = '%s%s.admin.%s.php';
} else{
$instance_name = '%s%s';
$class_file = '%s%s.%s.php';
}
$instance_name = sprintf($instance_name, $module, ucfirst($type));
$class_file = sprintf($class_file, $class_path, $module, $type);
$class_file = FileHandler::getRealPath($class_file);
// Get the name of the class file
if(!is_readable($class_file)) return NULL;
@ -779,6 +780,31 @@
return $GLOBALS['_loaded_module'][$module][$type][$kind];
}
function _getModuleFilePath($module, $type, $kind, &$classPath, &$highClassFile, &$classFile, &$instanceName)
{
$classPath = ModuleHandler::getModulePath($module);
$highClassFile = sprintf('%s%s%s.class.php', _XE_PATH_,$classPath, $module);
$highClassFile = FileHandler::getRealPath($highClassFile);
$types = explode(' ', 'view controller model api wap mobile class');
if(!in_array($type, $types)) $type = $types[0];
if($type == 'class') {
$instanceName = '%s';
$classFile = '%s%s.%s.php';
} elseif($kind == 'admin' && array_search($type, $types) < 3) {
$instanceName = '%sAdmin%s';
$classFile = '%s%s.admin.%s.php';
} else{
$instanceName = '%s%s';
$classFile = '%s%s.%s.php';
}
$instanceName = sprintf($instanceName, $module, ucfirst($type));
$classFile = sprintf($classFile, $classPath, $module, $type);
$classFile = FileHandler::getRealPath($classFile);
}
/**
* call a trigger
* @param string $trigger_name trigger's name to call

View file

@ -1,5 +1,5 @@
<?php
include "phphtmlparser/src/htmlparser.inc";
include _XE_PATH_ . 'classes/security/phphtmlparser/src/htmlparser.inc';
class EmbedFilter
{

View file

@ -164,20 +164,7 @@ class Argument {
*/
function _escapeStringValue($value) {
// Remove non-utf8 chars.
$regex = <<<'END'
/
(
(?:
[\x00-\x7F] # single-byte sequences 0xxxxxxx
|[\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
|[\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2
)+
)
|([\xF0-\xF7][\x80-\xBF]{3}) # quadruple-byte sequence 11110xxx 10xxxxxx * 3
|([\x80-\xBF]) # invalid byte in range 10000000 - 10111111
|([\xC0-\xFF]) # invalid byte in range 11000000 - 11111111
/x
END;
$regex = '@((?:[\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}){1,100})|([\xF0-\xF7][\x80-\xBF]{3})|([\x80-\xBF])|([\xC0-\xFF])@x';
$value = preg_replace_callback($regex, array($this, 'utf8Replacer'), $value);
$db = &DB::getInstance();

View file

@ -1,5 +1,2 @@
(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,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</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|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,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 figcaption figure footer header hgroup mark meter nav output progress section summary time video",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);
/*! 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)

View file

@ -47,6 +47,7 @@ var default_url = "{Context::getDefaultUrl()}";
<block cond="Context::get('_http_port')">var http_port = {Context::get("_http_port")};</block>
<block cond="Context::get('_https_port')">var https_port = {Context::get("_https_port")};</block>
<block cond="Context::get('_use_ssl') && Context::get('_use_ssl') == 'always'">var enforce_ssl = true;</block>
xe.current_lang = "{$lang_type}";
//]]>
</script>
</head>

View file

@ -788,7 +788,7 @@
**/
$content = preg_replace_callback('@<(/?)([a-z]+[0-9]?)((?>"[^"]*"|\'[^\']*\'|[^>])*?\b(?:on[a-z]+|data|style|background|href|(?:dyn|low)?src)\s*=[\s\S]*?)(/?)($|>|<)@i', 'removeSrcHack', $content);
// xmp tag 확인 및 추가
// xmp tag ?•ì<E280A2>¸ ë°?ì¶”ê?
$content = checkXmpTag($content);
return $content;
}
@ -819,7 +819,7 @@
function removeSrcHack($match) {
$tag = strtolower($match[2]);
// xmp tag 정리
// xmp tag ?•리
if($tag=='xmp') return "<{$match[1]}xmp>";
if($match[1]) return $match[0];
if($match[4]) $match[4] = ' '.$match[4];

View file

@ -292,6 +292,54 @@
return $this->setRedirectUrl(Context::get('error_return_url'), $output);
}
/**
* Cleanning favorite
* @return Object
*/
function cleanFavorite()
{
$oModel = getAdminModel('admin');
$output = $oModel->getFavoriteList();
if(!$output->toBool())
{
return $output;
}
$favoriteList = $output->get('favoriteList');
if(!$favoriteList)
{
return new Object();
}
$deleteTargets = array();
foreach($favoriteList as $favorite)
{
if($favorite->type == 'module')
{
$modulePath = './modules/' . $favorite->module;
$modulePath = FileHandler::getRealPath($modulePath);
if(!is_dir($modulePath))
{
$deleteTargets[] = $favorite->admin_favorite_srl;
}
}
}
if(!count($deleteTargets))
{
return new Object();
}
$args->admin_favorite_srls = $deleteTargets;
$output = executeQuery('admin.deleteFavorites', $args);
if(!$output->toBool())
{
return $output;
}
return new Object();
}
/**
* Enviroment gathering agreement
* @return void

View file

@ -697,16 +697,16 @@
</item>
</item>
<item name="about_use_ssl">
<value xml:lang="ko"><![CDATA['선택적으로'는 회원가입, 정보수정 등의 지정된 동작(action)에서 보안접속(SSL)을 사용합니다.<br /> '항상 사용'은 모든 서비스에 SSL을 사용 합니다.]]></value>
<value xml:lang="en"><![CDATA[Select 'Optional' to use SSL for the specified actions such as signing up and changing information.<br /> 'Always' to use SSL for all services.]]></value>
<value xml:lang="jp"><![CDATA[「部分的に使う」は、「会員登録/会員情報変更」など指定のアクションでSSLを利用する場合。「常に使う」は、すべてのサービスにSSLを使う場合に選択します。]]></value>
<value xml:lang="zh-CN"><![CDATA[选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中使用选项应用于所有服务。]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL功能。<br/>選擇開啟時,所有的服務都會使用 SSL功能。]]></value>
<value xml:lang="fr"><![CDATA[Si l'on choisit 'Optionnel' , on utilise protocole SSL seulement dans quelques services comme inscription ou modification. Si l'on choisit 'Toujours', on utilise protocole SSL dans tous les services.]]></value>
<value xml:lang="ru"><![CDATA[In case of "Optional", SSL will be used for actions such as signing up / changing information. And for "Always", your site will be served only via https]]></value>
<value xml:lang="es"><![CDATA[Opcionalmente, la composición de suscripción / editar la información y el uso de SSL especificada en la acción es siempre el uso de SSL para todos los servicios que se utilizarán]]></value>
<value xml:lang="tr"><![CDATA['İsteği Bağlı' seçiminde; SSL, kayıt olma/bilgi değiştirme gibi eylemler için kullanılacaktır. 'Her zaman' seçiminde, siteniz sadece http yoluyla hizmet verecektir.]]></value>
<value xml:lang="vi"><![CDATA[Nếu bạn chọn 'Tùy chỉnh', SSL sẽ sử dụng và những công việc như đăng kí, sửa thông tin thành viên, .<br />Chỉ chọn 'Luôn luôn' khi Website của bạn đang chạy trên Server có hỗ trợ https.]]></value>
<value xml:lang="ko"><![CDATA['선택적으로'는 회원가입, 정보수정 등의 지정된 동작(action)에서 보안접속(SSL)을 사용합니다.<br /> '항상 사용'은 모든 서비스에 SSL을 사용 합니다.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="en"><![CDATA[Select 'Optional' to use SSL for the specified actions such as signing up and changing information.<br /> 'Always' to use SSL for all services.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="jp"><![CDATA[「部分的に使う」は、「会員登録/会員情報変更」など指定のアクションでSSLを利用する場合。「常に使う」は、すべてのサービスにSSLを使う場合に選択します。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="zh-CN"><![CDATA[选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中使用选项应用于所有服务。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇手動時,在會員註冊或修改資料等動作時才會使用 SSL功能。<br/>選擇開啟時,所有的服務都會使用 SSL功能。<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="fr"><![CDATA[Si l'on choisit 'Optionnel' , on utilise protocole SSL seulement dans quelques services comme inscription ou modification. Si l'on choisit 'Toujours', on utilise protocole SSL dans tous les services.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="ru"><![CDATA[In case of "Optional", SSL will be used for actions such as signing up / changing information. And for "Always", your site will be served only via https<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="es"><![CDATA[Opcionalmente, la composición de suscripción / editar la información y el uso de SSL especificada en la acción es siempre el uso de SSL para todos los servicios que se utilizarán<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="tr"><![CDATA['İsteği Bağlı' seçiminde; SSL, kayıt olma/bilgi değiştirme gibi eylemler için kullanılacaktır. 'Her zaman' seçiminde, siteniz sadece http yoluyla hizmet verecektir.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
<value xml:lang="vi"><![CDATA[Nếu bạn chọn 'Tùy chỉnh', SSL sẽ sử dụng và những công việc như đăng kí, sửa thông tin thành viên, .<br />Chỉ chọn 'Luôn luôn' khi Website của bạn đang chạy trên Server có hỗ trợ https.<br /><span style="color:red">SSL 환경이 갖춰지지 않은 상태에서 SSL을 사용할 경우 접속이 되지 않을 수 있으니 주의하시기 바랍니다.</span>]]></value>
</item>
<item name="server_ports">
<value xml:lang="ko"><![CDATA[서버 포트 지정]]></value>
@ -1461,4 +1461,4 @@
<value xml:lang="ko"><![CDATA[모두 접기]]></value>
<value xml:lang="en"><![CDATA[Close All]]></value>
</item>
</lang>
</lang>

View file

@ -0,0 +1,8 @@
<query id="deleteFavorite" action="delete">
<tables>
<table name="admin_favorite" />
</tables>
<conditions>
<condition operation="in" column="admin_favorite_srl" var="admin_favorite_srls" filter="number" notnull="notnull" />
</conditions>
</query>

View file

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

View file

@ -70,6 +70,9 @@
$this->updateCategory($xmlDoc);
$this->updatePackages($xmlDoc);
$this->checkInstalled();
$oAdminController = &getAdminController('admin');
$output = $oAdminController->cleanFavorite();
}
/**

View file

@ -260,10 +260,23 @@
$res = array();
foreach($package_list as $package_srl => $package)
{
$res[] = $item_list[$package_srl];
if($item_list[$package_srl])
{
$res[] = $item_list[$package_srl];
}
}
Context::set('item_list', $res);
}
if(count($package_list) != count($res))
{
$localPackageSrls = array_keys($package_list);
$remotePackageSrls = array_keys($item_list);
$targetPackageSrls = array_diff($localPackageSrls, $remotePackageSrls);
$countDiff = count($targetPackageSrls);
$output->page_navigation->total_count -= $countDiff;
}
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('index');

View file

@ -150,11 +150,14 @@
$schema_dir = sprintf('%s/schemas/', $this->package->path);
$schema_files = FileHandler::readDir($schema_dir);
$oDB =& DB::getInstance();
foreach($schema_files as $file)
if(is_array($schema_files))
{
$filename_arr = explode(".", $file);
$filename = array_shift($filename_arr);
$oDB->dropTable($filename);
foreach($schema_files as $file)
{
$filename_arr = explode(".", $file);
$filename = array_shift($filename_arr);
$oDB->dropTable($filename);
}
}
return new Object();
}
@ -399,22 +402,25 @@
if(!$output->toBool()) return $output;
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$pathname = dirname($target_dir."/".$file);
if(is_array($file_list))
{
foreach($file_list as $k => $file){
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$pathname = dirname($target_dir."/".$file);
if(!file_exists(FileHandler::getRealPath($real_path)))
{
ssh2_sftp_mkdir($this->sftp, $pathname, 0755, true);
}
if(!file_exists(FileHandler::getRealPath($real_path)))
{
ssh2_sftp_mkdir($this->sftp, $pathname, 0755, true);
}
ssh2_scp_send($this->connection, FileHandler::getRealPath($this->download_path."/".$org_file), $target_dir."/".$file);
}
ssh2_scp_send($this->connection, FileHandler::getRealPath($this->download_path."/".$org_file), $target_dir."/".$file);
}
}
return new Object();
}
}
@ -550,54 +556,57 @@
}
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){
if(!$file) continue;
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$path_list = explode('/', dirname($this->target_path."/".$file));
if(is_array($file_list))
{
foreach($file_list as $k => $file){
if(!$file) continue;
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$path_list = explode('/', dirname($this->target_path."/".$file));
$real_path = "./";
$ftp_path = $this->ftp_info->ftp_root_path;
$real_path = "./";
$ftp_path = $this->ftp_info->ftp_root_path;
for($i=0;$i<count($path_list);$i++)
{
if($path_list=="") continue;
$real_path .= $path_list[$i]."/";
$ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path)))
{
if(!@ftp_mkdir($this->connection, $ftp_path))
{
return new Object(-1, "msg_make_directory_failed");
}
for($i=0;$i<count($path_list);$i++)
{
if($path_list=="") continue;
$real_path .= $path_list[$i]."/";
$ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path)))
{
if(!@ftp_mkdir($this->connection, $ftp_path))
{
return new Object(-1, "msg_make_directory_failed");
}
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
{
if (function_exists('ftp_chmod')) {
if(!ftp_chmod($this->connection, 0755, $ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
else
{
if(!ftp_site($this->connection, "CHMOD 755 ".$ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
}
}
}
if(!ftp_put($this->connection, $target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file), FTP_BINARY))
{
return new Object(-1, "msg_ftp_upload_failed");
if(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')
{
if (function_exists('ftp_chmod')) {
if(!ftp_chmod($this->connection, 0755, $ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
else
{
if(!ftp_site($this->connection, "CHMOD 755 ".$ftp_path))
{
return new Object(-1, "msg_permission_adjust_failed");
}
}
}
}
}
if(!ftp_put($this->connection, $target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file), FTP_BINARY))
{
return new Object(-1, "msg_ftp_upload_failed");
}
}
}
}
$this->_close();
return new Object();
}
@ -718,31 +727,34 @@
$oFtp =& $this->oFtp;
$target_dir = $this->ftp_info->ftp_root_path.$this->target_path;
foreach($file_list as $k => $file){
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$path_list = explode('/', dirname($this->target_path."/".$file));
if(is_array($file_list))
{
foreach($file_list as $k => $file){
$org_file = $file;
if($this->package->path == ".")
{
$file = substr($file,3);
}
$path = FileHandler::getRealPath("./".$this->target_path."/".$file);
$path_list = explode('/', dirname($this->target_path."/".$file));
$real_path = "./";
$ftp_path = $this->ftp_info->ftp_root_path;
$real_path = "./";
$ftp_path = $this->ftp_info->ftp_root_path;
for($i=0;$i<count($path_list);$i++)
{
if($path_list=="") continue;
$real_path .= $path_list[$i]."/";
$ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path)))
{
$oFtp->ftp_mkdir($ftp_path);
$oFtp->ftp_site("CHMOD 755 ".$ftp_path);
}
}
$oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file));
}
for($i=0;$i<count($path_list);$i++)
{
if($path_list=="") continue;
$real_path .= $path_list[$i]."/";
$ftp_path .= $path_list[$i]."/";
if(!file_exists(FileHandler::getRealPath($real_path)))
{
$oFtp->ftp_mkdir($ftp_path);
$oFtp->ftp_site("CHMOD 755 ".$ftp_path);
}
}
$oFtp->ftp_put($target_dir .'/'. $file, FileHandler::getRealPath($this->download_path."/".$org_file));
}
}
$this->_close();

View file

@ -1,6 +1,6 @@
<include target="category.html" />
<div class="table even easyList">
<div class="table even easyList dsTg">
<table width="100%" border="1" cellspacing="0">
<caption>
<block cond="$current_category">{$current_category}</block>
@ -28,11 +28,12 @@
<a href="{getUrl('order_target','download','order_type',$_download_order_type)}">{$lang->order_download}<!--@if($order_target == 'download')--><!--@if($_download_order_type == 'asc')--><!--@else--><!--@end--><!--@end--></a> |
<a href="{getUrl('order_target','popular','order_type',$_popular_order_type)}">{$lang->order_popular}<!--@if($order_target == 'popular')--><!--@if($_popular_order_type == 'asc')--><!--@else--><!--@end--><!--@end--></a>
</span>
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
</caption>
<thead>
<tr>
<th scope="col" class="nowr">{$lang->category}</th>
<th scope="col">{$lang->thumbnail}</th>
<th scope="col" class="thumb">{$lang->thumbnail}</th>
<th scope="col" class="title">{$lang->name}</th>
<th scope="col" class="nowr">{$lang->distribute_version}</th>
<th scope="col" class="nowr">{$lang->current_version}</th>
@ -43,7 +44,7 @@
<tr loop="$item_list => $key, $item">
{@ $target_url = $original_site."?mid=download&package_srl=".$item->package_srl; }
<td class="nowr">{$item->category}</td>
<td><img src="{str_replace('./', $uri, $item->item_screenshot_url)}" alt="" width="100" height="100" /></td>
<td class="thumb"><img src="{str_replace('./', $uri, $item->item_screenshot_url)}" alt="" width="100" height="100" /></td>
<td class="title">
<p><a href="{$target_url}">{htmlspecialchars($item->title)}</a></p>
<p>{cut_str(htmlspecialchars($item->package_description),200)}</p>

View file

@ -19,12 +19,13 @@
**/
function procCommunicationAdminInsertConfig() {
// get the default information
$args = Context::gets('skin','colorset','editor_skin','editor_colorset', 'mskin');
$args = Context::gets('skin','colorset','editor_skin','editor_colorset', 'mskin','layout_srl');
if(!$args->skin) $args->skin = 'default';
if(!$args->colorset) $args->colorset = 'white';
if(!$args->editor_skin) $args->editor_skin = 'default';
if(!$args->mskin) $args->mskin = 'default';
if(!$args->layout_srl) $args->layout_srl = null;
// create the module module Controller object
$oModuleController = &getController('module');

View file

@ -17,13 +17,17 @@
* configuration to manage messages and friends
* @return void
**/
function dispCommunicationAdminConfig() {
function dispCommunicationAdminConfig()
{
// Creating an object
$oEditorModel = &getModel('editor');
$oModuleModel = &getModel('module');
$oLayoutModel = &getModel('layout');
$oCommunicationModel = &getModel('communication');
// get the configurations of communication module
Context::set('communication_config', $oCommunicationModel->getConfig() );
// get a list of layout
Context::set('layout_list', $oLayoutModel->getLayoutList() );
// get a list of editor skins
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
// get a list of communication skins
@ -33,6 +37,7 @@
$security = new Security();
$security->encodeHTML('communication_config..');
$security->encodeHTML('layout_list..');
$security->encodeHTML('editor_skin_list..');
$security->encodeHTML('communication_skin_list..title');
$security->encodeHTML('communication_mobile_skin_list..title');

View file

@ -290,15 +290,27 @@
* Move a group of the friend
* @return void|Object (success : void, fail : Object)
**/
function procCommunicationMoveFriend() {
function procCommunicationMoveFriend()
{
// Check login information
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
if(!Context::get('is_logged'))
{
return new Object(-1, 'msg_not_logged');
}
$logged_info = Context::get('logged_info');
// Check variables
$friend_srl_list = trim(Context::get('friend_srl_list'));
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
$friend_srl_list = Context::get('friend_srl_list');
if(!$friend_srl_list)
{
return new Object(-1, 'msg_cart_is_null');
}
if(!is_array($friend_srl_list))
{
$friend_srl_list = explode('|@|', $friend_srl_list);
}
$friend_srl_list = explode('|@|', $friend_srl_list);
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
$friend_count = count($friend_srl_list);

View file

@ -26,6 +26,14 @@
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
}
$this->setTemplatePath($tpl_path);
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($this->communication_config->layout_srl);
if($layout_info)
{
$this->module_info->layout_srl = $this->communication_config->layout_srl;
$this->setLayoutPath($layout_info->path);
}
}
/**
@ -81,6 +89,7 @@
* @return void|Object (void : success, Object : fail)
**/
function dispCommunicationNewMessage() {
$this->setLayoutPath('./common/tpl/');
$this->setLayoutFile('popup_layout');
// Error appears if not logged-in
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
@ -108,6 +117,7 @@
* @return void|Object (void : success, Object : fail)
**/
function dispCommunicationSendMessage() {
$this->setLayoutPath('./common/tpl/');
$this->setLayoutFile("popup_layout");
$oCommunicationModel = &getModel('communication');
$oMemberModel = &getModel('member');
@ -201,6 +211,7 @@
* @return void|Object (void : success, Object : fail)
**/
function dispCommunicationAddFriend() {
$this->setLayoutPath('./common/tpl/');
$this->setLayoutFile("popup_layout");
// error appears if not logged-in
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
@ -226,6 +237,7 @@
* @return void|Object (void : success, Object : fail)
**/
function dispCommunicationAddFriendGroup() {
$this->setLayoutPath('./common/tpl/');
$this->setLayoutFile("popup_layout");
// error apprears if not logged-in
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');

View file

@ -10,6 +10,15 @@
<input type="hidden" name="act" value="procCommunicationAdminInsertConfig">
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->layout}</th>
<td>
<select id="layout" name="layout_srl">
<option value="0">{$lang->notuse}</option>
<option loop="$layout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $communication_config->layout_srl">{$val->title} ({$val->layout})</option>
</select>
</td>
</tr>
<tr>
<th scope="row">{$lang->editor_skin}</th>
<td>

View file

@ -267,7 +267,7 @@
}
// Write a post
$output = $oDocumentController->insertDocument($obj, true);
$output = $oDocumentController->insertDocument($obj, true, true);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
@ -710,7 +710,7 @@
$oDB->begin();
//DB restore
$output = $oDocumentController->insertDocument($originObject, false, true);
$output = $oDocumentController->insertDocument($originObject, false, true, false);
if(!$output->toBool()) return new Object(-1, $output->getMessage());
//FILE restore

View file

@ -174,7 +174,7 @@ class documentController extends document {
* @param bool $isRestore
* @return object
*/
function insertDocument($obj, $manual_inserted = false, $isRestore = false) {
function insertDocument($obj, $manual_inserted = false, $isRestore = false, $isLatest = true) {
// begin transaction
$oDB = &DB::getInstance();
$oDB->begin();
@ -185,7 +185,7 @@ class documentController extends document {
if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
if($obj->homepage && !preg_match('/^[a-z]+:\/\//i',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
if($obj->notify_message != 'Y') $obj->notify_message = 'N';
if(!$isRestore) $obj->ipaddress = $_SERVER['REMOTE_ADDR']; //board에서 form key값으로 ipaddress를 사용하면 엄한 ip가 등록됨. 필터와는 상관없슴
if(!$isRestore) $obj->ipaddress = $_SERVER['REMOTE_ADDR']; //board?<3F>서 form keyê°ìœ¼ë¡?ipaddressë¥??¬ìš©?˜ë©´ ?„한 ipê°€ ?±ë¡<C3AB>?? ?„í„°?€???<3F>ê??†ìŠ´
// Serialize the $extra_vars, check the extra_vars type, because duplicate serialized avoid
if(!is_string($obj->extra_vars)) $obj->extra_vars = serialize($obj->extra_vars);
@ -212,7 +212,7 @@ class documentController extends document {
}
// Set the read counts and update order.
if(!$obj->readed_count) $obj->readed_count = 0;
if(!$isRestore) $obj->update_order = $obj->list_order = getNextSequence() * -1;
if($isLatest) $obj->update_order = $obj->list_order = getNextSequence() * -1;
else $obj->update_order = $obj->list_order;
// Check the status of password hash for manually inserting. Apply md5 hashing for otherwise.
if($obj->password && !$obj->password_is_hashed) $obj->password = md5($obj->password);
@ -745,6 +745,8 @@ class documentController extends document {
$cache_key = 'object_document_item:'.$document_srl;
$oCacheHandler->delete($cache_key);
}
return TRUE;
}
/**
@ -1616,6 +1618,7 @@ class documentController extends document {
$xml_buff = sprintf(
'<?php '.
'define(\'__ZBXE__\', true); '.
'define(\'__XE__\', true); '.
'require_once(\''.FileHandler::getRealPath('./config/config.inc.php').'\'); '.
'$oContext = &Context::getInstance(); '.
'$oContext->init(); '.

View file

@ -509,7 +509,7 @@
if(!$this->document_srl) return;
// Generate a key to prevent spams
$oTrackbackModel = &getModel('trackback');
return $oTrackbackModel->getTrackbackUrl($this->document_srl);
return $oTrackbackModel->getTrackbackUrl($this->document_srl, $this->getDocumentMid());
}
/**

View file

@ -660,6 +660,7 @@
<!-- 에디터 활성화 -->
<script>//<![CDATA[
var editor_path = "{$editor_path}";
var auto_saved_msg = "{$lang->msg_auto_saved}";
var delete_dr_confirm_msg = "{$lang->edit->msg_dr_delete_confirm}";
var no_selected_object_msg = "{$lang->edit->msg_no_selected_object}";

View file

@ -156,7 +156,7 @@
<value xml:lang="ko"><![CDATA[허용 확장자]]></value>
<value xml:lang="en"><![CDATA[Allowed extentsions]]></value>
<value xml:lang="jp"><![CDATA[ここで指定された種類のファイルのみ添付できます。]]></value>
<value xml:lang="zh-CN"><![CDATA[只允许上传指定的扩展名。></value>
<value xml:lang="zh-CN"><![CDATA[只允许上传指定的扩展名。]]></value>
<value xml:lang="zh-TW"><![CDATA[設定允許上傳的檔案類型。]]></value>
<value xml:lang="fr"><![CDATA[Extensions consentis seulement peuvent etre attaches.]]></value>
<value xml:lang="ru"><![CDATA[Только файлы с разрешенными расширениями могут быть вложены.]]></value>

View file

@ -24,4 +24,4 @@
<h3>Main page decoration</h3>
<p>After login as administrator, you can edit the 'main page' by click the '<a href="{geturl('act','dispPageAdminContentModify')}">Modify...</a>' button.</p>
</section>
</article>
</article>

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>ウェブサイトを始める前にこのページを削除してください。<br />以下のリストの格項目をチェックして設置状態を確認することができます。<br />管理ページから全てのコンポネントを確認することができます。</p>
<ol>
<li>
画面の構成から <strong>header</strong>, <strong>body</strong>, <strong>footer</strong>が見えたら、<strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">レイアウト</a></strong>は正常に設置されたことです。
画面の構成から <strong>header</strong>, <strong>body</strong>, <strong>footer</strong>が見えたら、<strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">レイアウト</a></strong>は正常に設置されたことです。
</li>
<li>
<strong>画面上端と左に位置する二つのメニュー</strong>が見えたら、<strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">メニューモジュール</a></strong>は正常に設置されたことです

View file

@ -24,4 +24,4 @@
<h3>초기화면 꾸미기</h3>
<p>관리자로 로그인 한 다음 '<a href="{geturl('act','dispPageAdminContentModify')}">페이지 수정</a>' 버튼을 눌러 '초기화면'을 꾸밀 수 있습니다.</p>
</section>
</article>
</article>

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>We recommend you to delete this demo page before launching the site.<br />Please check the following list to verify whether the installation has been properly completed.<br />You can see all the components on the administration page.</p>
<ol>
<li>
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
When <strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">the layout</a></strong> has been successfully installed, you can see the screen containing a <strong>header</strong>, a <strong>content body</strong>, and a <strong>footer</strong>.
</li>
<li>
When <strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">Menu module</a></strong> has been successfully installed, you can see both <strong>global and local navigations</strong>.

View file

@ -2,7 +2,7 @@
<p>瞍艘惴孙亍匮笞颀铖綦嗷撷鸲螽闫埕<EFBFBD>攸。<br />綦塔?欷<><E6ACB7><EFBFBD>煦憷茭飓镝<E9A393>颌涮睇枨圜。<br />师瞍畏租戡<EFBFBD>攸耖首谈岫牦疒遂。</p>
<ol>
<li>
<strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminContent')}" target="_blank">鼹攸噔酮</a></strong> 飓圜晚颌涮睇懔师首谈镖肆匮<E88286><strong><EFBFBD></strong><strong>耶榛瘾赭</strong><strong><EFBFBD></strong>
<strong><a href="{getUrl('', 'module','admin', 'act', 'dispLayoutAdminAllInstanceList')}" target="_blank">鼹攸噔酮</a></strong> 飓圜晚颌涮睇懔师首谈镖肆匮<E88286><strong><EFBFBD></strong><strong>耶榛瘾赭</strong><strong><EFBFBD></strong>
</li>
<li>
<strong><a href="{getUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent')}" target="_blank">嘣婴偌疒</a></strong> 飓圜晚颌涮睇懔,师首谈 <strong>瘾嘣婴<EFBFBD>憝嘣婴</strong>

View file

@ -272,9 +272,6 @@
return new Object(-1, 'msg_invalid_request');
}
$code = preg_replace('/<\?.*(\?>)?/Usm', '', $code);
$code = preg_replace('/<script[\s]*language[\s]*=("|\')php("|\')[\s]*>.*<\/script>/Usm', '', $code);
$oLayoutModel = &getModel('layout');
$layout_file = $oLayoutModel->getUserLayoutHtml($layout_srl);
FileHandler::writeFile($layout_file, $code);

View file

@ -101,6 +101,8 @@
$layout_list[$item->layout][] = $item;
}
usort($layout_list, array($this, 'sortLayoutInstance'));
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_all_instance_list');
@ -109,6 +111,22 @@
$security->encodeHTML('layout_list..');
}
/**
* Sort layout instance by layout name, instance name
*/
function sortLayoutInstance($a, $b)
{
$aTitle = strtolower($a['title']);
$bTitle = strtolower($b['title']);
if($aTitle == $bTitle)
{
return 0;
}
return ($aTitle < $bTitle) ? -1 : 1;
}
/**
* Display list of pc layout instance
* @return void|Object (void : success, Object : fail)
@ -425,7 +443,7 @@
}
if(count($style)) {
$script = '<script> var faceOffStyle = {'.implode(',',$style).'}; </script>';
$script = '<script type="text/javascript"> var faceOffStyle = {'.implode(',',$style).'}; </script>';
Context::addHtmlHeader($script);
}

View file

@ -232,7 +232,7 @@
$searched_count = count($searched_list);
if(!$searched_count) return;
natcasesort($searched_list);
// natcasesort($searched_list);
// Return information for looping searched list of layouts
$list = array();
for($i=0;$i<$searched_count;$i++) {
@ -241,6 +241,11 @@
// Get information of the layout
$layout_info = $this->getLayoutInfo($layout, null, $layout_type);
if(!$layout_info)
{
continue;
}
if ($withAutoinstallInfo)
{
// get easyinstall remove url
@ -259,9 +264,37 @@
}
$list[] = $layout_info;
}
usort($list, array($this, 'sortLayoutByTitle'));
return $list;
}
/**
* Sort layout by title
*/
function sortLayoutByTitle($a, $b)
{
if(!$a->title)
{
$a->title = $a->layout;
}
if(!$b->title)
{
$b->title = $b->layout;
}
$aTitle = strtolower($a->title);
$bTitle = strtolower($b->title);
if($aTitle == $bTitle)
{
return 0;
}
return ($aTitle < $bTitle) ? -1 : 1;
}
/**
* Get a count of layout
* @param string $layoutType (P : PC, M : Mobile)
@ -327,6 +360,7 @@
// Read the xml file for module skin information
if(!$xml_file) $xml_file = sprintf("%sconf/info.xml", $layout_path);
if(!file_exists($xml_file)) {
$layout_info->title = $layout;
$layout_info->layout = $layout;
$layout_info->path = $layout_path;
$layout_info->layout_title = $layout_title;
@ -343,6 +377,7 @@
if(file_exists($cache_file)&&filemtime($cache_file)>filemtime($xml_file)) {
@include($cache_file);
if($layout_info->extra_var && $vars) {
foreach($vars as $key => $value) {
if(!$layout_info->extra_var->{$key} && !$layout_info->{$key}) {
@ -350,6 +385,12 @@
}
}
}
if(!$layout_info->title)
{
$layout_info->title = $layout;
}
return $layout_info;
}
// If no cache file exists, parse the xml and then return the variable.
@ -579,6 +620,12 @@
$buff = '<?php if(!defined("__ZBXE__")) exit(); '.$buff.' ?>';
FileHandler::writeFile($cache_file, $buff);
if(file_exists($cache_file)) @include($cache_file);
if(!$layout_info->title)
{
$layout_info->title = $layout;
}
return $layout_info;
}

View file

@ -146,9 +146,6 @@
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code = preg_replace('/<\?.*(\?>)?/Usm', '', $code);
$code = preg_replace('/<script[\s]*language[\s]*=("|\')php("|\')[\s]*>.*<\/script>/Usm', '', $code);
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information

View file

@ -96,6 +96,12 @@
<option loop="$var->options => $key, $val" value="{$key}" selected="selected"|cond="$key == $var->value">{$val->val}</option>
</select>
<block cond="$var->type == 'checkbox'">
<block loop="$var->options => $key, $val">
<label><input type="checkbox" name="{$name}[]" value="{$key}" checked="checked"|cond="@in_array($key, $var->value)" /> {$val->val}</label>
</block>
</block>
<block cond="$var->type == 'radio'">
<block loop="$var->options => $key, $val">
<block cond="$val->thumbnail">

View file

@ -901,7 +901,7 @@
<value xml:lang="vi"><![CDATA[Sửa đổi mật khẩu]]></value>
</item>
<item name="cmd_view_member_info">
<value xml:lang="ko"><![CDATA[회원 정보 보기]]></value>
<value xml:lang="ko"><![CDATA[회원정보 보기]]></value>
<value xml:lang="en"><![CDATA[View Member Info]]></value>
<value xml:lang="jp"><![CDATA[会員情報確認]]></value>
<value xml:lang="zh-CN"><![CDATA[个人资料]]></value>
@ -1580,6 +1580,7 @@
</item>
<item name="about_rechecked_password">
<value xml:lang="ko"><![CDATA[회원의 정보를 안전하게 보호하기 위해 비밀번호를 다시 한번 확인 합니다.]]></value>
<value xml:lang="en"><![CDATA[Confirm your password before editing account information.]]></value>
</item>
<item name="about_user_id">
<value xml:lang="ko"><![CDATA[회원 ID는 3~20자 사이의 영문+숫자로 이루어져야 하며 영문으로 시작해야 합니다.]]></value>

View file

@ -0,0 +1,43 @@
@charset "utf-8";
/* Element Reset */
.xm,
.xm table,
.xm input,
.xm textarea,
.xm select,
.xm button{font-family:Tahoma,Geneva,sans-serif;font-size:12px;color:#333}
.xm button,
.xm input[type=submit],
.xm input[type=reset],
.xm input[type=button]{cursor:pointer;overflow:visible}
.xm img{border:0}
.xm p{line-height:1.5}
/* Heading */
.xm .h1,
.xm .h2,
.xm .h3,
.xm .h4{position:relative;zoom:1}
.xm .h1{font-size:24px}
.xm .h2{font-size:20px}
.xm .h3{font-size:16px}
.xm .h4{font-size:12px}
/* Table */
.xm .table{margin:1em 0}
.xm .table table{width:100%;border:0;border-collapse:collapse;border-top:2px solid #ccc}
.xm .table caption{font-weight:bold;text-align:left;line-height:22px;padding:5px 0}
.xm .table caption:after{content:"";display:block;clear:both}
.xm .table caption a{font-weight:normal}
.xm .table caption em{float:right;margin-left:1em}
.xm .table caption strong{color:#e00}
.xm .table caption .side{float:right;font-weight:normal;margin-left:1em}
.xm .table th,
.xm .table td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd;white-space:nowrap}
.xm .table th{background:#f8f8f8}
.xm .table thead th{border-bottom:1px solid #999}
.xm .table tfoot td{font-weight:bold;background:#f8f8f8}
.xm .table.even tbody tr:nth-of-type(even) td{background-color:#fafafa}
.xm .table td>input[type=text]{margin:-1px 0 -3px 0 !important;vertical-align:middle}
.xm .table img{vertical-align:middle}
.xm .table em{font-style:normal;font-weight:normal;color:#e00}
.xm .table .title,
.xm .table .text{white-space:normal}

View file

@ -0,0 +1,48 @@
/* Mobile XE Login (/modules/member/tpl/login_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Common */
.fl{float:left}
.fr{float:right}
/* Body */
.bd{background:#f8f8f8;padding:1px 0;border-bottom:1px solid #ccc8be}
.bd:after{content:"";margin:0;position:relative;top:3px;display:block;clear:both;height:1px;background:#fff}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5}
.hx h2{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Help */
.hp{background:#eee;border-top:1px solid #ddd;padding:12px 10px !important;margin:10px 0px !important;}
.hp li{margin:0;display:inline;border-left:1px solid #ccc;padding:0 4px 0 8px;}
.hp li:first-child{border:0;}
.hp a{color:#333;text-decoration:none}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}
.message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px}.message p{margin:1em 0!important}.message em{font-style:normal;color:#e00}.message.info,.message.error,.message.update{padding-left:55px}.message.info{border-color:#e0e8ec;background:#edf9ff url(../../../../../common/img/msg.Info.png) no-repeat 1em .5em}.message.error{border-color:#efdcdc;background:#ffecec url(../../../../../../common/img/msg.error.png) no-repeat 1em .5em}.message.update{border-color:#eae9dc;background:#fffdef url(../../../../../common/img/msg.update.png) no-repeat 1em .5em}

View file

@ -0,0 +1,60 @@
@charset "utf-8";
/* Mobile XE (/modules/member/tpl/signup_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Body */
.bd{background:#f8f8f8;padding:1px 0}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff}
.hx.h2 em{font-size:12px;color:#6352d2}
.hx.h3{background:#868686;color:#fff}
.hx.h3 em{font-size:12px}
.hx h2, .hx h3{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
.hx h3{font-size:14px}
.hx a{color:#000}
.hx .ex{font-size:12px}
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;background:none}
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:28px}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff li p{color:#666}
.ff li>label:first-child{display:block;font-weight:bold}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select,
.ff label+select+input[type=text],
.ff .inputText{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select+input[type=text],
.ff .inputText,
.ff .tel input[type=text]{padding:5px}
.ff .krZip input[type=text]{width:77%;font-size:14px;margin:0 0 5px 0;padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}
.message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px}.message p{margin:1em 0!important}.message em{font-style:normal;color:#e00}.message.info,.message.error,.message.update{padding-left:55px}.message.info{border-color:#e0e8ec;background:#edf9ff url(../../../../common/img/msg.Info.png) no-repeat 1em .5em}.message.error{border-color:#efdcdc;background:#ffecec url(../../../../common/img/msg.error.png) no-repeat 1em .5em}.message.update{border-color:#eae9dc;background:#fffdef url(../../../../common/img/msg.update.png) no-repeat 1em .5em}
.agreement .text{height:200px;overflow-y:auto;}
.bn a{text-decoration:none;}

View file

@ -1,5 +1,5 @@
<load target="./../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>

View file

@ -0,0 +1,27 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$member_title = $lang->msg_leave_member}</h2>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="leaveMember" id="fo_insert_member" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberLeave" />
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<ul>
<li>
<label for="identifier">{Context::getLang($identifier)}</label>
<p id="identifier">{$formValue}</p>
</li>
<li>
<label for="cpw">{$lang->password}</label>
<input type="password" name="password" id="cpw" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_leave}" />
</div>
</form>

View file

@ -0,0 +1,44 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="css/mlogin.css" usecdn="true" />
<div class="bd">
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="hx h2">
<h2>{$lang->cmd_login}</h2>
</div>
<form action="./" method="POST" class="ff">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberLogin" />
<input type="hidden" name="redirect_url" value="{getUrl('act','')}" />
<ul>
<li><label for="id"><!--@if($identifier == 'user_id')-->{$lang->user_id}<!--@else-->{$lang->email_address}<!--@end--></label><input name="user_id" type="text" id="id" value="" /></li>
<li><label for="pw">{$lang->password}</label><input name="password" type="password" id="pw" value="" /></li>
</ul>
<div class="message info" id="keep_msg" style="display:none;">
<p>{$lang->about_keep_warning}</p>
</div>
<div class="bna">
<div class="fl"><input name="keep_signed" type="checkbox" value="Y" id="autoLogin" /> <label for="autoLogin">{$lang->keep_signed}</label></div>
<div class="fr"><button type="submit" class="bn dark">{$lang->cmd_login}</button></div>
</div>
<ul class="hp">
<li><a href="{getUrl('','act','dispMemberFindAccount')}"><span>{$lang->cmd_find_member_account}</span></a></li>
<li><a href="{getUrl('','act','dispMemberSignUpForm')}"><span>{$lang->cmd_signup}</span></a></li>
</ul>
</form>
</div>
<script>
jQuery(function($){
var keep_msg = $('#keep_msg');
keep_msg.hide();
$('#autoLogin').change(function(){
if($(this).is(':checked')){
keep_msg.slideDown(200);
} else {
keep_msg.slideUp(200);
}
});
});
</script>

View file

@ -0,0 +1,32 @@
<load target="css/member.css" />
<div class="xm">
<h2 class="h2">{$lang->member_info}</h2>
<div class="table even">
<table width="100%" border="1" cellspacing="0">
<tr loop="$displayDatas => $item">
<th scope="row" >{$item->title} <em cond="$item->required || $item->mustRequired">*</em></th>
<td class="text">{$item->value}</td>
</tr>
<tr>
<th scope="row">{$lang->member_group}</th>
<td class="text">{implode(', ', $memberInfo['group_list'])}</td>
</tr>
<tr>
<th>{$lang->signup_date}</th>
<td>{zdate($memberInfo[regdate],"Y-m-d")}</td>
</tr>
<!--@if($memberInfo[member_srl] == $logged_info->member_srl || $logged_info->is_admin == 'Y' )-->
<tr>
<th>{$lang->last_login}</th>
<td>{zdate($memberInfo[last_login],"Y-m-d")}</td>
</tr>
<!--@end-->
</table>
</div>
<div class="btnArea" cond="$memberInfo['member_srl'] == $logged_info->member_srl">
<span class="btn" cond="$member_config->identifier == 'email_address'"><a href="{getUrl('act', 'dispMemberModifyEmailAddress')}">{$lang->cmd_modify_member_email_address}</a></span>
<span class="btn"><a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}">{$lang->cmd_modify_member_info}</a></span>
<span class="btn"><a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}">{$lang->cmd_modify_member_password}</a></span>
<span class="btn"><a href="{getUrl('act','dispMemberLeave','member_srl','')}">{$lang->cmd_leave}</a></span>
</div>
</div>

View file

@ -0,0 +1,22 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="modifyEmailAddress" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberModifyEmailAddress" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<h2 class="h2">{$lang->cmd_modify_member_email_address}</h2>
<p>{$lang->about_modify_member_email_address}</p>
<ul>
<li>
<label for="email_address">{$lang->email_address}</label>
<input type="text" id="email_address" name="email_address" value="" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_send_auth_new_emaill_address}" />
</div>
</form>

View file

@ -0,0 +1,48 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="../../tpl/js/signup_check.js" />
<load target="../../tpl/js/member_admin.js" />
<load target="css/msignup.css" usecdn="true" />
<script type="text/javascript" >
xe.lang.deleteProfileImage = '{$lang->msg_delete_extend_form}';
xe.lang.deleteImageMark = '{$lang->msg_delete_extend_form}';
xe.lang.deleteImageName = '{$lang->msg_delete_extend_form}';
</script>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="bd">
<h2 class="h2">{$lang->msg_update_member}</h2>
<form ruleset="@insertMember" id="fo_insert_member" class="ff" action="./" method="POST">
<input type="hidden" name="act" value="procMemberModifyInfo" />
<input type="hidden" name="module" value="member" />
<input type="hidden" name="member_srl" value="{$member_info->member_srl}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li>
<label for="identifierForm">{$identifierForm->title} <em style="color:red">*</em></label>
<input id="identifierForm" type="text" name="{$identifierForm->name}" value="{$identifierForm->value}" disabled="disabled" />
<input type="hidden" name="{$identifierForm->name}" value="{$identifierForm->value}" />
</li>
<li loop="$formTags=>$formTag">
<label for="{$formTag->name}">{$formTag->title}</label>
<div id="{$formTag->name}" cond="$formTag->name != 'signature' && $formTag->type != 'date'" class="tel"|cond="$formTag->type == 'tel'">{$formTag->inputTag}</div>
<textarea id="{$formTag->name}" cond="$formTag->name == 'signature'" name="signature" rows="8" cols="42" class="itxx">{$member_info->signature}</textarea>
<input id="{$formTag->name}" class="inputText" type="date" value="{$oMemberInfo[$formTag->name]}" cond="$formTag->type == 'date'" />
</li>
<li><label for="mailing" class="db fb al">{$lang->allow_mailing}</label><input id="mailing" type="checkbox" name="allow_mailing" value="Y" class="checkbox" <!--@if($member_info->allow_mailing!='N')-->checked="checked"<!--@end--> /> <p style="color:#666">{$lang->about_allow_mailing}</p></li>
</ul>
</fieldset>
<div class="cm">
<input type="submit" value="{$lang->cmd_registration}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
</form>
</div>

View file

@ -0,0 +1,32 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$member_title = $lang->cmd_modify_member_password}</h2>
<form ruleset="modifyPassword" id="fo_insert_member" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberModifyPassword" />
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<ul>
<li>
<label for="uid">{Context::getLang($identifier)}</label>
<input type="text" disabled="disabled" value="{$formValue}" id="uid" />
</li>
<li>
<label for="cpw">{$lang->current_password}</label>
<input type="password" name="current_password" id="cpw" />
</li>
<li>
<label for="npw1">{$lang->password1}</label>
<input type="password" name="password1" id="npw1" /> <span class="desc">{$lang->about_password}</span>
</li>
<li>
<label for="npw2">{$lang->password2}</label>
<input type="password" name="password2" id="npw2" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -0,0 +1,24 @@
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$lang->msg_rechecked_password}</h2>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form class="ff" action="./index.php" method="post" ruleset="recheckedPassword">
<input type="hidden" name="act" value="procMemberModifyInfoBefore" />
<input type="hidden" name="module" value="member" />
<ul>
<li>
<label for="identifier">{$identifierTitle}</label>
<p id="identifier">{$identifierValue}</p>
</li>
<li>
<label for="password">{$lang->password}</label>
<input id ="password" type="password" name="password" />
<p class="desc">{$lang->about_rechecked_password}</p>
</li>
</ul>
<div class="bna">
<input class="bn white" type="submit" value="{$lang->cmd_confirm}" />
<span class="bn white"><a href="{getUrl('act','dispMemberInfo','member_srl','')}">{$lang->cmd_cancel}</a></span>
</div>
</form>

View file

@ -0,0 +1,60 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<load target="../../tpl/js/signup_check.js" />
<div class="bd">
<div class="hx h2">
<h2>{$lang->cmd_signup}</h2>
</div>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="@insertMember" id="fo_insert_member" class="ff" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberInsert" />
<!--@if(!$is_logged && $member_config->agreement)-->
<div class="agreement">
<div class="text">
{$member_config->agreement}
</div>
<div class="confirm">
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
<label for="accept_agree">{$lang->about_accept_agreement}</label>
</div>
</div>
<!--@end-->
<ul>
<li>
<label for="{$identifierForm->name}">{$identifierForm->title} <em style="color:red">*</em></label>
<input type="text" name="{$identifierForm->name}" id="{$identifierForm->name}" value="{$identifierForm->value}" />
</li>
<li>
<label for="password">{$lang->password} <em style="color:red">*</em></label>
<input type="password" name="password" id="password" value=""/>
</li>
<li>
<label for="password2">{$lang->password3} <em style="color:red">*</em></label>
<input type="password" name="password2" id="password2" value=""/>
</li>
<li loop="$formTags=>$formTag">
<label for="{$formTag->name}">{$formTag->title}</label>
<div id="{$formTag->name}" cond="$formTag->name != 'signature' && $formTag->type != 'date'" class="tel"|cond="$formTag->type == 'tel'">{$formTag->inputTag}</div>
<input id="{$formTag->name}" class="inputText" type="date" value="{$oMemberInfo[$formTag->name]}" cond="$formTag->type == 'date'" />
</li>
<li>
<label>{$lang->allow_mailing}</label>
<input type="radio" name="allow_mailing" id="mailingYes" value="Y" checked="checked"|cond="$member_info->allow_mailing == 'Y'" /> <label for="mailingYes">{$lang->cmd_yes}</label>
<input type="radio" name="allow_mailing" id="mailingNo" value="N" checked="checked"|cond="$member_info->allow_mailing != 'Y'" /> <label for="mailingNo">{$lang->cmd_no}</label>
</li>
<li>
<label>{$lang->allow_message}</label>
<block loop="$lang->allow_message_type=>$key,$val">
<input type="radio" name="allow_message" value="{$key}" checked="checked"|cond="$member_info->allow_message == $key || (!$member_info && $key == 'Y')" id="allow_{$key}" /> <label for="allow_{$key}">{$val}</label>
</block>
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_registration}" />
</div>
</form>
</div>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">회원 기본 모바일 스킨</title>
<title xml:lang="en">XE Basic Member Mobile Skin</title>
<description xml:lang="ko">
XE 기본 모바일 스킨 입니다.
NHN (developers@xpressengine.com)
</description>
<version>0.1</version>
<date>2012-09-21</date>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
<extra_vars />
</skin>

View file

@ -26,7 +26,7 @@
$config = $oMemberModel->getMemberConfig ();
$getVars = array();
if ($config->signupForm){
foreach($config->signupForm as $formInfo){
foreach($config->signupForm as $formInfo) {
if($formInfo->isDefaultForm && ($formInfo->isUse || $formInfo->required || $formInfo->mustRequired)){
$getVars[] = $formInfo->name;
}
@ -146,6 +146,7 @@
'layout_srl',
'skin',
'colorset',
'mskin',
'profile_image', 'profile_image_max_width', 'profile_image_max_height',
'image_name', 'image_name_max_width', 'image_name_max_height',
'image_mark', 'image_mark_max_width', 'image_mark_max_height',
@ -178,14 +179,17 @@
if(!trim(strip_tags($args->after_logout_url))) $args->after_logout_url = null;
if(!trim(strip_tags($args->redirect_url))) $args->redirect_url = null;
if(!$args->skin) $args->skin = "default";
if(!$args->colorset) $args->colorset = "white";
if(!$args->skin) $args->skin = 'default';
if(!$args->colorset) $args->colorset = 'white';
if(!$args->mskin) $args->mskin = 'default';
$args->profile_image = $args->profile_image?'Y':'N';
$args->image_name = $args->image_name?'Y':'N';
$args->image_mark = $args->image_mark?'Y':'N';
if($args->signature!='Y') $args->signature = 'N';
$args->identifier = $all_args->identifier;
$args->layout_srl = $args->layout_srl ? $args->layout_srl : null;
// set default
$all_args->is_nick_name_public = 'Y';

View file

@ -119,6 +119,10 @@
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list', $skin_list);
// list of skins for member module
$mskin_list = $oModuleModel->getSkins($this->module_path, 'm.skins');
Context::set('mskin_list', $mskin_list);
// retrieve skins of editor
$oEditorModel = &getModel('editor');
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
@ -274,6 +278,7 @@
if($formInfo->isDefaultForm){
if($formInfo->imageType){
$formTag->type = 'image';
if($formInfo->name == 'profile_image'){
$target = $memberInfo['profile_image'];
$functionName = 'doDeleteProfileImage';
@ -305,11 +310,13 @@
,$member_config->{$formInfo->name.'_max_height'});
}//end imageType
elseif($formInfo->name == 'birthday'){
$formTag->type = 'date';
$inputTag = sprintf('<input type="hidden" name="birthday" id="date_birthday" value="%s" /><input type="text" class="inputDate" id="birthday" value="%s" /> <input type="button" value="%s" class="dateRemover" />'
,$memberInfo['birthday']
,zdate($memberInfo['birthday'], 'Y-m-d', false)
,$lang->cmd_delete);
}elseif($formInfo->name == 'find_account_question'){
$formTag->type = 'select';
$inputTag = '<select name="find_account_question" style="width:290px; display:block;">%s</select>';
$optionTag = array();
foreach($lang->find_account_question_items as $key=>$val){
@ -323,6 +330,7 @@
$inputTag = sprintf($inputTag, implode('', $optionTag));
$inputTag .= '<input type="text" name="find_account_answer" title="'.Context::getLang('find_account_answer').'" value="'.$memberInfo['find_account_answer'].'" class="inputText long tall" />';
}else{
$formTag->type = 'text';
$inputTag = sprintf('<input type="text" name="%s" value="%s" class="inputText long tall" />'
,$formInfo->name
,$memberInfo[$formInfo->name]);
@ -334,6 +342,7 @@
'value' => $extendForm->value);
$extentionReplace = array();
$formTag->type = $extendForm->column_type;
if($extendForm->column_type == 'text' || $extendForm->column_type == 'homepage' || $extendForm->column_type == 'email_address'){
$template = '<input type="text" name="%column_name%" value="%value%" />';
}elseif($extendForm->column_type == 'tel'){

View file

@ -388,7 +388,7 @@
$memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
$this->memberInfo->password = $memberInfo->password;
}
// Verify the cuttent password
// Verify the current password
if(!$oMemberModel->isValidPassword($this->memberInfo->password, $password))
{
return new Object(-1, 'invalid_password');
@ -396,7 +396,7 @@
$_SESSION['rechecked_password_step'] = 'VALIDATE_PASSWORD';
$redirectUrl = getUrl('', 'act', 'dispMemberModifyInfo');
$redirectUrl = getNotEncodedUrl('', 'act', 'dispMemberModifyInfo');
$this->setRedirectUrl($redirectUrl);
}
@ -2047,6 +2047,10 @@
**/
function destroySessionInfo() {
if(!$_SESSION || !is_array($_SESSION)) return;
$memberInfo = Context::get('logged_info');
$memberSrl = $memberInfo->member_srl;
foreach($_SESSION as $key => $val) {
$_SESSION[$key] = '';
}
@ -2054,10 +2058,11 @@
setcookie(session_name(), '', time()-42000, '/');
setcookie('sso','',time()-42000, '/');
if($_COOKIE['xeak']) {
$args->autologin_key = $_COOKIE['xeak'];
executeQuery('member.deleteAutologin', $args);
}
if($memberSrl)
{
$args->member_srl = $memberSrl;
$output = executeQuery('member.deleteAutologin', $args);
}
}
function _updatePointByGroup($memberSrl, $groupSrlList)

View file

@ -1,223 +1,66 @@
<?php
class memberMobile extends member
require_once(_XE_PATH_.'modules/member/member.view.php');
class memberMobile extends memberView
{
/**
* Support method are
* dispMemberInfo, dispMemberSignUpForm, dispMemberFindAccount, dispMemberGetTempPassword, dispMemberModifyInfo, dispMemberModifyInfoBefore
*/
var $memberInfo;
function init() {
// Get the member configuration
$oModuleModel = &getModel('module');
$this->member_config = $oModuleModel->getModuleConfig('member');
function init()
{
// Get the member configuration
$oMemberModel = &getModel('member');
$this->member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $this->member_config);
$mskin = $this->member_config->mskin;
// Set the template path
if(!$mskin)
{
$mskin = 'default';
$template_path = sprintf('%sm.skins/%s', $this->module_path, $mskin);
}
else
{
$template_path = sprintf('%sm.skins/%s', $this->module_path, $mskin);
}
// if member_srl exists, set memberInfo
$member_srl = Context::get('member_srl');
if($member_srl) {
if($member_srl)
{
$oMemberModel = &getModel('member');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
if(!$this->memberInfo) Context::set('member_srl','');
else Context::set('member_info',$this->memberInfo);
if(!$this->memberInfo)
{
Context::set('member_srl','');
}
else
{
Context::set('member_info',$this->memberInfo);
}
}
Context::set('member_config', $this->member_config);
$this->setTemplatePath($this->module_path.'tpl');
}
$this->setTemplatePath($template_path);
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;
}
// get member module configuration.
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
// Set a template file
Context::set('referer_url', htmlspecialchars($_SERVER['HTTP_REFERER']));
$this->setTemplateFile('login_form');
}
function dispMemberSignUpForm(){
$oMemberModel = &getModel('member');
if($oMemberModel->isLogged()) return $this->stop('msg_already_logged');
$trigger_output = ModuleHandler::triggerCall('member.dispMemberSignUpForm', 'before', $this->member_config);
if(!$trigger_output->toBool()) return $trigger_output;
if ($this->member_config->enable_join != 'Y') return $this->stop('msg_signup_disabled');
$oMemberAdminView = &getAdminView('member');
$formTags = $oMemberAdminView->_getMemberInputTag($member_info);
Context::set('formTags', $formTags);
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
global $lang;
$identifierForm->title = $lang->{$member_config->identifier};
$identifierForm->name = $member_config->identifier;
$identifierForm->value = $member_info->{$member_config->identifier};
Context::set('identifierForm', $identifierForm);
// Set a template file
$this->setTemplateFile('signup_form');
}
function dispMemberInfo() {
$oMemberModel = &getModel('member');
$logged_info = Context::get('logged_info');
// Don't display member info to non-logged user
if(!$logged_info->member_srl) return $this->stop('msg_not_permitted');
$member_srl = Context::get('member_srl');
if(!$member_srl && Context::get('is_logged')) {
$member_srl = $logged_info->member_srl;
} elseif(!$member_srl) {
return $this->dispMemberSignUpForm();
}
$site_module_info = Context::get('site_module_info');
if(!$this->memberInfo)
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($this->member_config->mlayout_srl);
if($layout_info)
{
$columnList = array('user_name', 'nick_name', 'homepage', 'blog', 'birthday', 'regdate', 'last_login');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, $site_module_info->site_srl, $columnList);
$this->setLayoutPath($layout_info->path);
}
unset($this->memberInfo->password);
unset($this->memberInfo->email_id);
unset($this->memberInfo->email_host);
unset($this->memberInfo->email_address);
if(!$this->memberInfo->member_srl) return $this->dispMemberSignUpForm();
Context::set('member_info', $this->memberInfo);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->memberInfo));
$this->setTemplateFile('member_info_mobile');
}
}
/**
* @brief Find user ID and password
**/
function dispMemberFindAccount() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$this->setTemplateFile('find_member_account');
function dispMemberModifyInfo()
{
parent::dispMemberModifyInfo();
if($this->member_info)
{
Context::set('oMemberInfo', get_object_vars($this->member_info));
}
/**
* @brief Generate a temporary password
**/
function dispMemberGetTempPassword() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$user_id = Context::get('user_id');
$temp_password = $_SESSION['xe_temp_password_'.$user_id];
unset($_SESSION['xe_temp_password_'.$user_id]);
if(!$user_id||!$temp_password) return new Object(-1,'msg_invaild_request');
Context::set('temp_password', $temp_password);
$this->setTemplateFile('find_temp_password');
}
/**
* @brief Edit member profile
**/
function dispMemberModifyInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$memberModuleConfig = $oModuleModel->getModuleConfig('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) $this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$this->memberInfo->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$this->memberInfo);
// Receive a member join form
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->memberInfo));
// Call getEditor of the editor module and set it for signiture
if($this->memberInfo->member_srl) {
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'member_srl';
$option->content_key_name = 'signature';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = false;
$option->resizable = false;
$option->disable_html = true;
$option->height = 200;
$option->skin = $this->member_config->editor_skin;
$option->colorset = $this->member_config->editor_colorset;
$editor = $oEditorModel->getEditor($this->memberInfo->member_srl, $option);
Context::set('editor', $editor);
}
// Set a template file
$this->setTemplateFile('modify_info');
}
/**
* @brief Change the user password
**/
function dispMemberModifyPassword() {
$oMemberModel = &getModel('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) {
$columnList = array('member_srl', 'user_id');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
}
Context::set('member_info',$this->memberInfo);
// Set a template file
$this->setTemplateFile('modify_password');
}
/**
* @brief Member withdrawl
**/
function dispMemberLeave() {
$oMemberModel = &getModel('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) {
$columnList = array('member_srl', 'user_id');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
}
Context::set('member_info',$this->memberInfo);
// Set a template file
$this->setTemplateFile('leave_form');
}
}
}
?>

View file

@ -21,7 +21,15 @@
/**
* @brief Return member's configuration
**/
function getMemberConfig() {
function getMemberConfig()
{
static $member_config;
if($member_config)
{
return $member_config;
}
// Get member configuration stored in the DB
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
@ -30,7 +38,7 @@
{
foreach($config->signupForm AS $key=>$value)
{
$config->signupForm[$key]->title = Context::getLang($value->title);
$config->signupForm[$key]->title = ($value->isDefaultForm) ? Context::getLang($value->name) : $value->title;
if($config->signupForm[$key]->isPublic != 'N') $config->signupForm[$key]->isPublic = 'Y';
if($value->name == 'find_account_question') $config->signupForm[$key]->isPublic = 'N';
}
@ -55,16 +63,12 @@
if (!$config->max_error_count) $config->max_error_count = 10;
if (!$config->max_error_count_time) $config->max_error_count_time = 300;
if (!$config->layout_srl)
{
$oModuleModel = &getModel('module');
$defaultModuleInfo = $oModuleModel->getDefaultMid();
$config->layout_srl = $defaultModuleInfo->layout_srl;
}
if (!$config->signature_editor_skin || $config->signature_editor_skin == 'default') $config->signature_editor_skin = 'xpresseditor';
if (!$config->sel_editor_colorset) $config->sel_editor_colorset = 'white';
$member_config = $config;
return $config;
}

View file

@ -98,6 +98,7 @@
function _getDisplayedMemberInfo($memberInfo, $extendFormInfo, $memberConfig)
{
$logged_info = Context::get('logged_info');
$displayDatas = array();
foreach($memberConfig->signupForm as $no=>$formInfo)
{
@ -270,6 +271,7 @@
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
$member_info->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$member_info);
// Get a list of extend join form
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
@ -291,6 +293,8 @@
Context::set('editor', $editor);
}
$this->member_info = $member_info;
$oMemberAdminView = &getAdminView('member');
$formTags = $oMemberAdminView->_getMemberInputTag($member_info);
Context::set('formTags', $formTags);
@ -382,7 +386,7 @@
**/
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
Context::set('redirect_url', getNotEncodedUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;
@ -542,7 +546,7 @@
}
/**
* @brief 이메일 주소를 기본 로그인 계정 사용시 이메일 주소 변경을 위한 화면 추가
* @brief ?´ë©”??주소ë¥?기본 로그??계정 ?¬ìš©???´ë©”??주소 변경ì<EFBFBD> ?„한 ?”ë©´ ì¶”ê?
**/
function dispMemberModifyEmailAddress(){
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');

View file

@ -3,6 +3,7 @@
<table name="member_autologin" />
</tables>
<conditions>
<condition operation="equal" column="autologin_key" var="autologin_key" notnull="notnull" />
<condition operation="equal" column="autologin_key" var="autologin_key" />
<condition operation="equal" column="member_srl" var="member_srl" pipe="or" />
</conditions>
</query>

View file

@ -22,3 +22,4 @@
<span class="btn"><a href="{getUrl('act','dispMemberInfo','member_srl','')}">{$lang->cmd_cancel}</a></span>
</div>
</form>
<include target="./common_footer.html" />

View file

@ -1,28 +0,0 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="css/msignup.css" usecdn="true" />
<!--%import("../skins/default/filter/leave_member.xml")-->
<load target="../skins/default/js/member.js" usecdn="true" />
<div class="bd">
<h2 class="h2">{$member_title = $lang->msg_leave_member}</h2>
<form id="fo_insert_member" action="./" method="get" onsubmit="return procFilter(this, leave_member)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li><label for="uid" class="db fb al">{$lang->user_id}</label><div id="uid">{$member_info->user_id}</div></li>
<li><label for="pw" class="db fb al">{$lang->password}</label><input id="pw" type="password" name="password" class="itx" /></li>
</ul>
</fieldset>
<div class="cm">
<input type="submit" value="{$lang->cmd_leave}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_back}</span></a>
</div>
</form>
</div>

View file

@ -125,7 +125,7 @@
</div>
</section>
<section class="section">
<h1>디자인 설정</h1>
<h1>디자인 설정</h1>
<div>
<div class="x_control-group">
<label for="skin">{$lang->layout}</label>

View file

@ -1,185 +0,0 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="css/msignup.css" usecdn="true" />
<load target="js/signup_check.js" usecdn="true" />
<load target="js/krzip_search.js" usecdn="true" />
<!--%import("../skins/default/filter/modify_info.xml")-->
<load target="../skins/default/js/member.js" usecdn="true" />
<!--@if($member_config->profile_image == 'Y')-->
<!--%import("../skins/default/filter/delete_profile_image.xml")-->
<!--@end-->
<!--@if($member_config->image_name == 'Y')-->
<!--%import("../skins/default/filter/delete_image_name.xml")-->
<!--@end-->
<!--@if($member_config->image_mark == 'Y')-->
<!--%import("../skins/default/filter/delete_image_mark.xml")-->
<!--@end-->
<div class="bd">
<h2 class="h2">{$lang->msg_update_member}</h2>
<h3 class="h3">{$lang->member_default_info}</h3>
<form id="fo_insert_member" action="./" method="GET" onsubmit="return procFilter(this, modify_info)" <!--@if($member_config->profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data"<!--@end--> target="tmp_upload_iframe">
<input type="hidden" name="act" value="" />
<input type="hidden" name="module" value="member" />
<input type="hidden" name="member_srl" value="{$member_info->member_srl}" />
<input type="hidden" name="signature" value="{htmlspecialchars($member_info->signature)}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li><label for="uid" class="db fb al">{$lang->user_id}</label><div id="uid">{htmlspecialchars($member_info->user_id)}</div></li>
<li><label for="uname" class="db fb al">{$lang->user_name}</label><input type="text" name="user_name" id="uname" class="itx" value="{htmlspecialchars($member_info->user_name)}" /> <p style="color:#666">{$lang->about_user_name}</p></li>
<li><label for="nname" class="db fb al">{$lang->nick_name}</label><input type="text" name="nick_name" id="nname" class="itx" value="{htmlspecialchars($member_info->nick_name)}" /> <p style="color:#666">{$lang->about_nick_name}</p></li>
<li><label for="email" class="db fb al">{$lang->email_address}</label><input type="text" name="email_address" id="email" class="itx" value="{htmlspecialchars($member_info->email_address)}" /><p style="color:#666">{$lang->about_email_address}</p></li>
<!--@if($member_config->profile_image == 'Y')-->
<li><label for="p_image" class="db fb al">{$lang->profile_image}</label>
<!--@if($member_info->profile_image->src)-->
<div id="p_image">
<img src="{$member_info->profile_image->src}" border="0" alt="profile_image" />
<button type="button" onclick="doDeleteProfileImage({$member_info->member_srl});">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="p_image">
<input type="file" name="profile_image" value="" />
<a href="#" onclick="doUploadProfileImage();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->profile_image_max_width} : {$member_config->profile_image_max_width}px, {$lang->profile_image_max_height} : {$member_config->profile_image_max_height}px</p>
</li>
<!--@end-->
<!--@if($member_config->image_name == 'Y')-->
<li><label for="p_image" class="db fb al">{$lang->image_name}</label>
<!--@if($member_info->image_name->src)-->
<div id="p_image">
<div><img src="{$member_info->image_name->src}" border="0" alt="image_name" /></div>
<button type="button" onclick="doDeleteImageName({$member_info->member_srl});">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="p_image">
<input type="file" name="image_name" value="" />
<a href="#" onclick="doUploadImageName();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->image_name_max_width} : {$member_config->image_name_max_width}px, {$lang->image_name_max_height} : {$member_config->image_name_max_height}px</p>
</li>
<!--@end-->
<!--@if($member_config->image_mark == 'Y')-->
<li><label for="image_mark" class="db fb al">{$lang->image_mark}</label>
<!--@if($member_info->image_mark->src)-->
<div id="image_mark">
<img src="{$member_info->image_mark->src}" border="0" alt="image_mark" />
<button type="button" onclick="doDeleteImageMark({$member_info->member_srl});return false;">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="image_mark">
<input type="file" name="image_mark" value="" />
<a href="#" onclick="doUploadImageMark();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->image_mark_max_width} : {$member_config->image_mark_max_width}px, {$lang->image_mark_max_height} : {$member_config->image_mark_max_height}px</p>
</li>
<!--@end-->
<li><label for="hpage" class="db fb al">{$lang->homepage}</label><input type="text" id="hpage" name="homepage" value="{htmlspecialchars($member_info->homepage)}" class="itx" /> <p style="color:#666">{$lang->about_homepage}</p></li>
<li><label for="bpage" class="db fb al">{$lang->blog}</label><input type="text" id="bpage" name="blog" value="{htmlspecialchars($member_info->blog)}" class="itx" /> <p style="color:#666">{$lang->about_blog_url}</p></li>
<li><label for="bday" class="db fb al">{$lang->birthday}</label><input name="birthday" type="text" id="bday" class="itx" value="{$member_info->birthday}" /><p style="color:#666">{$lang->about_birthday}</p></li>
<li><label for="mailing" class="db fb al">{$lang->allow_mailing}</label><input id="mailing" type="checkbox" name="allow_mailing" value="Y" class="checkbox" <!--@if($member_info->allow_mailing!='N')-->checked="checked"<!--@end--> /> <p style="color:#666">{$lang->about_allow_mailing}</p></li>
<!--@if($member_config->signature != 'N')-->
<li><label for="signature" class="db fb al">{$lang->signature}</label><textarea name="signature" rows="8" cols="42" class="itxx" value=""></textarea></li>
<!--@end-->
</ul>
</fieldset>
<!--@if($extend_form_list)-->
<h3 class="h3">{$lang->member_extend_info}</h3>
<fieldset class="sn">
<ul>
<!--@foreach($extend_form_list as $key => $val)--><!--@if($val->is_active=='Y')-->
<li><label class="db fb al">{htmlspecialchars($val->column_title)}</label>
<!--// 일반 text -->
<!--@if($val->column_type == 'text')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// 홈페이지 주소 -->
<!--@elseif($val->column_type == 'homepage')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// Email 주소 -->
<!--@elseif($val->column_type == 'email_address')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// 전화번호 -->
<!--@elseif($val->column_type == 'tel')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[0])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[2])}" size="4"/>
<!--// textarea -->
<!--@elseif($val->column_type == 'textarea')-->
<textarea name="{$val->column_name}" rows="8" cols="42" class="itxx">{htmlspecialchars($val->value)}</textarea>
<!--// 다중 선택 -->
<!--@elseif($val->column_type == 'checkbox')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="checkbox" id="{$v}" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--@elseif($val->column_type == 'radio')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="radio" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--// 단일 선택 -->
<!--@elseif($val->column_type == 'select')-->
<select name="{$val->column_name}">
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<option value="{$v}" <!--@if($v == $val->value)-->selected="selected"<!--@end-->>{$v}</option>
<!--@end-->
<!--@end-->
</select>
<!--// 한국 주소 검색 -->
<!--@elseif($val->column_type == 'kr_zip')-->
<div class="krZip">
<div id="zone_address_1_{$val->column_name}" style="display:<!--@if($val->value[0])-->inline<!--@else-->none<!--@end-->;">
<input type="text" name="{$val->column_name}" value="{$val->value[0]}" class="itx"/>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_list_{$val->column_name}" style="display:none">
<select name="_tmp_address_list_{$val->column_name}"></select>
<a href="#" onclick="doSelectKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_select}</span></a>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_search_{$val->column_name}" style="display:<!--@if($val->value[0])-->none<!--@else-->inline<!--@end-->;">
<input type="text" name="_tmp_address_search_{$val->column_name}" class="itx" value="" />
<a href="#" onclick="doSearchKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_search}</span></a>
</div>
<div class="address2">
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" class="itx" />
</div>
</div>
<!--// 일본 주소 검색 -->
<!--@elseif($val->column_type == 'jp_zip')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// 날짜 입력 -->
<!--@elseif($val->column_type == 'date')-->
<input type="hidden" name="{$val->column_name}" id="date_{$val->column_name}" value="{$val->value}" />
<input type="text" class="inputDate" value="" />
<!--@end-->
<p style="color:#666">{$val->description}</p>
<!--// 공개 필드 css확인 필요 -->
<!--input type="checkbox" class="checkbox" name="open_{$val->column_name}" value="Y" id="open_{$val->column_name}" /><label for="open_{$val->column_name}">{$lang->public}</label--></li>
<!--@end--><!--@end-->
</ul>
</fieldset>
<!--@end-->
<div class="cm">
<input type="submit" value="{$lang->cmd_registration}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
</form>
</div>

View file

@ -233,7 +233,7 @@
function _menuInfoSetting(&$menu)
{
$oModuleModel = &getModel('module');
if(!preg_match('/^http/i', $menu['url']))
if($menu['url'] && !preg_match('/^http/i', $menu['url']))
{
unset($midInfo);
unset($moduleInfo);

View file

@ -111,14 +111,14 @@
<input type="text" class="en" title="English"><br>
<input type="text" class="ko" title="한국어"><br>
<input type="text" class="jp" title="日本語"><br>
<input type="text" class="zh-CN" title="中文(中)"><br>
<input type="text" class="zh-CN" title="中文(中?)"><br>
<input type="text" class="zh-TW" title="中文(臺灣)"><br>
<input type="text" class="fr" title="Français"><br>
<input type="text" class="fr" title="Francais"><br>
<input type="text" class="de" title="Deutsch"><br>
<input type="text" class="ru" title="Русский"><br>
<input type="text" class="es" title="Español"><br>
<input type="text" class="tr" title="Türkçe"><br>
<input type="text" class="vi" title="Tiếng Việt"><br>
<input type="text" class="es" title="Espanol"><br>
<input type="text" class="tr" title="Turkce"><br>
<input type="text" class="vi" title="Ti?ng Vi?t"><br>
<input type="text" class="mn" title="Mongolian">
<p class="x_alert x_alert-info" style="width:169px">
지원하는 다국어 목록은 [<a href="{getUrl('','module','admin','act','dispAdminConfigGeneral')}">설정>일반</a>]에서 편집 가능
@ -206,14 +206,14 @@
<input type="text" class="en" title="English"><br>
<input type="text" class="ko" title="한국어"><br>
<input type="text" class="jp" title="日本語"><br>
<input type="text" class="zh-CN" title="中文(中)"><br>
<input type="text" class="zh-CN" title="中文(中?)"><br>
<input type="text" class="zh-TW" title="中文(臺灣)"><br>
<input type="text" class="fr" title="Français"><br>
<input type="text" class="fr" title="Francais"><br>
<input type="text" class="de" title="Deutsch"><br>
<input type="text" class="ru" title="Русский"><br>
<input type="text" class="es" title="Español"><br>
<input type="text" class="tr" title="Türkçe"><br>
<input type="text" class="vi" title="Tiếng Việt"><br>
<input type="text" class="es" title="Espanol"><br>
<input type="text" class="tr" title="Turkce"><br>
<input type="text" class="vi" title="Ti?ng Vi?t"><br>
<input type="text" class="mn" title="Mongolian">
<p class="x_alert x_alert-info" style="width:169px">
지원하는 다국어 목록은 [<a href="{getUrl('','module','admin','act','dispAdminConfigGeneral')}">설정>일반</a>]에서 편집 가능

View file

@ -18,7 +18,7 @@
**/
function procMessageAdminInsertConfig() {
// Get information
$args->skin = Context::get('skin');
$args = Context::gets('skin', 'mskin');
// Create a module Controller object
$oModuleController = &getController('module');
$output = $oModuleController->insertModuleConfig('message',$args);

View file

@ -19,17 +19,24 @@
function dispMessageAdminConfig() {
// Get a list of skins(themes)
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getskins($this->module_path);
Context::set('skin_list', $skin_list);
$mskin_list = $oModuleModel->getSkins($this->module_path, "m.skins");
Context::set('mskin_list', $mskin_list);
// Get configurations (using module model object)
$config = $oModuleModel->getModuleConfig('message');
Context::set('config',$config);
// Set a template file
$this->setTemplatePath($this->module_path.'tpl');
//Security
$security = new Security();
$security->encodeHTML('skin_list..title');
$security->encodeHTML('skin_list..title', 'mskin_list..title');
$this->setTemplateFile('config');
}

View file

@ -16,9 +16,9 @@
// Get configurations (using module model object)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('message');
if(!$config->skin) $config->skin = 'default';
if(!$config->mskin) $config->mskin = 'default';
// Set the template path
$template_path = sprintf('%sm.skins/%s', $this->module_path, $config->skin);
$template_path = sprintf('%sm.skins/%s', $this->module_path, $config->mskin);
// Get the member configuration
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');

View file

@ -3,7 +3,7 @@
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form action="./" method="post">
<form action="./" method="post" class="form">
<input type="hidden" name="module" value="message" />
<input type="hidden" name="act" value="procMessageAdminInsertConfig" />
<p>{$lang->about_skin}</p>
@ -18,6 +18,16 @@
</select>
</p>
</li>
<li>
<p class="q"><label for="mskin">{$lang->mobile_skin}</label></p>
<p class="a">
<select name="mskin" id="mskin">
<!--@foreach($mskin_list as $key => $val)-->
<option value="{$key}" <!--@if($key==$config->mskin)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</p>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>

View file

@ -643,6 +643,7 @@
// Variable setting for site keyword
$site_keyword = Context::get('site_keyword');
$site_srl = Context::get('site_srl');
$vid = Context::get('vid');
// If there is no site keyword, use as information of the current virtual site
$args = null;
$logged_info = Context::get('logged_info');
@ -651,7 +652,7 @@
if(!$site_srl)
{
if($logged_info->is_admin == 'Y' && !$site_keyword) $args->site_srl = 0;
if($logged_info->is_admin == 'Y' && !$site_keyword && !$vid) $args->site_srl = 0;
else $args->site_srl = (int)$site_module_info->site_srl;
}
else $args->site_srl = $site_srl;

View file

@ -151,6 +151,11 @@
* @brief Get module information by mid
**/
function getModuleInfoByMid($mid, $site_srl = 0, $columnList = array()) {
if(!$mid)
{
return;
}
$args->mid = $mid;
$args->site_srl = (int)$site_srl;
$oCacheHandler = &CacheHandler::getInstance('object');

View file

@ -100,7 +100,7 @@
</p>
<p cond="$val->type == 'checkbox'" class="a">
<span loop="$val->options => $k, $v">
<input type="checkbox" name="{$val->name}[]" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="in_array($v->value, $val->value)" class="checkbox" />
<input type="checkbox" name="{$val->name}[]" value="{$v->value}" id="ch_{$key}_{$k}" checked="checked"|cond="@in_array($v->value, $val->value)" class="checkbox" />
<label for="ch_{$key}_{$k}">{$v->title}</label>
</span>
</p>

View file

@ -254,6 +254,10 @@
<value xml:lang="tr"><![CDATA[Sadece makalelerdeki/yorumlardaki/eklerdeki/katılımlardaki tüm puanlar sıfırlanacaktır.<br />Sıfırlamadan sonra sadece, website aktiviteleri yapan üyeler, giriş puanı alacaklardır.<br />Lütfen bu özelliği sadece veri taşıma veya cidden gerekliliği olduğu durumlarda kullanınız.]]></value>
<value xml:lang="vi"><![CDATA[Điểm chỉ có thể có được khi gửi bài, bình luận, đính kèm và khi đăng kí.<br />Chỉ có thể thiết lập lại điểm của những thành viên đã đăng kí là thành viên.<br />Xin hãy chỉ sử dụng chức năng này khi bạn chuyển nội dung của Website qua một Website khác.]]></value>
</item>
<item name="default_group">
<value xml:lang="ko"><![CDATA[기본 그룹]]></value>
<value xml:lang="en"><![CDATA[Default Group]]></value>
</item>
<item name="point_link_group">
<value xml:lang="ko"><![CDATA[그룹 연동]]></value>
<value xml:lang="en"><![CDATA[Group Change by Level]]></value>

View file

@ -39,7 +39,6 @@
$selected_group_list = array();
if(count($group_list)) {
foreach($group_list as $key => $val) {
if($val->is_admin == 'Y' || $val->is_default == 'Y') continue;
$selected_group_list[$key] = $val;
}
}

View file

@ -332,7 +332,7 @@
$point = $module_config['download_file'];
if(!isset($point)) $point = $config->download_file;
// If points are less than 0, and if downloading a file is not allowed in this case, give an errors
if($cur_point + $point < 0 && $config->disable_download == 'Y') return new Object(-1,'msg_not_permitted_download');
if($cur_point + $point < 0 && $config->disable_download == 'Y') return new Object(-1,'msg_cannot_download');
return new Object();
}
@ -533,8 +533,9 @@
}
// Delete the group of a level which is higher than the current level
foreach($point_group as $group_srl => $target_level) {
if($target_level > $level) $del_group_list[] = $group_srl;
if($target_level > $level) $del_group_list[] = $group_srl;
}
$del_group_list[] = $default_group->group_srl;
}
// Grant a new group
else {
@ -567,6 +568,17 @@
$cache_filename = sprintf('%s%d.cache.txt', $cache_path, $member_srl);
FileHandler::writeFile($cache_filename, $point);
$oCacheHandler = &CacheHandler::getInstance('object');
if($oCacheHandler->isSupport())
{
$cache_key = 'object:'.$member_srl;
$GLOBALS['__member_info__'][$member_srl] = null;
$oCacheHandler->delete($cache_key);
$gcache_key = 'object_member_groups:'.$member_srl.'_0';
$oCacheHandler->delete($gcache_key);
}
return $output;
}

View file

@ -104,7 +104,8 @@
<tbody>
<tr loop="$group_list => $key,$val">
<td><label for="point_group_{$key}">{$val->title}</label></td>
<td><input type="text" value="{$config->point_group[$key]}" name="point_group_{$key}" id="point_group_{$key}" style="width:30px" /></td>
<td cond="$val->is_default != 'Y'"><input type="text" value="{$config->point_group[$key]}" name="point_group_{$key}" id="point_group_{$key}" style="width:30px" /></td>
<td cond="$val->is_default == 'Y'"><span>{$lang->default_group}</span></td>
</tr>
</tbody>
</table>

View file

@ -200,4 +200,8 @@
<value xml:lang="jp"><![CDATA[サイト]]></value>
<value xml:lang="zh-TW"><![CDATA[網站]]></value>
</item>
</lang>
<item name="msg_trackback_send_failed">
<value xml:lang="ko"><![CDATA[엮인글 발송을 실패하였습니다.]]></value>
<value xml:lang="en"><![CDATA[Failed to send]]></value>
</item>
</lang>

View file

@ -97,7 +97,7 @@
$document_srl = Context::get('target_srl');
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists() || !$oDocument->getSummary()) return new Object();
if(!$oDocument->isExists()) return new Object();
if($oDocument->getMemberSrl() != $logged_info->member_srl) return new Object();
// Add a link sent yeokingeul
$oDocumentController = &getController('document');
@ -278,22 +278,22 @@
*/
function sendTrackback($oDocument, $trackback_url, $charset) {
$oModuleController = &getController('module');
// Information sent by
$http = parse_url($trackback_url);
$obj->blog_name = str_replace(array('&lt;','&gt;','&amp;','&quot;'), array('<','>','&','"'), Context::getBrowserTitle());
$oModuleController->replaceDefinedLangCode($obj->blog_name);
$obj->title = $oDocument->getTitleText();
$obj->excerpt = $oDocument->getSummary(200);
$obj->url = getFullUrl('','document_srl',$oDocument->document_srl);
// blog_name, title, excerpt, url charset of the string to the requested change
if($charset && function_exists('iconv')) {
foreach($obj as $key=>$val) {
$obj->{$key} = iconv('UTF-8',$charset,$val);
}
}
// written information sent to socket
if($http['query']) $http['query'].="&";
if(!$http['port']) $http['port'] = 80;
$content =
sprintf(
@ -306,42 +306,27 @@
urlencode($obj->blog_name),
urlencode($obj->excerpt)
);
if($http['query']) $content .= '&'.$http['query'];
$content_length = strlen($content);
// header by
$header =
sprintf(
"POST %s HTTP/1.1\r\n".
"Host: %s\r\n".
"Content-Type: %s\r\n".
"Content-Length: %s\r\n\r\n".
"%s\r\n",
$http['path'],
$http['host'],
"application/x-www-form-urlencoded",
$content_length,
$content
);
if(!$http['host']||!$http['port']) return new Object(-1,'msg_trackback_url_is_invalid');
// Opens a socket on the target server you want to send
$fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
if(!$fp) return new Object(-1,'msg_trackback_url_is_invalid');
// Header information sent by
fputs($fp, $header);
// Waiting for the results (in particular the server may not be falling EOF
while(!feof($fp)) {
$line = trim(fgets($fp, 4096));
if(preg_match("/^<error>/i",$line)){
$error = preg_replace('/[^0-9]/','',$line);
break;
}
}
// Close socket
fclose($fp);
if($error == "0") return new Object(0, 'msg_trackback_send_success');
return new Object(-1, 'msg_trackback_send_failed');
$buff = FileHandler::getRemoteResource($trackback_url, $content, 3, 'POST', 'application/x-www-form-urlencoded');
$oXmlParser = new XmlParser();
$xmlDoc = $oXmlParser->parse($buff);
if($xmlDoc->response->error->body == '0')
{
return new Object(0, 'msg_trackback_send_success');
}
else
{
if($xmlDoc->response->message->body)
{
return new Object(-1, sprintf('%s: %s', Context::getLang('msg_trackback_send_failed'), $xmlDoc->response->message->body));
}
else
{
return new Object(-1, 'msg_trackback_send_failed');
}
}
}
/**

View file

@ -158,8 +158,8 @@
* @param int $document_srl
* @return string
*/
function getTrackbackUrl($document_srl) {
$url = getFullUrl('','document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl));
function getTrackbackUrl($document_srl, $mid = NULL) {
$url = getFullUrl('', 'mid', $mid, 'document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl));
return $url;
}