From c949e797b0adb68bf64ce45ab0dc5216786a6a04 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Sat, 14 Jun 2025 12:16:31 +0900 Subject: [PATCH 01/19] Separate default value from options in member extra vars, too --- modules/member/member.admin.controller.php | 26 ++++++---- modules/member/member.admin.model.php | 21 ++++++-- modules/member/member.admin.view.php | 3 +- modules/member/member.class.php | 9 ++++ modules/member/member.controller.php | 4 +- modules/member/member.model.php | 54 +++++++++++++-------- modules/member/member.view.php | 1 + modules/member/queries/insertJoinForm.xml | 1 + modules/member/queries/updateJoinForm.xml | 1 + modules/member/schemas/member_join_form.xml | 1 + modules/member/tpl/insert_join_form.html | 15 ++++-- 11 files changed, 92 insertions(+), 44 deletions(-) diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index bde74ac60..f9ee4c530 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -878,21 +878,27 @@ class MemberAdminController extends Member $args->column_type = Context::get('column_type'); $args->column_name = strtolower(Context::get('column_id')); $args->column_title = Context::get('column_title'); - $args->default_value = explode("\n", str_replace("\r", '', Context::get('default_value'))); - $args->required = Context::get('required'); - $args->is_active = (isset($args->required)); - if(!in_array(strtoupper($args->required), array('Y','N')))$args->required = 'N'; - $args->description = Context::get('description') ? Context::get('description') : ''; - // Default values - if(in_array($args->column_type, array('checkbox','select','radio')) && count($args->default_value)) + $args->default_value = trim(utf8_clean(Context::get('default_value'))); + $args->options = trim(utf8_clean(Context::get('options'))); + if ($args->options !== '') { - $args->default_value = serialize($args->default_value); + $args->options = array_map('trim', explode("\n", $args->options)); + $args->options = json_encode($args->options, \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES); } else { - $args->default_value = ''; + $args->options = null; } + $args->required = Context::get('required'); + if (!in_array(strtoupper($args->required), array('Y','N'))) + { + $args->required = 'N'; + } + + $args->is_active = (isset($args->required)); + $args->description = Context::get('description') ? Context::get('description') : ''; + // Check ID duplicated if (Context::isReservedWord($args->column_name)) { @@ -909,7 +915,7 @@ class MemberAdminController extends Member } } // Fix if member_join_form_srl exists. Add if not exists. - $isInsert; + $isInsert = false; if(!$args->member_join_form_srl) { $isInsert = true; diff --git a/modules/member/member.admin.model.php b/modules/member/member.admin.model.php index 4a3b9c23e..18f434a03 100644 --- a/modules/member/member.admin.model.php +++ b/modules/member/member.admin.model.php @@ -288,13 +288,24 @@ class MemberAdminModel extends Member if($output->toBool() && $output->data) { $formInfo = $output->data; - $default_value = $formInfo->default_value; - if($default_value) + $default_value = ''; + $options = ''; + if (isset($formInfo->options) && $formInfo->options !== '') { - $default_value = unserialize($default_value); - Context::set('default_value', $default_value); + $default_value = $formInfo->default_value; + $options = json_decode($formInfo->options, true); + } + elseif (preg_match('/^a:\d+:\{i:/', $formInfo->default_value)) + { + $options = unserialize($formInfo->default_value); + } + else + { + $default_value = $formInfo->default_value; } Context::set('formInfo', $output->data); + Context::set('default_value', $default_value); + Context::set('options', $options); } $oMemberModel = getModel('member'); @@ -314,7 +325,7 @@ class MemberAdminModel extends Member $oTemplate = TemplateHandler::getInstance(); $tpl = $oTemplate->compile($this->module_path.'tpl', 'insert_join_form'); - $this->add('tpl', str_replace("\n"," ",$tpl)); + $this->add('tpl', $tpl); } /** diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index 88b44d034..0b46709f2 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -486,7 +486,7 @@ class MemberAdminView extends Member { $extend_form_list = MemberModel::getCombineJoinForm($memberInfo); $security = new Security($extend_form_list); - $security->encodeHTML('..column_title', '..description', '..default_value.'); + $security->encodeHTML('..column_title', '..description', '..default_value', '..options.'); if ($memberInfo) { @@ -725,6 +725,7 @@ class MemberAdminView extends Member $input->input_id = $extendForm->column_name; $input->value = $extendForm->value ?? ''; $input->default = $extendForm->default_value ?? null; + $input->options = $extendForm->options ?? null; if ($extendForm->column_type === 'tel' || $extendForm->column_type === 'tel_intl') { $input->style = 'width:33.3px'; diff --git a/modules/member/member.class.php b/modules/member/member.class.php index daf61158d..32cf596b2 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -167,6 +167,9 @@ class Member extends ModuleObject if(!$oDB->isIndexExists('member_auth_mail', 'idx_member_srl')) return true; if($oDB->isIndexExists('member_auth_mail', 'unique_key')) return true; + // Check join form options column + if(!$oDB->isColumnExists('member_join_form', 'options')) return true; + // Update status column $output = executeQuery('member.getDeniedAndStatus'); if ($output->data->count) @@ -403,6 +406,12 @@ class Member extends ModuleObject $oDB->dropIndex('member_auth_mail', 'unique_key'); } + // Check join form options column + if(!$oDB->isColumnExists('member_join_form', 'options')) + { + $oDB->addColumn('member_join_form', 'options', 'text', null, null, null, 'default_value'); + } + // Update status column $output = executeQuery('member.getDeniedAndStatus'); if ($output->data->count) diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 9e2a488e8..26b3ea4d4 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -2871,7 +2871,7 @@ class MemberController extends Member $extend_form_list = MemberModel::getJoinFormlist(); $security = new Security($extend_form_list); - $security->encodeHTML('..column_title', '..description', '..default_value.'); + $security->encodeHTML('..column_title', '..description', '..default_value', '..options.'); if($config->signupForm) { foreach($config->signupForm as $no => $formInfo) @@ -3167,7 +3167,7 @@ class MemberController extends Member $extend_form_list = MemberModel::getJoinFormlist(); $security = new Security($extend_form_list); - $security->encodeHTML('..column_title', '..description', '..default_value.'); + $security->encodeHTML('..column_title', '..description', '..default_value', '..options.'); if($config->signupForm) { foreach($config->signupForm as $no => $formInfo) diff --git a/modules/member/member.model.php b/modules/member/member.model.php index 03013abe2..2cdda377e 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -806,31 +806,38 @@ class MemberModel extends Member if(!$join_form_list) return NULL; // Need to unserialize because serialized array is inserted into DB in case of default_value if(!is_array($join_form_list)) $join_form_list = array($join_form_list); - $join_form_count = count($join_form_list); - for($i=0;$i<$join_form_count;$i++) + foreach ($join_form_list as $i => $join_form) { - $join_form_list[$i]->column_name = strtolower($join_form_list[$i]->column_name); + $join_form->column_name = strtolower($join_form->column_name); - $member_join_form_srl = $join_form_list[$i]->member_join_form_srl; - $column_type = $join_form_list[$i]->column_type; - $column_name = $join_form_list[$i]->column_name; - $column_title = $join_form_list[$i]->column_title; - $default_value = $join_form_list[$i]->default_value; // Add language variable - if(!isset($lang->extend_vars)) $lang->extend_vars = array(); - $lang->extend_vars[$column_name] = $column_title; - // unserialize if the data type if checkbox, select and so on - if(in_array($column_type, array('checkbox','select','radio'))) + $column_name = $join_form->column_name; + $column_title = $join_form->column_title; + if (!isset($lang->extend_vars)) { - $join_form_list[$i]->default_value = unserialize($default_value); - if(!$join_form_list[$i]->default_value[0]) $join_form_list[$i]->default_value = ''; + $lang->extend_vars = array(); + } + $lang->extend_vars[$column_name] = $column_title; + + // unserialize if the data type if checkbox, select and so on + if (in_array($join_form->column_type, ['checkbox','select','radio'])) + { + if (isset($join_form->options) && $join_form->options !== '') + { + $join_form->options = json_decode($join_form->options, true); + } + elseif (preg_match('/^a:\d+:\{i:/', $join_form->default_value)) + { + $join_form->options = unserialize($join_form->default_value); + $join_form->default_value = ''; + } } else { - $join_form_list[$i]->default_value = ''; + $join_form->default_value = ''; } - $list[$member_join_form_srl] = $join_form_list[$i]; + $list[$join_form->member_join_form_srl] = $join_form; } self::$_join_form_list = $list; } @@ -958,12 +965,17 @@ class MemberModel extends Member $join_form = $output->data; if(!$join_form) return NULL; - $column_type = $join_form->column_type; - $default_value = $join_form->default_value; - - if(in_array($column_type, array('checkbox','select','radio'))) + if (in_array($join_form->column_type, ['checkbox','select','radio'])) { - $join_form->default_value = unserialize($default_value); + if (isset($join_form->options) && $join_form->options !== '') + { + $join_form->options = json_decode($join_form->options, true); + } + elseif (preg_match('/^a:\d+:\{i:/', $join_form->default_value)) + { + $join_form->options = unserialize($join_form->default_value); + $join_form->default_value = ''; + } } else { diff --git a/modules/member/member.view.php b/modules/member/member.view.php index d6afba4af..9523b6cc6 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -280,6 +280,7 @@ class MemberView extends Member $extvalue->input_id = $formInfo->name; $extvalue->value = $extendFormInfo[$formInfo->member_join_form_srl]->value ?? null; $extvalue->default = $extendFormInfo[$formInfo->member_join_form_srl]->default_value ?? null; + $extvalue->options = $extendFormInfo[$formInfo->member_join_form_srl]->options ?? null; $item->value = $extvalue->getValueHTML(); } diff --git a/modules/member/queries/insertJoinForm.xml b/modules/member/queries/insertJoinForm.xml index 808ff4160..9b8be3c54 100644 --- a/modules/member/queries/insertJoinForm.xml +++ b/modules/member/queries/insertJoinForm.xml @@ -9,6 +9,7 @@ + diff --git a/modules/member/queries/updateJoinForm.xml b/modules/member/queries/updateJoinForm.xml index 5b6082682..3d18f78bc 100644 --- a/modules/member/queries/updateJoinForm.xml +++ b/modules/member/queries/updateJoinForm.xml @@ -8,6 +8,7 @@ + diff --git a/modules/member/schemas/member_join_form.xml b/modules/member/schemas/member_join_form.xml index e69076e8f..9c3e8f5e3 100644 --- a/modules/member/schemas/member_join_form.xml +++ b/modules/member/schemas/member_join_form.xml @@ -5,6 +5,7 @@ + diff --git a/modules/member/tpl/insert_join_form.html b/modules/member/tpl/insert_join_form.html index 18f2a4c21..d59983f12 100644 --- a/modules/member/tpl/insert_join_form.html +++ b/modules/member/tpl/insert_join_form.html @@ -26,11 +26,17 @@ -
- +
+
- -

{$lang->about_multi_type}

+ +
+
+
+ +
+ +

{$lang->about_multi_type}

@@ -51,7 +57,6 @@