Add option to allow spaces in nick_name

This commit is contained in:
Kijin Sung 2025-12-17 16:59:27 +09:00
parent f3ff338711
commit 7bbb03d835
5 changed files with 50 additions and 19 deletions

View file

@ -152,6 +152,7 @@ $lang->cmd_modify_nickname_allow = 'Allow Nickname Change';
$lang->cmd_modify_nickname_log = 'Nickname Change Log'; $lang->cmd_modify_nickname_log = 'Nickname Change Log';
$lang->cmd_nickname_symbols = 'Allow Symbols in Nickname'; $lang->cmd_nickname_symbols = 'Allow Symbols in Nickname';
$lang->cmd_nickname_symbols_list = 'Only Allow:'; $lang->cmd_nickname_symbols_list = 'Only Allow:';
$lang->cmd_nickname_allow_spaces = 'Allow Spaces';
$lang->cmd_member_profile_view = 'Show member profile picture'; $lang->cmd_member_profile_view = 'Show member profile picture';
$lang->cmd_allow_duplicate_nickname = 'Allow Duplicate Nicknames'; $lang->cmd_allow_duplicate_nickname = 'Allow Duplicate Nicknames';
$lang->about_allow_duplicate_nickname = 'Allow more than one member to use the same nickname.'; $lang->about_allow_duplicate_nickname = 'Allow more than one member to use the same nickname.';

View file

@ -154,6 +154,7 @@ $lang->cmd_modify_nickname_allow = '닉네임 변경 허용';
$lang->cmd_modify_nickname_log = '닉네임 변경 기록'; $lang->cmd_modify_nickname_log = '닉네임 변경 기록';
$lang->cmd_nickname_symbols = '닉네임에 특수문자 허용'; $lang->cmd_nickname_symbols = '닉네임에 특수문자 허용';
$lang->cmd_nickname_symbols_list = '다음의 문자만 허용:'; $lang->cmd_nickname_symbols_list = '다음의 문자만 허용:';
$lang->cmd_nickname_allow_spaces = '띄어쓰기 허용';
$lang->cmd_member_profile_view = '회원 프로필사진 보이기'; $lang->cmd_member_profile_view = '회원 프로필사진 보이기';
$lang->cmd_allow_duplicate_nickname = '닉네임 중복 허용'; $lang->cmd_allow_duplicate_nickname = '닉네임 중복 허용';
$lang->about_allow_duplicate_nickname = '여러 회원이 동일한 닉네임을 사용하는 것을 허용합니다. 주의: 잘못 사용할 경우 혼란이 발생할 수 있습니다.'; $lang->about_allow_duplicate_nickname = '여러 회원이 동일한 닉네임을 사용하는 것을 허용합니다. 주의: 잘못 사용할 경우 혼란이 발생할 수 있습니다.';

View file

@ -127,18 +127,26 @@ class MemberAdminController extends Member
} }
// remove whitespace // remove whitespace
foreach(['user_id', 'nick_name', 'email_address'] as $val) foreach (['user_id', 'email_address'] as $val)
{ {
if (isset($args->{$val})) if (isset($args->{$val}))
{ {
$args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val}))); $args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val})));
} }
} }
foreach(['user_name'] as $val) if (isset($args->user_name))
{ {
if(isset($args->{$val})) $args->user_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->user_name)));
}
if (isset($args->nick_name))
{ {
$args->{$val} = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->{$val}))); if (isset($config->nickname_spaces) && $config->nickname_spaces === 'Y')
{
$args->nick_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->nick_name)));
}
else
{
$args->nick_name = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->nick_name)));
} }
} }
@ -256,6 +264,7 @@ class MemberAdminController extends Member
'update_nickname_log', 'update_nickname_log',
'nickname_symbols', 'nickname_symbols',
'nickname_symbols_allowed_list', 'nickname_symbols_allowed_list',
'nickname_spaces',
'allow_duplicate_nickname', 'allow_duplicate_nickname',
'member_profile_view' 'member_profile_view'
); );
@ -347,6 +356,7 @@ class MemberAdminController extends Member
$args->nickname_symbols = 'Y'; $args->nickname_symbols = 'Y';
} }
$args->nickname_symbols_allowed_list = utf8_trim($args->nickname_symbols_allowed_list); $args->nickname_symbols_allowed_list = utf8_trim($args->nickname_symbols_allowed_list);
$args->nickname_spaces = (isset($args->nickname_spaces) && $args->nickname_spaces === 'Y') ? 'Y' : 'N';
$oModuleController = getController('module'); $oModuleController = getController('module');
$output = $oModuleController->updateModuleConfig('member', $args); $output = $oModuleController->updateModuleConfig('member', $args);

View file

