Merge branch 'develop' into pr/member-phone-number

This commit is contained in:
Kijin Sung 2018-08-06 16:49:15 +09:00
commit 68840c2ede
45 changed files with 424 additions and 494 deletions

View file

@ -726,6 +726,9 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set('admin.allow', array_values($allowed_ip));
Rhymix\Framework\Config::set('admin.deny', array_values($denied_ip));
Rhymix\Framework\Config::set('session.use_keys', $vars->use_session_keys === 'Y');
Rhymix\Framework\Config::set('session.use_ssl', $vars->use_session_ssl === 'Y');
Rhymix\Framework\Config::set('session.use_ssl_cookies', $vars->use_cookies_ssl === 'Y');
// Save
if (!Rhymix\Framework\Config::save())
@ -824,8 +827,6 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y');
Rhymix\Framework\Config::set('session.delay', $vars->delay_session === 'Y');
Rhymix\Framework\Config::set('session.use_db', $vars->use_db_session === 'Y');
Rhymix\Framework\Config::set('session.use_keys', $vars->use_session_keys === 'Y');
Rhymix\Framework\Config::set('session.use_ssl', $vars->use_session_ssl === 'Y');
Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common');
Rhymix\Framework\Config::set('view.concat_scripts', $vars->concat_scripts ?: 'none');
Rhymix\Framework\Config::set('view.server_push', $vars->use_server_push === 'Y');

View file

@ -450,6 +450,11 @@ class adminAdminView extends admin
Context::set('admin_denied_ip', implode(PHP_EOL, $denied_ip));
Context::set('remote_addr', RX_CLIENT_IP);
// Session and cookie security settings
Context::set('use_session_keys', Rhymix\Framework\Config::get('session.use_keys'));
Context::set('use_session_ssl', Rhymix\Framework\Config::get('session.use_ssl'));
Context::set('use_cookies_ssl', Rhymix\Framework\Config::get('session.use_ssl_cookies'));
$this->setTemplateFile('config_security');
}
@ -538,8 +543,6 @@ class adminAdminView extends admin
Context::set('mobile_viewport', config('mobile.viewport') ?: 'width=device-width, initial-scale=1.0, user-scalable=yes');
Context::set('use_ssl', Rhymix\Framework\Config::get('url.ssl'));
Context::set('delay_session', Rhymix\Framework\Config::get('session.delay'));
Context::set('use_session_keys', Rhymix\Framework\Config::get('session.use_keys'));
Context::set('use_session_ssl', Rhymix\Framework\Config::get('session.use_ssl'));
Context::set('use_db_session', Rhymix\Framework\Config::get('session.use_db'));
Context::set('minify_scripts', Rhymix\Framework\Config::get('view.minify_scripts'));
Context::set('concat_scripts', Rhymix\Framework\Config::get('view.concat_scripts'));
@ -779,6 +782,7 @@ class adminAdminView extends admin
$info['session.use_db'] = config('session.use_db') ? 'true' : 'false';
$info['session.use_keys'] = config('session.use_keys') ? 'true' : 'false';
$info['session.use_ssl'] = config('session.use_ssl') ? 'true' : 'false';
$info['session.use_ssl_cookies'] = config('session.use_ssl_cookies') ? 'true' : 'false';
$info['view.concat_scripts'] = config('view.concat_scripts');
$info['view.minify_scripts'] = config('view.minify_scripts');
$info['use_rewrite'] = config('use_rewrite') ? 'true' : 'false';

View file

