diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index 555c31d58..cb0bff1e0 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -1,7 +1,9 @@ - + + + @@ -19,7 +21,7 @@ - + @@ -30,6 +32,7 @@ + @@ -80,9 +83,24 @@ + + - + + User List + 회원 목록 + User List + User List + User List + User List + User List + User List + User List + User List + User List + + User List 회원 목록 User List diff --git a/modules/member/lang/ko.lang.php b/modules/member/lang/ko.lang.php index 0b766d55f..928eba465 100644 --- a/modules/member/lang/ko.lang.php +++ b/modules/member/lang/ko.lang.php @@ -239,4 +239,10 @@ $lang->msg_kr_address = '읍, 면, 동 이름으로 검색하세요.'; $lang->msg_kr_address_etc = '나머지 주소(번지)를 입력하세요.'; $lang->cmd_search_again = '다시 검색'; + + // site admin + $lang->msg_select_user = '관리할 사용자를 선택해주세요.'; + $lang->cmd_selected_user_manage = '선택한 사용자 관리'; + $lang->about_change_user_group = '선택한 사용자의 그룹을 다시 설정.'; + $lang->about_send_message = '사용자에게 쪽지를 발송해서 이 사실을 알립니다. 작성하지 않으면 발송하지 않습니다.'; ?> diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index ace8ca347..677751c6d 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -566,5 +566,89 @@ return new Object(); } + + function _checkGrantSiteAdmin(){ + $oMemberModel = &getModel('member'); + $logged_info = $oMemberModel->getLoggedInfo(); + + $site_module_info = Context::get('site_module_info'); + $oModuleModel = &getModel('module'); + $grant = $oModuleModel->getGrant($site_module_info, $logged_info); + if(!$grant->is_site_admin) return $this->stop("msg_is_not_administrator"); + + $output->grant = $grant; + $output->site_srl = $site_module_info->site_srl; + return $output; + } + /** + * + **/ + function procMemberAdminSiteMemberManage(){ + // check siteadmin grant + $check_info = $this->_checkGrantSiteAdmin(); + + $oMemberController = &getController('member'); + + $var = Context::getRequestVars(); + $groups = $var->groups; + $members = $var->member_srls; + + $oDB = &DB::getInstance(); + $oDB->begin(); + + // site_srl set + $args->site_srl = $check_info->site_srl; + if ($var->type == 'modify'){ + if (count($groups) > 1){ + $args->member_srl = $var->member_srls; + // delete origin group + $output = executeQuery('member.deleteMembersGroup', $args); + if (!$output->toBool()){ + $oDB->rollback(); + return $output; + } + + foreach($groups as $group_srl){ + foreach($members as $member_srl){ + $output = $oMemberController->addMemberToGroup($member_srl, $group_srl, $check_info->site_srl); + if (!$output->toBool()){ + $oDB->rollback(); + return $output; + } + } + } + } + else { + $args->group_srl = $groups[0]; + $args->member_srl = $var->member_srls; + $oMemberController->replaceMemberGroup($args); + } + }else if ($var->type == 'delete'){ + $args->member_srl = $members; + $output = executeQuery('member.deleteMembersGroup', $args); + if(!$output->toBool()){ + $oDB->rollback(); + return $output; + } + } + + $oDB->commit(true); + + $message = $var->message; + // Send a message + if($message) { + $oCommunicationController = &getController('communication'); + + $logged_info = Context::get('logged_info'); + $title = cut_str($message,10,'...'); + $sender_member_srl = $logged_info->member_srl; + + foreach($members as $member_srl){ + $oCommunicationController->sendMessage($sender_member_srl, $member_srl, $title, $message, false); + } + } + + $this->setRedirectUrl(Context::get('return_url')); + } } ?> diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index 00b34685d..84907ae6d 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -233,5 +233,94 @@ $this->setLayoutFile('popup_layout'); $this->setTemplateFile('delete_members'); } + + /** + * + **/ + + function dispMemberAdminSiteMemberList(){ + $oMemberModel = &getModel('member'); + $site_module_info = Context::get('current_module_info'); + $site_srl = $site_module_info->site_srl; + + // 회원 그룹을 구함 + $group_list = $oMemberModel->getGroups($site_srl); + if(!$group_list) $group_list = array(); + Context::set('group_list', $group_list); + + // 회원 목록을 구함 + $args->selected_group_srl = Context::get('selected_group_srl'); + if(!isset($group_list[$args->selected_group_srl])) { + $args->selected_group_srl = implode(',',array_keys($group_list)); + } + $search_target = trim(Context::get('search_target')); + $search_keyword = trim(Context::get('search_keyword')); + if($search_target && $search_keyword) { + switch($search_target) { + case 'user_id' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_user_id = $search_keyword; + break; + case 'user_name' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_user_name = $search_keyword; + break; + case 'nick_name' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_nick_name = $search_keyword; + break; + case 'email_address' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_email_address = $search_keyword; + break; + case 'regdate' : + $args->s_regdate = ereg_replace("[^0-9]","",$search_keyword); + break; + case 'regdate_more' : + $args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'regdate_less' : + $args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'last_login' : + $args->s_last_login = $search_keyword; + break; + case 'last_login_more' : + $args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'last_login_less' : + $args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'extra_vars' : + $args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword); + break; + } + } + + $query_id = 'member.getMemberListWithinGroup'; + $args->sort_index = "member.member_srl"; + $args->sort_order = "desc"; + $args->page = Context::get('page'); + $args->list_count = 40; + $args->page_count = 10; + $output = executeQuery($query_id, $args); + + $members = array(); + if(count($output->data)) { + foreach($output->data as $key=>$val) { + $members[] = $val->member_srl; + } + } + + $members_groups = $oMemberModel->getMembersGroups($members, $site_srl); + Context::set('members_groups',$members_groups); + // 템플릿에 쓰기 위해서 context::set + 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('page_navigation', $output->page_navigation); + $this->setTemplateFile('stUserList'); + } } ?> diff --git a/modules/member/member.model.php b/modules/member/member.model.php index efd34d846..f0ab5ae8c 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -307,6 +307,7 @@ function getMembersGroups($member_srls, $site_srl = 0) { $args->member_srls = implode(',',$member_srls); $args->site_srl = $site_srl; + $args->sort_index = 'list_order'; $output = executeQueryArray('member.getMembersGroups', $args); if(!$output->data) return array(); diff --git a/modules/member/queries/getMemberListWithinGroup.xml b/modules/member/queries/getMemberListWithinGroup.xml index 7d8a4a449..aadef8caf 100644 --- a/modules/member/queries/getMemberListWithinGroup.xml +++ b/modules/member/queries/getMemberListWithinGroup.xml @@ -25,6 +25,9 @@ + + + diff --git a/modules/member/queries/getMembersGroups.xml b/modules/member/queries/getMembersGroups.xml index b26191ff4..ec75ffdc1 100644 --- a/modules/member/queries/getMembersGroups.xml +++ b/modules/member/queries/getMembersGroups.xml @@ -13,4 +13,7 @@ + + + diff --git a/modules/member/ruleset/updateSiteMember.xml b/modules/member/ruleset/updateSiteMember.xml new file mode 100644 index 000000000..360bd78c1 --- /dev/null +++ b/modules/member/ruleset/updateSiteMember.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/modules/member/tpl/js/site_admin_member.js b/modules/member/tpl/js/site_admin_member.js new file mode 100644 index 000000000..94704bf0b --- /dev/null +++ b/modules/member/tpl/js/site_admin_member.js @@ -0,0 +1,20 @@ +jQuery(function ($){ + + $('a.modalAnchor._member').bind('before-open.mw', function(){ + var $memberList = $('.memberList input[name=user]:checked'); + if ($memberList.length == 0){ + alert(xe.lang.msg_select_user); + return false; + } + var memberInfo, memberSrl; + var memberTag = ""; + $('input[name="groups[]"]:checked').removeAttr('checked'); + $('#message').val(''); + for (var i = 0; i<$memberList.length; i++){ + memberInfo = $memberList.eq(i).val().split('\t'); + memberSrl = memberInfo.shift(); + memberTag += ''+memberInfo.join("")+'' + } + $('#popupBody').empty().html(memberTag); + }); +}); diff --git a/modules/member/tpl/stUserList.html b/modules/member/tpl/stUserList.html new file mode 100644 index 000000000..bb8c214f1 --- /dev/null +++ b/modules/member/tpl/stUserList.html @@ -0,0 +1,146 @@ + + +
+

{$XE_VALIDATOR_MESSAGE}

+
+
+
+

{$lang->user_list}

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ All({number_format($total_count)}) + {$lang->cmd_selected_user_manage}... +
{$lang->user_name}{$lang->nick_name}{$lang->signup_date}{$lang->last_login}{$lang->group} + +
{$lang->user_name}{$lang->nick_name}{$lang->signup_date}{$lang->last_login}{$lang->group} + +
{$val->user_name}{$val->nick_name}{zdate($val->regdate, 'Y-m-d')}{zdate($val->last_login, 'Y-m-d')} + + {$groupName = implode(',',$members_groups[$val->member_srl])} + +   + + + user_name."\t".$val->nick_name."\t".$groupName}"/> +
+
+ +
+ + +