diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index c8f86ce23..7b934abd7 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -83,6 +83,7 @@ + diff --git a/modules/member/lang/lang.xml b/modules/member/lang/lang.xml index d7cd1dad7..df127a3bb 100644 --- a/modules/member/lang/lang.xml +++ b/modules/member/lang/lang.xml @@ -720,41 +720,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -2307,6 +2274,12 @@ Bạn có thể quản lý thành viên bằng cách tạo những nhóm mới, + + + + + + diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index 487799e0c..ecfa88ac3 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -668,12 +668,7 @@ function insertGroup($args) { if(!$args->site_srl) $args->site_srl = 0; // Check the value of is_default. - if($args->is_default!='Y') { - $args->is_default = 'N'; - } else { - $output = executeQuery('member.updateGroupDefaultClear', $args); - if(!$output->toBool()) return $output; - } + if($args->is_default!='Y') $args->is_default = 'N'; if (!$args->group_srl) $args->group_srl = getNextSequence(); @@ -686,10 +681,6 @@ function updateGroup($args) { // Check the value of is_default. if($args->is_default!='Y') $args->is_default = 'N'; - else { - $output = executeQuery('member.updateGroupDefaultClear', $args); - if(!$output->toBool()) return $output; - } return executeQuery('member.updateGroup', $args); } @@ -717,6 +708,43 @@ return executeQuery('member.deleteGroup', $args); } + /** + * Set group config + **/ + function procMemberAdminGroupConfig() { + $vars = Context::getRequestVars(); + + $oMemberModel = &getModel('member'); + $oModuleController = &getController('module'); + + // group image mark option + $config = $oMemberModel->getMemberConfig(); + $config->group_image_mark = $vars->group_image_mark; + $output = $oModuleController->updateModuleConfig('member', $config); + + // group data save + $group_srls = $vars->group_srls; + foreach($group_srls as $order=>$group_srl){ + unset($update_args); + $update_args->title = $vars->group_titles[$order]; + $update_args->is_default = ($vars->defaultGroup == $group_srl)?'Y':'N'; + $update_args->description = $vars->descriptions[$order]; + $update_args->image_mark = $vars->image_marks[$order]; + $update_args->list_order = $order + 1; + + if (is_numeric($group_srl)){ + $update_args->group_srl = $group_srl; + $output = $this->updateGroup($update_args); + }else + $output = $this->insertGroup($update_args); + } + + if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) { + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMemberAdminGroupList'); + $this->setRedirectUrl($returnUrl); + return; + } + } function procMemberAdminUpdateGroupOrder() { $vars = Context::getRequestVars(); diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index 5a1445dfc..78c15494d 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -35,7 +35,6 @@ * @brief display member list **/ function dispMemberAdminList() { - $oMemberAdminModel = &getAdminModel('member'); $oMemberModel = &getModel('member'); $output = $oMemberAdminModel->getMemberList(); @@ -57,10 +56,22 @@ } } + $config = $oMemberModel->getMemberConfig(); + $memberIdentifiers = array('user_id'=>'user_id', 'user_name'=>'user_name', 'nick_name'=>'nick_name'); + $usedIdentifiers = array(); + foreach($config->signupForm as $signupItem){ + if (!count($memberIdentifiers)) break; + if(in_array($signupItem->name, $memberIdentifiers) && ($signupItem->required || $signupItem->isUse)){ + unset($memberIdentifiers[$signupItem->name]); + $usedIdentifiers[$signupItem->name] = $lang->{$signupItem->name}; + } + } + Context::set('total_count', $output->total_count); Context::set('total_page', $output->total_page); Context::set('page', $output->page); Context::set('member_list', $output->data); + Context::set('usedIdentifiers', $usedIdentifiers); Context::set('page_navigation', $output->page_navigation); $this->setTemplateFile('member_list'); @@ -200,8 +211,50 @@ $member_config = $oMemberModel->getMemberConfig(); $formTags = array(); global $lang; + + if (!$member_config->signupForm || !is_array($member_config->signupForm)){ + $items = array('user_id', 'password', 'user_name', 'nick_name', 'email_address', 'find_account_question', 'homepage', 'blog', 'birthday', 'signature', 'profile_image', 'image_name', 'image_mark'); + $mustRequireds = array('email_address', 'password', 'find_account_question'); + $orgRequireds = array('email_address', 'password', 'find_account_question', 'user_id', 'nick_name', 'user_name'); + $orgUse = array('email_address', 'password', 'find_account_question', 'user_id', 'nick_name', 'user_name', 'homepage', 'blog', 'birthday'); + $list_order = array(); + foreach($items as $key){ + unset($signupItem); + $signupItem->isDefaultForm = true; + $signupItem->name = $key; + $signupItem->title = $lang->{$key}; + $signupItem->mustRequired = in_array($key, $mustRequireds); + $signupItem->imageType = (strpos($key, 'image') !== false); + $signupItem->required = in_array($key, $orgRequireds); + $signupItem->isUse = ($config->{$key} == 'Y') || in_array($key, $orgUse); + if ($signupItem->imageType){ + $signupItem->max_width = $config->{$key.'_max_width'}; + $signupItem->max_height = $config->{$key.'_max_height'}; + } + $list_order[] = $signupItem; + } + foreach($extendItems as $form_srl=>$item_info){ + unset($signupItem); + $signupItem->name = $item_info->column_name; + $signupItem->title = $item_info->column_title; + $signupItem->type = $item_info->column_type; + $signupItem->member_join_form_srl = $form_srl; + $signupItem->mustRequired = in_array($key, $mustRequireds); + $signupItem->required = ($item_info->required == 'Y'); + $signupItem->isUse = ($item_info->is_active == 'Y'); + $signupItem->description = $item_info->description; + if ($signupItem->imageType){ + $signupItem->max_width = $config->{$key.'_max_width'}; + $signupItem->max_height = $config->{$key.'_max_height'}; + } + $list_order[] = $signupItem; + } + $member_config->signupForm = $list_order; + } + foreach($member_config->signupForm as $no=>$formInfo){ if (!$formInfo->isUse)continue; + if ($formInfo->name == 'email_address') continue; unset($formTag); $inputTag = ''; $formTag->title = $formInfo->title; @@ -402,6 +455,9 @@ EOD; } else { $this->setTemplateFile('group_list'); } + + $output = $oModuleModel->getModuleFileBoxList(); + Context::set('fileBoxList', $output->data); } /** diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 5ba3f3cab..8a9631afd 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -1628,7 +1628,6 @@ $logged_info = Context::get('logged_info'); // Get what you want to modify the original information if(!$this->memberInfo) $this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl); - if(!$args->user_id) $args->user_id = $this->memberInfo->user_id; // Control of essential parameters if($args->allow_mailing!='Y') $args->allow_mailing = 'N'; if($args->allow_message && !in_array($args->allow_message, array('Y','N','F'))) $args->allow_message = 'Y'; @@ -1645,12 +1644,6 @@ // Website, blog, checks the address if($args->homepage && !preg_match("/^[a-z]+:\/\//is",$args->homepage)) $args->homepage = 'http://'.$args->homepage; if($args->blog && !preg_match("/^[a-z]+:\/\//is",$args->blog)) $args->blog = 'http://'.$args->blog; - // ID, nickname, email address of the redundancy check - $member_srl = $oMemberModel->getMemberSrlByUserID($args->user_id); - if($member_srl&&$args->member_srl!=$member_srl) return new Object(-1,'msg_exists_user_id'); - - $member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name); - if($member_srl&&$args->member_srl!=$member_srl) return new Object(-1,'msg_exists_nick_name'); $member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address); if($member_srl&&$args->member_srl!=$member_srl) return new Object(-1,'msg_exists_email_address'); @@ -1658,9 +1651,15 @@ $oDB = &DB::getInstance(); $oDB->begin(); // DB in the update + + $output = executeQuery('member.getMemberInfoByMemberSrl', $args); + $orgMemberInfo = $output->data; if($args->password) $args->password = md5($args->password); - else $args->password = $this->memberInfo->password; - if(!$args->user_name) $args->user_name = $this->memberInfo->user_name; + else $args->password = $orgMemberInfo->password; + + if(!$args->user_name) $args->user_name = $orgMemberInfo->user_name; + if(!$args->user_id) $args->user_id = $orgMemberInfo->user_id; + if(!$args->nick_name) $args->user_name = $orgMemberInfo->nick_name; if(!$args->description) $args->description = ''; $output = executeQuery('member.updateMember', $args); diff --git a/modules/member/queries/updateGroup.xml b/modules/member/queries/updateGroup.xml index d69e1a304..793924b5d 100644 --- a/modules/member/queries/updateGroup.xml +++ b/modules/member/queries/updateGroup.xml @@ -7,6 +7,7 @@ + diff --git a/modules/member/queries/updateMember.xml b/modules/member/queries/updateMember.xml index 724cfa7e8..dfe1411d0 100644 --- a/modules/member/queries/updateMember.xml +++ b/modules/member/queries/updateMember.xml @@ -3,12 +3,10 @@ - - - + diff --git a/modules/member/tpl/group_list.html b/modules/member/tpl/group_list.html index f44eea20d..0a49a8e9f 100644 --- a/modules/member/tpl/group_list.html +++ b/modules/member/tpl/group_list.html @@ -1,102 +1,148 @@ - - - - - - - - - - - - - - - - - - - {$lang->group_order} - {$lang->group_title} - {$lang->description} - {$lang->regdate} - {$lang->is_default} - {$lang->group_order_change} - - - - - - - {$lang->msg_group_is_null} - - -{@$__i=1} - - - - {$__i++} - {$group_info->title} - {nl2br($group_info->description)} - {zdate($group_info->regdate,"Y-m-d H:i:s")} - Y - 위로 아래로 - {$lang->cmd_modify} - - - {$lang->cmd_delete} - - - - - - - - - - - - - - - - + + + {$XE_VALIDATOR_MESSAGE} - - - - + + {$lang->group} + + +{$lang->use_group_image_mark} + group_image_mark == 'Y'" /> {$lang->cmd_yes} + group_image_mark != 'Y'" /> {$lang->cmd_no} + + + + {count($group_list)} groups are exist. + + + + {$lang->group_title} + {$lang->description} + {$lang->is_default} + [?] + + 회원 가입을 한 사람이 최초에 속하는 그룹을 말합니다. + + + Image Mark + Action + + + + + + + + + Add Group + + + + + Move to + + + + + + + + + + {$lang->cmd_set_multilingual} + + + + is_default=='Y'" /> + + + {$lang->cmd_modify} + is_default == 'Y'">{$lang->cmd_delete} + + + Move to + + + + + + + + + + {$lang->cmd_set_multilingual} + + + + + + {$lang->cmd_modify} + {$lang->cmd_delete} + - - - {$lang->group_title} - - - - {$lang->is_default} - {$lang->about_member_default} - - - {$lang->description} - - + + + + + + + + + + + Korean + English + Japanese + Chinese(Simplified) + Chinese(Traditional) + French + Deutsch + Russian + Spanish + Turkish + Vietnamese + Mongolian + + + + 다국어 텍스트가 변경되었습니다. 업데이트 버튼을 클릭하면 같은 텍스트를 사용하는 다른 페이지에도 반영됩니다. 새로 저장 버튼을 클릭하면 이 페이지에만 적용됩니다. + + + + + + 다국어 텍스트 관리 + + - - {$lang->group_image_mark} - - - - {$lang->cmd_select} - {$lang->cmd_delete} - - - - - - - - - - + + + + Image Mark 사용여부 + + {$lang->use} + + {$lang->notuse} + + + + 사용 가능한 Image Mark + + {$lang->cmd_select} + + + + Image Mark 추가 + Image Mark 관리바로가기... + + + diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index e50025268..4e1e39693 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -9,10 +9,18 @@ + {$lang->msg_update_member} + + {$lang->email_address} * + + + + + - {$formTag->title} + {$formTag->title} {$formTag->inputTag} {$editor} diff --git a/modules/member/tpl/js/member_admin_group.js b/modules/member/tpl/js/member_admin_group.js new file mode 100644 index 000000000..027c1263d --- /dev/null +++ b/modules/member/tpl/js/member_admin_group.js @@ -0,0 +1,106 @@ +jQuery(function ($){ + if($('input[name=group_image_mark]:checked').val() == 'Y') $('._imageMarkButton').show(); + else $('._imageMarkButton').hide(); + + $('input[name=group_image_mark]').click(function (){ + var checked = $(this).val(); + if (checked == 'Y') $('._imageMarkButton').show(); + else $('._imageMarkButton').hide(); + }); + + $('input:radio[name=defaultGroup]').click(function(){ + $('._deleteTD').show(); + if ($(this).attr('checked')){ + $(this).closest('tr').find('._deleteTD').hide(); + } + }); + /** + * use dispMemberAdminSiteMemberGroup + **/ + $('a.modalAnchor._imageMark').bind('before-open.mw', function(e){ + var $targetImage = $(e.target).parent().find('img'); + var $imageMarkHidden = $(e.target).parent().find('._imgMarkHidden'); + if ($targetImage.length){ + $("._useImageMark").show(); + $("#useImageMark").attr("checked", "checked"); + $("#noImageMark").removeAttr("checked") + .click(function (){ + $targetImage.remove(); + $imageMarkHidden.val(''); + $('a.modalAnchor._imageMark').trigger('close.mw'); + }); + }else{ + $("._useImageMark").hide(); + $("#useImageMark").removeAttr("checked"); + $("#noImageMark").attr("checked", "checked"); + } + + $('a._selectImageMark').click(function(event){ + event.preventDefault(); + var selectImgSrc = $(event.target).parent().parent().find('img').attr('src'); + if ($targetImage.length){ + $targetImage.attr('src', selectImgSrc); + }else{ + $targetImage = $('').insertBefore($imageMarkHidden); + } + $imageMarkHidden.val(selectImgSrc); + $('a.modalAnchor._imageMark').trigger('close.mw'); + }); + }); + + $('._deleteGroup').click(function (event){ + event.preventDefault(); + var $target = $(event.target).closest('tr'); + var group_srl = $(event.target).attr('href').substr(1); + if(!confirm(xe.lang.groupDeleteMessage)) return; + console.log(group_srl); + + if (group_srl.indexOf("new") > 0){ + $target.remove(); + return; + } + + exec_xml( + 'member', + 'procMemberAdminDeleteGroup', + {group_srl:group_srl}, + function(){location.reload();}, + ['error','message','tpl'] + ); + + }); + + $('._addGroup').click(function (event){ + var $tbody = $('._groupList'); + var index = 'new'+ new Date().getTime(); + + $tbody.find('._template').clone(true) + .removeClass('_template') + .find('input').removeAttr('disabled').end() + .find('input:radio').val(index).end() + .find('input[name="group_srls[]"]').val(index).end() + .show() + .appendTo($tbody); + + return false; + }); + + $('a.tgAnchor.editUserLang').bind('before-open.tc', function(e){ + var $target = $(e.target).parent(); + $('#langEdit').insertBefore($target); + }); + //add plugin + var CheckTitle = xe.createPlugin('checkTitle', { + API_BEFORE_VALIDATE : function(sender, params){ + $('input[name="group_titles[]"]').each(function(index){ + if ($(this).val() == ""){ + $(this).val($(this).closest('td').find('input:text.vLang').val()); + } + }); + } + }); + + var checkTitle = new CheckTitle(); + var v = xe.getApp('Validator')[0]; + v.registerPlugin(checkTitle); +}); diff --git a/modules/member/tpl/js/member_admin_list.js b/modules/member/tpl/js/member_admin_list.js index 17e30855b..a17730335 100644 --- a/modules/member/tpl/js/member_admin_list.js +++ b/modules/member/tpl/js/member_admin_list.js @@ -13,7 +13,7 @@ jQuery(function ($){ for (var i = 0; i<$memberList.length; i++){ memberInfo = $memberList.eq(i).val().split('\t'); memberSrl = memberInfo.shift(); - memberTag += '#email_address#'+memberInfo.join("")+'' + memberTag += ''+memberInfo.join("")+'' } $('#popupBody').empty().html(memberTag); }); diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index e698c0719..917ea9d56 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -29,14 +29,12 @@ {$lang->email} - {$lang->user_id} - {$lang->user_name} - {$lang->nick_name} + {$title} {$lang->signup_date} {$lang->last_login} {$lang->group} {$lang->status} - {$lang->view} + {$lang->cmd_view} {$lang->cmd_modify} @@ -46,14 +44,12 @@ {$lang->email} - {$lang->user_id} - {$lang->user_name} - {$lang->nick_name} + {$title} {$lang->signup_date} {$lang->last_login} {$lang->group} {$lang->status} - {$lang->view} + {$lang->cmd_view} {$lang->cmd_modify} @@ -61,24 +57,29 @@ - - - {$member_info->email_address} - - {@ $member_info->group_list = implode(', ', $member_info->group_list)} - {$member_info->user_id} - {$member_info->user_name} - {$member_info->nick_name} - {zdate($member_info->regdate, 'Y-m-d')} - {zdate($member_info->last_login, 'Y-m-d')} - {$member_info->group_list} - {@ $lang_denied = ($member_info->denied == 'N')?$lang->use:$lang->denied} - {$lang_denied} - {$lang->view} - {$lang->cmd_modify} - user_id."\t".$member_info->user_name."\t".$member_info->nick_name."\t".$member_info->group_list."\t".$lang_denied}" disabled="disabled"|cond="$member_info->is_admin == 'Y'"/> - - + +{@$member_info = get_object_vars($member_info)} + + {getEncodeEmailAddress($member_info['email_address'])} + + {@ $member_info['group_list'] = implode(', ', $member_info['group_list'])} + {$member_info[$name]} + {zdate($member_info['regdate'], 'Y-m-d')} + {zdate($member_info['last_login'], 'Y-m-d')} + {$member_info['group_list']} + {@ $lang_denied = ($member_info['denied'] == 'N')?$lang->use:$lang->denied} + {$lang_denied} + + {$lang->cmd_view} + + {$lang->cmd_modify} + {@$used_values = ''} + + {@$used_values .= "\t".$member_info[$name]} + + + + @@ -95,9 +96,7 @@ {$lang->email_address} - {$lang->user_id} - {$lang->user_name} - {$lang->nick_name} + {$title} {$lang->group} {$lang->status} @@ -166,6 +165,7 @@ {$lang->search_target} + {@$lang->search_target_list = array_merge($lang->search_target_list, $usedIdentifiers)} {$val}
{$XE_VALIDATOR_MESSAGE}
회원 가입을 한 사람이 최초에 속하는 그룹을 말합니다.
다국어 텍스트가 변경되었습니다. 업데이트 버튼을 클릭하면 같은 텍스트를 사용하는 다른 페이지에도 반영됩니다. 새로 저장 버튼을 클릭하면 이 페이지에만 적용됩니다.
다국어 텍스트 관리
{$lang->email_address} *
+ + +
{$formTag->title}