@ -162,7 +162,9 @@ $lang->about_delay_session = 'To improve performance when using a caching proxy
$lang->use_session_keys = 'Use session security keys';
$lang->about_use_session_keys = 'Use additional security keys to guard against session theft. This setting is highly recommended if you don\'t use SSL-only sessions.<br>This setting may cause some users to become logged out.';
$lang->use_session_ssl = 'Use SSL-only session';
$lang->about_use_session_ssl = 'Prevent the session from being used on non-SSL pages.<br>This helps improve security if your site always uses SSL and your server is configured to redirect all non-SSL pages to SSL.';
$lang->about_use_session_ssl = 'Force the session to be SSL-only.<br>This helps improve security if your site always uses SSL.';
$lang->use_cookies_ssl = 'Use SSL-only cookies';
$lang->about_use_cookies_ssl = 'Force all cookies to be SSL-only.';
$lang->use_object_cache = 'Use Cache';
$lang->cache_default_ttl = 'Cache default TTL';
$lang->cache_host = 'Host';

View file

@ -163,7 +163,9 @@ $lang->about_delay_session = 'Varnish 등의 프록시 캐싱 서버 사용시
$lang->use_session_keys = '세션 보안키 사용';
$lang->about_use_session_keys = '세션 탈취를 방지하기 위한 보안키를 사용합니다. SSL 전용 세션을 사용하지 않을 경우 반드시 보안키를 사용하시기를 권장합니다.<br>사용자 환경에 따라 로그인이 풀리는 문제가 발생할 수 있습니다.';
$lang->use_session_ssl = 'SSL 전용 세션 사용';
$lang->about_use_session_ssl = '세션을 SSL 전용으로 지정하여 SSL이 아닌 페이지에서 사용할 수 없도록 합니다.<br>SSL을 항상 사용하고, SSL이 아닌 페이지 방문시 자동으로 SSL 페이지로 리다이렉트되도록 서버가 설정되어 있는 경우<br>이 옵션을 사용하면 보안이 향상됩니다. (애드온 등을 사용하여 리다이렉트하는 경우 제외)';
$lang->about_use_session_ssl = '세션을 SSL 전용으로 지정하여 SSL이 아닌 페이지에서는 사용할 수 없도록 합니다.<br>SSL을 항상 사용하도록 설정되어 있는 경우에만 활성화됩니다.';
$lang->use_cookies_ssl = 'SSL 전용 쿠키 사용';
$lang->about_use_cookies_ssl = '세션뿐 아니라 모든 쿠키를 SSL 전용으로 지정합니다.<br>SSL을 항상 사용하도록 설정되어 있는 경우에만 활성화됩니다.';
$lang->use_object_cache = '캐시 사용';
$lang->cache_default_ttl = '캐시 기본 TTL';
$lang->cache_host = '호스트';

View file

@ -1,5 +1,10 @@
<load target="css/admin.bootstrap.css" />
<load target="css/admin.iefix.css" />
<load target="css/admin.css" />
<load target="js/admin.js" />
<load target="js/jquery.tmpl.js" />
<load target="js/jquery.jstree.js" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=2, user-scalable=yes" />
<script>
var admin_menu_srl = "{$admin_menu_srl}";
xe.cmd_find = "{$lang->cmd_find}";

View file

@ -105,24 +105,6 @@
<p class="x_help-block">{$lang->about_delay_session}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_session_keys}</label>
<div class="x_controls">
<label for="use_session_keys_y" class="x_inline"><input type="radio" name="use_session_keys" id="use_session_keys_y" value="Y" checked="checked"|cond="$use_session_keys !== false" /> {$lang->cmd_yes}</label>
<label for="use_session_keys_n" class="x_inline"><input type="radio" name="use_session_keys" id="use_session_keys_n" value="N" checked="checked"|cond="$use_session_keys === false" /> {$lang->cmd_no}</label>
<br />
<p class="x_help-block">{$lang->about_use_session_keys}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_session_ssl}</label>
<div class="x_controls">
<label for="use_session_ssl_y" class="x_inline"><input type="radio" name="use_session_ssl" id="use_session_ssl_y" value="Y" checked="checked"|cond="$use_session_ssl && $use_ssl === 'always'" disabled="disabled"|cond="$use_ssl !== 'always'" /> {$lang->cmd_yes}</label>
<label for="use_session_ssl_n" class="x_inline"><input type="radio" name="use_session_ssl" id="use_session_ssl_n" value="N" checked="checked"|cond="!$use_session_ssl || $use_ssl !== 'always'" disabled="disabled"|cond="$use_ssl !== 'always'" /> {$lang->cmd_no}</label>
<br />
<p class="x_help-block">{$lang->about_use_session_ssl}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->thumbnail_target}</label>
<div class="x_controls">

