Preserve existing member extra_vars when updating

This commit is contained in:
Kijin Sung 2021-04-12 21:19:21 +09:00
parent 62d9befb0d
commit 85a337f0d3
3 changed files with 27 additions and 6 deletions

View file

@ -75,10 +75,23 @@ class memberAdminController extends member
}
}
// Remove some unnecessary variables from all the vars
// Get existing extra vars
if($args->member_srl)
{
$output = executeQuery('member.getMemberInfoByMemberSrl', ['member_srl' => $args->member_srl], ['extra_vars']);
$extra_vars = ($output->data && $output->data->extra_vars) ? unserialize($output->data->extra_vars) : new stdClass;
foreach($this->nouse_extra_vars as $key)
{
unset($extra_vars->$key);
}
}
else
{
$extra_vars = new stdClass;
}
// Get list of extra vars
$all_args = Context::getRequestVars();
$extra_vars = new stdClass;
foreach($config->signupForm as $formInfo)
{
if (!$formInfo->isDefaultForm && isset($all_args->{$formInfo->name}))

View file

@ -11,6 +11,7 @@ class member extends ModuleObject
* Extra vars for admin purposes
*/
public $admin_extra_vars = ['refused_reason', 'limited_reason'];
public $nouse_extra_vars = ['error_return_url', 'success_return_url', '_rx_ajax_compat', '_rx_csrf_token', 'ruleset', 'captchaType', 'use_editor', 'use_html'];
/**
* constructor

View file

@ -1157,9 +1157,16 @@ class memberController extends member
// Fill in member_srl
$args->member_srl = $logged_info->member_srl;
// Get list of extra vars
// Get existing extra vars
$output = executeQuery('member.getMemberInfoByMemberSrl', ['member_srl' => $args->member_srl], ['extra_vars']);
$extra_vars = ($output->data && $output->data->extra_vars) ? unserialize($output->data->extra_vars) : new stdClass;
foreach($this->nouse_extra_vars as $key)
{
unset($extra_vars->$key);
}
// Update extra vars
$all_args = Context::getRequestVars();
$extra_vars = new stdClass;
foreach($config->signupForm as $formInfo)
{
if (!$formInfo->isDefaultForm && isset($all_args->{$formInfo->name}))
@ -1169,9 +1176,9 @@ class memberController extends member
}
foreach($this->admin_extra_vars as $key)
{
if (isset($logged_info->{$key}))
if (isset($all_args->{$key}))
{
$extra_vars->{$key} = $logged_info->{$key};
$extra_vars->{$key} = escape(utf8_clean($all_args->{$key}));
}
}
$args->extra_vars = serialize($extra_vars);