@ -796,25 +796,34 @@ class MemberController extends Member
} }
// remove whitespace // remove whitespace
foreach(['user_id', 'nick_name', 'email_address'] as $val) foreach (['user_id', 'email_address'] as $val)
{ {
if (isset($args->{$val})) if (isset($args->{$val}))
{ {
$args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val}))); $args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val})));
} }
} }
foreach(['user_name'] as $val) if (isset($args->user_name))
{ {
if(isset($args->{$val})) $args->user_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->user_name)));
{
$args->{$val} = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->{$val})));
} }
if (isset($args->nick_name))
{
if (isset($config->nickname_spaces) && $config->nickname_spaces === 'Y')
{
$args->nick_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->nick_name)));
}
else
{
$args->nick_name = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->nick_name)));
}
} }
// Check symbols in nickname // Check symbols in nickname
if($config->nickname_symbols === 'N') if($config->nickname_symbols === 'N')
{ {
if(preg_match('/[^\pL\d]/u', $args->nick_name, $matches)) if(preg_match('/[^\pL\d\s]/u', $args->nick_name, $matches))
{ {
throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0]))); throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0])));
} }
@ -822,7 +831,7 @@ class MemberController extends Member
elseif($config->nickname_symbols === 'LIST') elseif($config->nickname_symbols === 'LIST')
{ {
$list = preg_quote($config->nickname_symbols_allowed_list, '/'); $list = preg_quote($config->nickname_symbols_allowed_list, '/');
if(preg_match('/[^\pL\d' . $list . ']/u', $args->nick_name, $matches)) if(preg_match('/[^\pL\d\s' . $list . ']/u', $args->nick_name, $matches))
{ {
throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0]))); throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0])));
} }
@ -1098,19 +1107,28 @@ class MemberController extends Member
$args->extra_vars = serialize($extra_vars); $args->extra_vars = serialize($extra_vars);
// remove whitespace // remove whitespace
foreach(['user_id', 'nick_name', 'email_address'] as $val) foreach (['user_id', 'email_address'] as $val)
{ {
if (isset($args->{$val})) if (isset($args->{$val}))
{ {
$args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val}))); $args->{$val} = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->{$val})));
} }
} }
foreach(['user_name'] as $val) if (isset($args->user_name))
{ {
if(isset($args->{$val})) $args->user_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->user_name)));
{
$args->{$val} = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->{$val})));
} }
if (isset($args->nick_name))
{
if (isset($config->nickname_spaces) && $config->nickname_spaces === 'Y')
{
$args->nick_name = utf8_normalize_spaces(utf8_clean(html_entity_decode($args->nick_name)));
}
else
{
$args->nick_name = preg_replace('/[\pZ\pC]+/u', '', utf8_clean(html_entity_decode($args->nick_name)));
}
} }
// Check if nickname change is allowed // Check if nickname change is allowed
@ -1134,7 +1152,7 @@ class MemberController extends Member
// Check symbols in nickname // Check symbols in nickname
if($config->nickname_symbols === 'N') if($config->nickname_symbols === 'N')
{ {
if(preg_match('/[^\pL\d]/u', $args->nick_name, $matches)) if(preg_match('/[^\pL\d\s]/u', $args->nick_name, $matches))
{ {
throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0]))); throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0])));
} }
@ -1142,7 +1160,7 @@ class MemberController extends Member
elseif($config->nickname_symbols === 'LIST') elseif($config->nickname_symbols === 'LIST')
{ {
$list = preg_quote($config->nickname_symbols_allowed_list, '/'); $list = preg_quote($config->nickname_symbols_allowed_list, '/');
if(preg_match('/[^\pL\d' . $list . ']/u', $args->nick_name, $matches)) if(preg_match('/[^\pL\d\s' . $list . ']/u', $args->nick_name, $matches))
{ {
throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0]))); throw new Rhymix\Framework\Exception(sprintf(lang('msg_invalid_symbol_in_nickname'), escape($matches[0])));
} }

View file

@ -83,6 +83,7 @@
<label class="x_inline" for="nickname_symbols_list"><input type="radio" name="nickname_symbols" id="nickname_symbols_list" value="LIST" checked="checked"|cond="$config->nickname_symbols == 'LIST'"/> {$lang->cmd_nickname_symbols_list}</label> <label class="x_inline" for="nickname_symbols_list"><input type="radio" name="nickname_symbols" id="nickname_symbols_list" value="LIST" checked="checked"|cond="$config->nickname_symbols == 'LIST'"/> {$lang->cmd_nickname_symbols_list}</label>
<input type="text" name="nickname_symbols_allowed_list" value="{$config->nickname_symbols_allowed_list ?: ''}" /> <input type="text" name="nickname_symbols_allowed_list" value="{$config->nickname_symbols_allowed_list ?: ''}" />
<p class="x_help-block">{$lang->about_nickname_symbols}</p> <p class="x_help-block">{$lang->about_nickname_symbols}</p>
<label for="nickname_spaces"><input type="checkbox" name="nickname_spaces" id="nickname_spaces" value="Y" checked="checked"|cond="$config->nickname_spaces == 'Y'" /> {$lang->cmd_nickname_allow_spaces}</label>
</div> </div>
</div> </div>
<div class="x_control-group" style="display:none"|cond="$config->allow_duplicate_nickname != 'Y'"> <div class="x_control-group" style="display:none"|cond="$config->allow_duplicate_nickname != 'Y'">