View file

@ -39,6 +39,33 @@
<p class="x_help-block">{$lang->about_admin_ip_deny}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_session_keys}</label>
<div class="x_controls">
<label for="use_session_keys_y" class="x_inline"><input type="radio" name="use_session_keys" id="use_session_keys_y" value="Y" checked="checked"|cond="$use_session_keys !== false" /> {$lang->cmd_yes}</label>
<label for="use_session_keys_n" class="x_inline"><input type="radio" name="use_session_keys" id="use_session_keys_n" value="N" checked="checked"|cond="$use_session_keys === false" /> {$lang->cmd_no}</label>
<br />
<p class="x_help-block">{$lang->about_use_session_keys}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_session_ssl}</label>
<div class="x_controls">
<label for="use_session_ssl_y" class="x_inline"><input type="radio" name="use_session_ssl" id="use_session_ssl_y" value="Y" checked="checked"|cond="$use_session_ssl && $site_module_info->security === 'always'" disabled="disabled"|cond="$site_module_info->security !== 'always'" /> {$lang->cmd_yes}</label>
<label for="use_session_ssl_n" class="x_inline"><input type="radio" name="use_session_ssl" id="use_session_ssl_n" value="N" checked="checked"|cond="!$use_session_ssl || $site_module_info->security !== 'always'" disabled="disabled"|cond="$site_module_info->security !== 'always'" /> {$lang->cmd_no}</label>
<br />
<p class="x_help-block">{$lang->about_use_session_ssl}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->use_cookies_ssl}</label>
<div class="x_controls">
<label for="use_cookies_ssl_y" class="x_inline"><input type="radio" name="use_cookies_ssl" id="use_cookies_ssl_y" value="Y" checked="checked"|cond="$use_cookies_ssl && $site_module_info->security === 'always'" disabled="disabled"|cond="$site_module_info->security !== 'always'" /> {$lang->cmd_yes}</label>
<label for="use_cookies_ssl_n" class="x_inline"><input type="radio" name="use_cookies_ssl" id="use_cookies_ssl_n" value="N" checked="checked"|cond="!$use_cookies_ssl || $site_module_info->security !== 'always'" disabled="disabled"|cond="$site_module_info->security !== 'always'" /> {$lang->cmd_no}</label>
<br />
<p class="x_help-block">{$lang->about_use_cookies_ssl}</p>
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>

View file

@ -1,3 +1,9 @@
<load target="css/admin.bootstrap.css" />
<load target="css/admin.iefix.css" />
<load target="css/admin.css" />
<load target="js/admin.js" />
<load target="js/jquery.tmpl.js" />
<load target="js/jquery.jstree.js" />
<div class="x">
<div class="content" id="content">
{$content}

View file

