From 26a0ec66ff9a6a76428b3dba6b3e02b00ed6ad32 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 20 Jun 2023 23:47:40 +0900 Subject: [PATCH 1/2] Add status column to member table #1806 #1896 --- modules/member/member.admin.controller.php | 19 ++++-- modules/member/member.admin.model.php | 19 ++++-- modules/member/member.admin.view.php | 40 ------------- modules/member/member.class.php | 58 ++++++++++++++++++- modules/member/member.controller.php | 43 +++++++++----- modules/member/queries/getDeniedAndStatus.xml | 12 ++++ modules/member/queries/getMemberList.xml | 1 + .../queries/getMemberListWithinGroup.xml | 1 + modules/member/queries/insertMember.xml | 3 +- modules/member/queries/updateMember.xml | 11 ++-- .../member/queries/updateMemberDeniedInfo.xml | 3 +- .../member/queries/updateMemberPassword.xml | 2 +- modules/member/queries/updateMemberStatus.xml | 12 ++++ modules/member/schemas/member.xml | 49 ++++++++-------- modules/member/tpl/insert_member.html | 10 ++-- modules/member/tpl/member_list.html | 32 +++++----- 16 files changed, 196 insertions(+), 119 deletions(-) create mode 100644 modules/member/queries/getDeniedAndStatus.xml create mode 100644 modules/member/queries/updateMemberStatus.xml diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index c15b25ab6..2ad6c675f 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -29,9 +29,9 @@ class MemberAdminController extends Member throw new Rhymix\Framework\Exceptions\InvalidRequest; } - $args = Context::gets('member_srl','email_address','find_account_answer', 'allow_mailing','allow_message','denied','is_admin','description','group_srl_list','limit_date'); + $args = Context::gets('member_srl','email_address','find_account_answer', 'allow_mailing','allow_message','is_admin','denied','status','description','group_srl_list','limit_date'); $oMemberModel = getModel('member'); - $config = $oMemberModel->getMemberConfig (); + $config = $oMemberModel->getMemberConfig(); $getVars = array(); if($config->signupForm) { @@ -80,7 +80,7 @@ class MemberAdminController extends Member { $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) + foreach(self::NOUSE_EXTRA_VARS as $key) { unset($extra_vars->$key); } @@ -99,12 +99,22 @@ class MemberAdminController extends Member $extra_vars->{$formInfo->name} = $all_args->{$formInfo->name}; } } - foreach($this->admin_extra_vars as $key) + foreach(self::ADMIN_EXTRA_VARS as $key) { $extra_vars->{$key} = escape(utf8_clean($all_args->{$key} ?? '')); } $args->extra_vars = serialize($extra_vars); + // Normalize denied and status columns + if ($args->status === 'APPROVED') + { + $args->denied = 'N'; + } + else + { + $args->denied = 'Y'; + } + // Delete invalid or past limit dates #1334 if (!isset($args->limit_date)) { @@ -1030,6 +1040,7 @@ class MemberAdminController extends Member if($var->denied) { $args->denied = $var->denied; + $args->status = $var->denied === 'Y' ? 'DENIED' : 'APPROVED'; $output = executeQuery('member.updateMemberDeniedInfo', $args); if(!$output->toBool()) { diff --git a/modules/member/member.admin.model.php b/modules/member/member.admin.model.php index 262ce0ec2..1cbb0d0c9 100644 --- a/modules/member/member.admin.model.php +++ b/modules/member/member.admin.model.php @@ -42,17 +42,24 @@ class MemberAdminModel extends Member { // Search option $args = new stdClass(); - $args->is_admin = Context::get('is_admin')=='Y'?'Y':''; - $args->is_denied = Context::get('is_denied')=='Y'?'Y':''; + $args->is_admin = Context::get('is_admin') === 'Y' ? 'Y' : null; + $args->status = Context::get('is_denied') === 'Y' ? 'DENIED' : null; $args->selected_group_srl = Context::get('selected_group_srl'); $filter = Context::get('filter_type'); switch($filter) { - case 'super_admin' : $args->is_admin = 'Y';break; - case 'site_admin' : $args->member_srls = $this->getSiteAdminMemberSrls();break; - case 'enable' : $args->is_denied = 'N';break; - case 'disable' : $args->is_denied = 'Y';break; + case 'admin': + case 'super_admin': + $args->is_admin = 'Y'; break; + case 'approved': + case 'enable': + $args->status = 'APPROVED'; break; + case 'denied': + case 'disable': + $args->status = 'DENIED'; break; + case 'unauthed': + $args->status = 'UNAUTHED'; break; } $search_target = trim(Context::get('search_target') ?? ''); diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index aeccf14d2..1fa208f2a 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -117,29 +117,6 @@ class MemberAdminView extends Member } } - // Get list of new members who have not completed email auth - $check_list = array(); - foreach ($output->data as $member) - { - if ($member->denied !== 'N') - { - $check_list[$member->member_srl] = false; - } - } - if (count($check_list)) - { - $args2 = new stdClass; - $args2->member_srl = array_keys($check_list); - $output2 = executeQueryArray('member.getAuthMailType', $args2); - foreach ($output2->data as $item) - { - if ($item->is_register === 'Y') - { - $check_list[$item->member_srl] = true; - } - } - } - Context::set('total_count', $output->total_count); Context::set('total_page', $output->total_page); Context::set('page', $output->page); @@ -148,7 +125,6 @@ class MemberAdminView extends Member Context::set('sort_index', Context::get('sort_index')); Context::set('member_config', $oMemberModel->getMemberConfig()); Context::set('member_list', $output->data); - Context::set('new_member_check_list', $check_list); Context::set('usedIdentifiers', $usedIdentifiers); Context::set('page_navigation', $output->page_navigation); Context::set('profileImageConfig', $config->profile_image); @@ -488,22 +464,6 @@ class MemberAdminView extends Member $member_info->limit_date = ''; } - $member_unauthenticated = false; - if ($member_info->member_srl && $member_info->denied !== 'N') - { - $args2 = new stdClass; - $args2->member_srl = $member_info->member_srl; - $output2 = executeQueryArray('member.getAuthMailType', $args2); - foreach ($output2->data as $item) - { - if ($item->is_register === 'Y') - { - $member_unauthenticated = true; - } - } - } - Context::set('member_unauthenticated', $member_unauthenticated); - $this->setTemplateFile('insert_member'); } diff --git a/modules/member/member.class.php b/modules/member/member.class.php index b8f83e64a..ce317f5ce 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -8,10 +8,10 @@ class Member extends ModuleObject { /** - * Extra vars for admin purposes + * Constants */ - 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']; + public const ADMIN_EXTRA_VARS = ['refused_reason', 'limited_reason']; + public const NOUSE_EXTRA_VARS = ['error_return_url', 'success_return_url', '_rx_ajax_compat', '_rx_csrf_token', 'ruleset', 'captchaType', 'use_editor', 'use_html']; /** * constructor @@ -147,6 +147,10 @@ class Member extends ModuleObject if(!$oDB->isColumnExists("member", "last_login_ipaddress")) return true; if(!$oDB->isIndexExists("member","idx_last_login_ipaddress")) return true; + // Add column for status + if(!$oDB->isColumnExists("member", "status")) return true; + if(!$oDB->isIndexExists("member", "idx_status")) return true; + // Add column for list order if(!$oDB->isColumnExists("member", "list_order")) return true; if(!$oDB->isIndexExists("member","idx_list_order")) return true; @@ -168,6 +172,13 @@ class Member extends ModuleObject if(!$oDB->isColumnExists('member_devices', 'device_token_type')) return true; if(!$oDB->isColumnExists('member_devices', 'last_active_date')) return true; + // Update status column + $output = executeQuery('member.getDeniedAndStatus'); + if ($output->data->count) + { + return true; + } + // Check mid $config = ModuleModel::getModuleConfig('member'); if (empty($config->mid)) @@ -317,6 +328,16 @@ class Member extends ModuleObject $oDB->addIndex("member","idx_last_login_ipaddress", array("last_login_ipaddress")); } + // Add column for status + if(!$oDB->isColumnExists("member", "status")) + { + $oDB->addColumn("member", "status", "varchar", 20, 'APPROVED', true, 'denied'); + } + if(!$oDB->isIndexExists("member", "idx_status")) + { + $oDB->addIndex("member", "idx_status", array("status")); + } + // Add column for list order if(!$oDB->isColumnExists("member", "list_order")) { @@ -375,6 +396,37 @@ class Member extends ModuleObject $oDB->query("UPDATE member_devices SET last_active_date = regdate WHERE last_active_date = ''"); } + // Update status column + $output = executeQuery('member.getDeniedAndStatus'); + if ($output->data->count) + { + $oDB->begin(); + $result = $oDB->query("UPDATE `member` SET `status` = 'DENIED' WHERE `denied` = 'Y'"); + if ($result) + { + $result = $oDB->query("UPDATE `member` AS `m` " . + "JOIN `member_auth_mail` AS `a` ON `m`.`member_srl` = `a`.`member_srl` " . + "SET `m`.`status` = 'UNAUTHED' WHERE `m`.`status` = 'DENIED' " . + "AND `a`.`is_register` = 'Y'"); + if ($result) + { + $oDB->commit(); + } + else + { + var_dump($result); + var_dump(Rhymix\Framework\Debug::getErrors()); + $oDB->rollback(); + exit; + } + } + else + { + $oDB->rollback(); + } + } + + // Get module config $config = ModuleModel::getModuleConfig('member') ?: new stdClass; $changed = false; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 290d911ef..d5799bf1a 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -766,7 +766,11 @@ class MemberController extends Member $args->extra_vars = serialize($extra_vars); // Set the user state as "denied" when using mail authentication - if($config->enable_confirm == 'Y') $args->denied = 'Y'; + if($config->enable_confirm == 'Y') + { + $args->denied = 'Y'; + $args->status = 'UNAUTHED'; + } // remove whitespace $checkInfos = array('user_id', 'user_name', 'nick_name', 'email_address'); @@ -1025,7 +1029,7 @@ class MemberController extends Member // 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) + foreach(self::NOUSE_EXTRA_VARS as $key) { unset($extra_vars->$key); } @@ -1772,16 +1776,21 @@ class MemberController extends Member $is_register = $output->data->is_register; // If credentials are correct, change the password to a new one + $args = new stdClass; + $args->member_srl = $member_srl; if($is_register === 'Y') { $args->denied = 'N'; + $args->status = 'APPROVED'; + $query_id = 'member.updateMemberStatus'; } else { $args->password = MemberModel::hashPassword($output->data->new_password); + $query_id = 'member.updateMemberPassword'; } - $output = executeQuery('member.updateMemberPassword', $args); + $output = executeQuery($query_id, $args); if(!$output->toBool()) { return $output; @@ -1832,7 +1841,7 @@ class MemberController extends Member { throw new Rhymix\Framework\Exception('msg_not_exists_member'); } - if($member_info->denied !== 'Y') + if($member_info->status !== 'UNAUTHED') { throw new Rhymix\Framework\Exception('msg_activation_not_needed'); } @@ -2334,17 +2343,17 @@ class MemberController extends Member } // If denied == 'Y', notify - if($member_info->denied == 'Y') + if($member_info->denied === 'Y') { - $args->member_srl = $member_info->member_srl; - $output = executeQuery('member.chkAuthMail', $args); - if ($output->toBool() && $output->data->count) + if ($member_info->status === 'UNAUTHED') { return new BaseObject(-1, sprintf(lang('msg_user_not_confirmed'), $member_info->email_address)); } - - $refused_reason = $member_info->refused_reason ? ('
' . lang('refused_reason') . ': ' . $member_info->refused_reason) : ''; - return new BaseObject(-1, lang('msg_user_denied') . $refused_reason); + else + { + $refused_reason = $member_info->refused_reason ? ('
' . lang('refused_reason') . ': ' . $member_info->refused_reason) : ''; + return new BaseObject(-1, lang('msg_user_denied') . $refused_reason); + } } // Notify if user is limited @@ -2744,10 +2753,16 @@ class MemberController extends Member } } + // Set status + if (!isset($args->status)) + { + $args->status = ($args->denied === 'Y') ? 'UNAUTHED' : 'APPROVED'; + } + // Insert data into the DB $args->list_order = -1 * $args->member_srl; - $oDB = &DB::getInstance(); + $oDB = DB::getInstance(); $oDB->begin(); $output = executeQuery('member.insertMember', $args); @@ -2855,6 +2870,7 @@ class MemberController extends Member if($is_admin == false) { unset($args->denied); + unset($args->status); } if($logged_info->member_srl != $args->member_srl && $is_admin == false) { @@ -3703,7 +3719,8 @@ class MemberController extends Member $args->email_address = $member_info->email_address; $args->user_id = $member_info->user_id; $args->nick_name = $member_info->nick_name; - $args->denied = "Y"; + $args->denied = 'Y'; + $args->status = 'DENIED'; $args->description = trim(vsprintf("%s\n%s [%s %s]\ninfo: %s\ndocuments: %d\ncomments: %d]", [ trim($member_info->description), lang('cmd_spammer'), diff --git a/modules/member/queries/getDeniedAndStatus.xml b/modules/member/queries/getDeniedAndStatus.xml new file mode 100644 index 000000000..2d98f09fc --- /dev/null +++ b/modules/member/queries/getDeniedAndStatus.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/member/queries/getMemberList.xml b/modules/member/queries/getMemberList.xml index 196b18416..f781b2b69 100644 --- a/modules/member/queries/getMemberList.xml +++ b/modules/member/queries/getMemberList.xml @@ -8,6 +8,7 @@ + diff --git a/modules/member/queries/getMemberListWithinGroup.xml b/modules/member/queries/getMemberListWithinGroup.xml index f2efa0da6..292ff0d7a 100644 --- a/modules/member/queries/getMemberListWithinGroup.xml +++ b/modules/member/queries/getMemberListWithinGroup.xml @@ -11,6 +11,7 @@ + diff --git a/modules/member/queries/insertMember.xml b/modules/member/queries/insertMember.xml index eb16b6ebc..dcecd4620 100644 --- a/modules/member/queries/insertMember.xml +++ b/modules/member/queries/insertMember.xml @@ -21,14 +21,15 @@ + + - diff --git a/modules/member/queries/updateMember.xml b/modules/member/queries/updateMember.xml index 303cd7565..ed1b5232f 100644 --- a/modules/member/queries/updateMember.xml +++ b/modules/member/queries/updateMember.xml @@ -3,16 +3,16 @@
- - - + + + @@ -20,9 +20,10 @@ - - + + + diff --git a/modules/member/queries/updateMemberDeniedInfo.xml b/modules/member/queries/updateMemberDeniedInfo.xml index 4725a459d..ba9eabd4c 100644 --- a/modules/member/queries/updateMemberDeniedInfo.xml +++ b/modules/member/queries/updateMemberDeniedInfo.xml @@ -1,9 +1,10 @@ - +
+ diff --git a/modules/member/queries/updateMemberPassword.xml b/modules/member/queries/updateMemberPassword.xml index 3d79f804d..beff1da71 100644 --- a/modules/member/queries/updateMemberPassword.xml +++ b/modules/member/queries/updateMemberPassword.xml @@ -4,7 +4,7 @@ - + diff --git a/modules/member/queries/updateMemberStatus.xml b/modules/member/queries/updateMemberStatus.xml new file mode 100644 index 000000000..4da7f2713 --- /dev/null +++ b/modules/member/queries/updateMemberStatus.xml @@ -0,0 +1,12 @@ + + +
+ + + + + + + + + diff --git a/modules/member/schemas/member.xml b/modules/member/schemas/member.xml index 2ad9e5882..e48fc4bf2 100644 --- a/modules/member/schemas/member.xml +++ b/modules/member/schemas/member.xml @@ -1,31 +1,32 @@
- - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - + + + + +
diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index fdc4cfa47..46d9eabb3 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -72,11 +72,9 @@
- - - - - + + +
@@ -198,7 +196,7 @@ refused_reason_division.slideUp(200); } }); - + if(!$('#until').val()) { $('.div_limited_reason').hide(); diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index d6de887eb..a28428e28 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -16,11 +16,13 @@ {$lang->cmd_show_all_member}({$total_count}) | - {$lang->cmd_show_super_admin_member}({$total_count}) + {$lang->cmd_show_super_admin_member}({$total_count}) | - {$lang->approval}({$total_count}) + {$lang->approval}({$total_count}) | - {$lang->denied}({$total_count}) + {$lang->denied}({$total_count}) + | + {$lang->member_unauthenticated}({$total_count})
{$lang->msg_new_member} {$lang->modify} @@ -76,16 +78,16 @@ - - - {$lang->member_unauthenticated} - - {$lang->denied} - + + {$lang->approval} + + {$lang->denied} + + {$lang->member_unauthenticated} {$lang->member_limited} - {$lang->approval} + {$member_info['status']} @@ -119,7 +121,7 @@ From b74a8db75b38102d4d17d0682789107dda245690 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 21 Jun 2023 00:01:26 +0900 Subject: [PATCH 2/2] Define list of valid status codes as Member::STATUS_LIST --- modules/member/member.admin.controller.php | 9 +++------ modules/member/member.class.php | 1 + 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index 2ad6c675f..f02bd720d 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -106,14 +106,11 @@ class MemberAdminController extends Member $args->extra_vars = serialize($extra_vars); // Normalize denied and status columns - if ($args->status === 'APPROVED') + if (!in_array($args->status ?? '', self::STATUS_LIST)) { - $args->denied = 'N'; - } - else - { - $args->denied = 'Y'; + $args->status = 'APPROVED'; } + $args->denied = ($args->status === 'APPROVED') ? 'N' : 'Y'; // Delete invalid or past limit dates #1334 if (!isset($args->limit_date)) diff --git a/modules/member/member.class.php b/modules/member/member.class.php index ce317f5ce..f594d697e 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -12,6 +12,7 @@ class Member extends ModuleObject */ public const ADMIN_EXTRA_VARS = ['refused_reason', 'limited_reason']; public const NOUSE_EXTRA_VARS = ['error_return_url', 'success_return_url', '_rx_ajax_compat', '_rx_csrf_token', 'ruleset', 'captchaType', 'use_editor', 'use_html']; + public const STATUS_LIST = ['APPROVED', 'DENIED', 'UNAUTHED', 'SUSPENDED', 'DELETED']; /** * constructor