@ -15,7 +15,11 @@
</h3>
<p class="time">{$comment->getRegdate('Y.m.d H:i')}</p>
</div>
<!--@if(!$comment->isAccessible())-->
<!--@if($comment->status == RX_STATUS_DELETED)-->
<div class="xe_content deleted">{$lang->msg_deleted_comment}</div>
<!--@elseif($comment->status == RX_STATUS_DELETED_BY_ADMIN)-->
<div class="xe_content deleted deleted_by_admin">{$lang->msg_admin_deleted_comment}</div>
<!--@elseif(!$comment->isAccessible())-->
<form action="./" method="get" class="xe_content" onsubmit="return procFilter(this, input_password)">
<p><label for="cpw_{$comment->comment_srl}">{$lang->msg_is_secret} {$lang->msg_input_password}</label></p>
<p><input type="password" name="password" id="cpw_{$comment->comment_srl}" class="iText" /><input type="submit" class="btn" value="{$lang->cmd_input}" /></p>
@ -25,14 +29,7 @@
<input type="hidden" name="comment_srl" value="{$comment->get('comment_srl')}" />
</form>
<!--@else-->
<!--@if($comment->status == 7)-->
{$lang->msg_deleted_comment}
<!--@elseif($comment->status == 8)-->
{$lang->msg_admin_deleted_comment}
<!--@end-->
<block cond="$comment->status < 7">
{$comment->getContent(false)}
</block>
{$comment->getContent(false)}
<!--@end-->
<div cond="$comment->hasUploadedFiles()" class="fileList">
<button type="button" class="toggleFile" onclick="jQuery(this).next('ul.files').toggle();">{$lang->uploaded_file} [<strong>{$comment->get('uploaded_count')}</strong>]</button>

View file

@ -15,7 +15,11 @@
</h3>
<p class="time">{$comment->getRegdate('Y.m.d H:i')}</p>
</div>
<!--@if(!$comment->isAccessible())-->
<!--@if($comment->status == RX_STATUS_DELETED)-->
<div class="xe_content deleted">{$lang->msg_deleted_comment}</div>
<!--@elseif($comment->status == RX_STATUS_DELETED_BY_ADMIN)-->
<div class="xe_content deleted deleted_by_admin">{$lang->msg_admin_deleted_comment}</div>
<!--@elseif(!$comment->isAccessible())-->
<form action="./" method="get" class="xe_content secretForm" onsubmit="return procFilter(this, input_password)">
<p><label for="cpw_{$comment->comment_srl}">{$lang->msg_is_secret} {$lang->msg_input_password}</label></p>
<p><input type="password" name="password" id="cpw_{$comment->comment_srl}" class="iText" /><input type="submit" class="btn" value="{$lang->cmd_input}" /></p>
@ -25,7 +29,7 @@
<input type="hidden" name="comment_srl" value="{$comment->get('comment_srl')}" />
</form>
<!--@else-->
{$comment->getContent(false)}
{$comment->getContent(false)}
<!--@end-->
<div cond="$comment->hasUploadedFiles()" class="fileList">
<button type="button" class="toggleFile" onclick="jQuery(this).next('ul.files').toggle();"><i class="xi-diskette"></i> {$lang->uploaded_file} [<strong>{$comment->get('uploaded_count')}</strong>]</button>

View file

@ -15,7 +15,6 @@ input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Background */
.rp li li,
.rp .answer,
.rp .btn,
/* Body */
.bd{background:#f8f8f8;padding:1px 0}
.co{margin:10px;line-height:1.4;font-size:14px;color:#333}
@ -85,7 +84,6 @@ input[type=radio]{width:13px;height:13px;margin:0;padding:0}
.rp li li li li{padding-left:55px;background-position:40px -145px}
.rp li li li li li{padding-left:70px;background-position:55px -145px}
.rp li li li li li li{padding-left:85px;background-position:70px -145px}
.rp .btn{display:inline-block;width:15px;height:15px;overflow:hidden;vertical-align:middle;text-indent:15px}
.rp .btn.ed{background-position:0 -32px}
.rp .btn.de{background-position:-15px -32px}
.rp .btn.re{background-position:-30px -32px}

View file

@ -233,49 +233,6 @@
.xc .pagination ul>li:last-child>a,
.xc .pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
.xc .pagination-centered{text-align:center}
/* Button */
.xc .btn{font-size:12px;font-family:inherit;display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;line-height:20px;height:auto;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;border:1px solid #cccccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)}
.xc .btn:hover,
.xc .btn:focus,
.xc .btn:active,
.xc .btn.active,
.xc .btn.disabled,
.xc .btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9}
.xc .btn:active,
.xc .btn.active{background-color:#cccccc \9}
.xc .btn:first-child{*margin-left:0}
.xc .btn:hover,
.xc .btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear}
.xc .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
.xc .btn.active,
.xc .btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}
.xc .btn.disabled,
.xc .btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
.xc .btn-inverse.active{color:rgba(255, 255, 255, 0.75)}
.xc .btn-inverse{color:#ffffff!important;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;*background-color:#222222;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}
.xc .btn-inverse:hover,
.xc .btn-inverse:focus,
.xc .btn-inverse:active,
.xc .btn-inverse.active,
.xc .btn-inverse.disabled,
.xc .btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515}
.xc .btn-inverse:active,
.xc .btn-inverse.active{background-color:#080808 \9}
.xc button.btn,
.xc input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}
.xc button.btn::-moz-focus-inner,
.xc input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}
.xc .btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}
.xc .btn-group:first-child{*margin-left:0}
.xc .btn-group+.btn-group{margin-left:5px}
.xc .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.xc .btn-group>.btn+.btn{margin-left:-1px}
.xc .btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}
.xc .btn-group>.btn:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
.xc .btn-group>.btn:hover,
.xc .btn-group>.btn:focus,
.xc .btn-group>.btn:active,
.xc .btn-group>.btn.active{z-index:2}
/* Communication Module Customize */
.xc,
.xc input,

View file

@ -81,7 +81,7 @@ class documentModel extends document
$output = $this->getDocumentExtraVarsFromDB($document_srls);
foreach($output->data as $key => $val)
{
if(!$val->value)
if(strval($val->value) === '')
{
continue;
}

View file

@ -7,7 +7,7 @@
<div class="xefu-dropzone">
<span class="xefu-btn fileinput-button xefu-act-selectfile">
<span><i class="xi-icon xi-file-upload"></i> {$lang->edit->upload_file}</span>
<input id="xe-fileupload" type="file" class="fileupload-processing " value="{$lang->edit->upload_file}" name="Filedata" data-auto-upload="true" data-editor-sequence="{$editor_sequence}" multiple />
<input id="xe-fileupload" type="file" class="fileupload-processing " name="Filedata" data-auto-upload="true" data-editor-sequence="{$editor_sequence}" multiple />
</span>
<p class="xefu-dropzone-message" cond="!$m">{$lang->ckeditor_about_file_drop_area}</p>

View file

@ -372,13 +372,14 @@ class importerAdminController extends importer
FileHandler::removeFile($target_file);
if(!$xmlObj) continue;
// List Objects
$obj = null;
$obj = new stdClass();
$obj->member_srl = getNextSequence();
$obj->user_id = base64_decode($xmlObj->member->user_id->body);
$obj->password = base64_decode($xmlObj->member->password->body);
$obj->user_name = base64_decode($xmlObj->member->user_name->body);
$obj->nick_name = base64_decode($xmlObj->member->nick_name->body);
if(!$obj->user_name) $obj->user_name = $obj->nick_name;
$obj->email = base64_decode($xmlObj->member->email->body);
$obj->email_address = base64_decode($xmlObj->member->email->body);
$obj->homepage = base64_decode($xmlObj->member->homepage->body);
$obj->blog = base64_decode($xmlObj->member->blog->body);
$obj->birthday = substr(base64_decode($xmlObj->member->birthday->body),0,8);
@ -401,8 +402,20 @@ class importerAdminController extends importer
}
// Create url for homepage and blog
if($obj->homepage && strncasecmp('http://', $obj->homepage, 7) !== 0 && strncasecmp('https://', $obj->homepage, 8) !== 0) $obj->homepage = 'http://'.$obj->homepage;
// email address column
$obj->email_address = $obj->email;
// Check user ID
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = preg_replace('/[^a-z0-9_-]+/i', '', $obj->user_id);
}
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = 't' . $obj->member_srl;
}
// Check email address
if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $obj->email_address))
{
$obj->email_address = $obj->user_id . '@example.com';
}
list($obj->email_id, $obj->email_host) = explode('@', $obj->email);
// Set the mailing option
if($obj->allow_mailing!='Y') $obj->allow_mailing = 'N';
@ -411,18 +424,37 @@ class importerAdminController extends importer
if(!in_array($obj->allow_message, array('Y','N','F'))) $obj->allow_message= 'Y';
// Get member-join date if the last login time is not found
if(!$obj->last_login) $obj->last_login = $obj->regdate;
// Get a member_srl
$obj->member_srl = getNextSequence();
// Set the list order
$obj->list_order = -1 * $obj->member_srl;
// List extra vars
$extra_vars = $obj->extra_vars;
unset($obj->extra_vars);
$obj->extra_vars = serialize($extra_vars);
// Check if the same nickname is existing
$nick_args = new stdClass;
$nick_args->nick_name = $obj->nick_name;
$nick_output = executeQuery('member.getMemberSrl', $nick_args);
if(!$nick_output->toBool()) $obj->nick_name .= '_'.$obj->member_srl;
// Check if the same user ID exists
$args = new stdClass;
$args->user_id = $obj->user_id;
$output = executeQuery('member.getMemberSrl', $args);
if(!$output->toBool() || $output->data)
{
$obj->user_id .= '_'.$obj->member_srl;
}
// Check if the same nickname exists
$args = new stdClass;
$args->nick_name = $obj->nick_name;
$output = executeQuery('member.getMemberSrl', $args);
if(!$output->toBool() || $output->data)
{
$obj->user_id .= '_'.$obj->member_srl;
}
// Check if the same email address exists
$args = new stdClass;
$args->email_address = $obj->email_address;
$output = executeQuery('member.getMemberSrl', $args);
if(!$output->toBool() || $output->data)
{
$obj->email_address = $obj->user_id . '@example.com';
}
// Add a member
$output = executeQuery('member.insertMember', $obj);
@ -433,7 +465,7 @@ class importerAdminController extends importer
$oMail->setTitle("Password update for your " . getFullSiteUrl() . " account");
$webmaster_name = $member_config->webmaster_name?$member_config->webmaster_name:'Webmaster';
$oMail->setContent("Dear $obj->user_name, <br /><br />
We recently migrated our phpBB forum to Rhymix. Since you password was encrypted we could not migrate it too, so please reset it by following this link:
We recently migrated our site to Rhymix. Since you password was encrypted we could not migrate it too, so please reset it by following this link:
<a href='" . getFullSiteUrl() . "/?act=dispMemberFindAccount' >" . getFullSiteUrl() . "?act=dispMemberFindAccount</a>. You need to enter you email address and hit the 'Find account' button. You will then receive an email with a new, generated password that you can change after login. <br /><br />
Thank you for your understanding,<br />
@ -751,6 +783,20 @@ class importerAdminController extends importer
$obj->commentStatus = base64_decode($xmlDoc->post->allow_comment->body)!='N'?'ALLOW':'DENY';
$obj->allow_trackback = base64_decode($xmlDoc->post->allow_trackback->body)!='N'?'Y':'N';
$obj->notify_message = base64_decode($xmlDoc->post->is_notice->body);
// Check user ID
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = preg_replace('/[^a-z0-9_-]+/i', '', $obj->user_id);
}
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = 't' . $obj->member_srl;
}
// Check email address
if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $obj->email_address))
{
$obj->email_address = $obj->user_id . '@example.com';
}
// Change content information (attachment)
if(count($files))
{
@ -942,6 +988,20 @@ class importerAdminController extends importer
$obj->ipaddress = base64_decode($xmlDoc->comment->ipaddress->body);
$obj->status = base64_decode($xmlDoc->comment->status->body)==''?'1':base64_decode($xmlDoc->comment->status->body);
$obj->list_order = $obj->comment_srl*-1;
// Check user ID
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = preg_replace('/[^a-z0-9_-]+/i', '', $obj->user_id);
}
if(!preg_match('/^[a-z]+[\w-]*[a-z0-9_]+$/i', $obj->user_id))
{
$obj->user_id = 't' . $obj->member_srl;
}
// Check email address
if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $obj->email_address))
{
$obj->email_address = $obj->user_id . '@example.com';
}
// Change content information (attachment)
if(count($files))
{

View file

@ -138,6 +138,7 @@ $lang->msg_confirm_account_comment = 'Click on the following link to complete yo
$lang->msg_auth_mail_sent = 'The activation mail has been sent to %s. Please check your mail.';
$lang->msg_confirm_mail_sent = 'We have just sent the activation email to %s. Please check your mail.';
$lang->msg_invalid_auth_key = 'This is an invalid request of verification.<br />Please retry finding account info or contact the administrator.';
$lang->msg_expired_auth_key = 'Your verification link has expired. Please request a new verification email.';
$lang->msg_success_authed = 'Please use the password you received in the email to log in, and change it to a password of your choice as soon as possible.';
$lang->msg_success_confirmed = 'Your account has been activated. You may log in now.';
$lang->msg_new_member = 'Add Member';

View file

@ -146,6 +146,7 @@ $lang->msg_confirm_mail_sent = '%s 메일로 가입 인증 메일이 발송되
$lang->msg_change_mail_sent = '%s 메일로 이메일 변경 인증 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_invalid_modify_email_auth_key = '잘못된 이메일 변경 요청입니다.<br />이메일 변경요청을 다시 하거나 사이트 관리자에게 문의해주세요.';
$lang->msg_invalid_auth_key = '잘못된 계정 인증 요청입니다.<br />아이디/비밀번호 찾기를 다시 하거나 사이트 관리자에게 계정 정보를 문의해주세요.';
$lang->msg_expired_auth_key = '인증 유효기간이 지났습니다. 인증을 다시 요청해 주십시오.';
$lang->msg_success_authed = '임시 비밀번호로 변경되었습니다.<br />로그인 후 반드시 다른 비밀번호로 변경하시기 바랍니다.';
$lang->msg_success_confirmed = '가입 인증이 완료되었습니다. 이제 로그인하실 수 있습니다.';
$lang->msg_new_member = '회원 추가';

View file

@ -914,7 +914,7 @@ class memberController extends member
{
if(isset($args->{$val}))
{
$args->{$val} = preg_replace('/[\pZ\pC]+/u', '', $args->{$val});
$args->{$val} = preg_replace('/[\pZ\pC]+/u', '', html_entity_decode($args->{$val}));
}
}
@ -1575,7 +1575,7 @@ class memberController extends member
if(ztime($output->data->regdate) < time() - (86400 * 3))
{
executeQuery('member.deleteAuthMail', $args);
return $this->stop('msg_invalid_auth_key');
return $this->stop('msg_expired_auth_key');
}
// Back up the value of $output->data->is_register

View file

@ -192,7 +192,7 @@ class memberView extends member
function dispMemberSignUpForm()
{
//setcookie for redirect url in case of going to member sign up
setcookie("XE_REDIRECT_URL", $_SERVER['HTTP_REFERER']);
setcookie("XE_REDIRECT_URL", $_SERVER['HTTP_REFERER'], 0, '/', null, !!config('session.use_ssl_cookies'));
$member_config = $this->member_config;

View file

@ -233,49 +233,6 @@
.xm .pagination ul>li:last-child>a,
.xm .pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
.xm .pagination-centered{text-align:center}
/* Button */
.xm .btn{font-size:12px;font-family:inherit;display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;line-height:20px;height:auto;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;border:1px solid #cccccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)}
.xm .btn:hover,
.xm .btn:focus,
.xm .btn:active,
.xm .btn.active,
.xm .btn.disabled,
.xm .btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9}
.xm .btn:active,
.xm .btn.active{background-color:#cccccc \9}
.xm .btn:first-child{*margin-left:0}
.xm .btn:hover,
.xm .btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear}
.xm .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
.xm .btn.active,
.xm .btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}
.xm .btn.disabled,
.xm .btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
.xm .btn-inverse.active{color:rgba(255, 255, 255, 0.75)}
.xm .btn-inverse{color:#ffffff!important;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;*background-color:#222222;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}
.xm .btn-inverse:hover,
.xm .btn-inverse:focus,
.xm .btn-inverse:active,
.xm .btn-inverse.active,
.xm .btn-inverse.disabled,
.xm .btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515}
.xm .btn-inverse:active,
.xm .btn-inverse.active{background-color:#080808 \9}
.xm button.btn,
.xm input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}
.xm button.btn::-moz-focus-inner,
.xm input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}
.xm .btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}
.xm .btn-group:first-child{*margin-left:0}
.xm .btn-group+.btn-group{margin-left:5px}
.xm .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.xm .btn-group>.btn+.btn{margin-left:-1px}
.xm .btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}
.xm .btn-group>.btn:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
.xm .btn-group>.btn:hover,
.xm .btn-group>.btn:focus,
.xm .btn-group>.btn:active,
.xm .btn-group>.btn.active{z-index:2}
/* Member module customize */
.xm,
.xm input,

View file

@ -204,17 +204,32 @@ class pageView extends page
FileHandler::writeFile($cache_file, $script);
}
// Import Context and lang as local variables.
$__Context = &$GLOBALS['__Context__'];
$__Context->tpl_path = $filepath;
global $lang;
// Start the output buffer.
$__ob_level_before_fetch = ob_get_level();
ob_start();
include($cache_file);
// Include the compiled template.
include $cache_file;
// Fetch contents of the output buffer until the buffer level is the same as before.
$contents = '';
while (ob_get_level() - $level > 0) {
$contents .= ob_get_contents();
ob_end_clean();
while (ob_get_level() > $__ob_level_before_fetch)
{
$contents .= ob_get_clean();
}
// Insert template path comment tag.
if(Rhymix\Framework\Debug::isEnabledForCurrentUser() && Context::getResponseMethod() === 'HTML' && !starts_with('<!DOCTYPE', $contents) && !starts_with('<?xml', $contents))
{
$sign = PHP_EOL . '<!-- Template %s : ' . $target_file . ' -->' . PHP_EOL;
$contents = sprintf($sign, 'start') . $contents . sprintf($sign, 'end');
}
return $contents;
}

View file

@ -53,7 +53,6 @@ class spamfilterController extends spamfilter
{
$text = $obj->title . ' ' . $obj->content . ' ' . $obj->nick_name . ' ' . $obj->homepage . ' ' . $obj->tags;
}
$text = utf8_trim(utf8_normalize_spaces(htmlspecialchars_decode(strip_tags($text))));
$output = $oFilterModel->isDeniedWord($text);
if(!$output->toBool())
{
@ -99,7 +98,6 @@ class spamfilterController extends spamfilter
{
$text = $obj->content . ' ' . $obj->nick_name . ' ' . $obj->homepage;
}
$text = utf8_trim(utf8_normalize_spaces(htmlspecialchars_decode(strip_tags($text))));
$output = $oFilterModel->isDeniedWord($text);
if(!$output->toBool()) return $output;
// If the specified time check is not modified

View file

@ -80,6 +80,7 @@ class spamfilterModel extends spamfilter
$word_list = $this->getDeniedWordList();
if(!count($word_list)) return new BaseObject();
$text = utf8_trim(utf8_normalize_spaces(htmlspecialchars_decode(strip_tags($text, '<a><img>'))));
foreach ($word_list as $word_item)
{
$word = $word_item->word;