mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-07 10:41:40 +09:00
issue 87 userlist in vitual site manager view
git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8800 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
5d415ec3c3
commit
eeb849c836
10 changed files with 384 additions and 3 deletions
|
|
@ -1,7 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants />
|
||||
<permissions />
|
||||
<permissions>
|
||||
<permission action="dispMemberAdminSiteMemberList" target="manager" />
|
||||
</permissions>
|
||||
<actions>
|
||||
<action name="dispMemberInfo" type="view" standalone="true" />
|
||||
<action name="dispMemberSignUpForm" type="view" standalone="true" />
|
||||
|
|
@ -19,7 +21,7 @@
|
|||
<action name="dispMemberResendAuthMail" type="view" standalone="true" />
|
||||
<action name="dispSavedDocumentList" type="view" standalone="true" />
|
||||
|
||||
<action name="dispMemberAdminList" type="view" standalone="true" index="true" admin_index="true" />
|
||||
<action name="dispMemberAdminList" type="view" standalone="true" index="true" admin_index="true" menu_name="userList" menu_index="true"/>
|
||||
<action name="dispMemberAdminConfig" type="view" standalone="true" />
|
||||
<action name="dispMemberAdminInsert" type="view" standalone="true" />
|
||||
<action name="dispMemberAdminDeleteForm" type="view" standalone="true" />
|
||||
|
|
@ -30,6 +32,7 @@
|
|||
<action name="dispMemberAdminDeniedIDList" type="view" standalone="true" />
|
||||
<action name="dispMemberAdminManageGroup" type="view" standalone="true" />
|
||||
<action name="dispMemberAdminDeleteMembers" type="view" standalone="true" />
|
||||
<action name="dispMemberAdminSiteMemberList" type="view" menu_name="siteUserList" menu_index="true"/>
|
||||
|
||||
<action name="getMemberMenu" type="model" standalone="true" />
|
||||
<action name="getMemberAdminColorset" type="model" standalone="true" />
|
||||
|
|
@ -80,9 +83,24 @@
|
|||
<action name="procMemberAdminInsertDeniedID" type="controller" standalone="true" ruleset="insertDeniedId" />
|
||||
<action name="procMemberAdminUpdateDeniedID" type="controller" standalone="true" />
|
||||
<action name="procMemberAdminUpdateGroupOrder" type="controller" standalone="true" />
|
||||
|
||||
<action name="procMemberAdminSiteMemberManage" type="controller" ruleset="updateSiteMember" />
|
||||
</actions>
|
||||
<menus>
|
||||
<menu name="userList">
|
||||
<menu name="userList" type="super">
|
||||
<title xml:lang="en">User List</title>
|
||||
<title xml:lang="ko">회원 목록</title>
|
||||
<title xml:lang="zh-CN">User List</title>
|
||||
<title xml:lang="jp">User List</title>
|
||||
<title xml:lang="es">User List</title>
|
||||
<title xml:lang="ru">User List</title>
|
||||
<title xml:lang="fr">User List</title>
|
||||
<title xml:lang="zh-TW">User List</title>
|
||||
<title xml:lang="vi">User List</title>
|
||||
<title xml:lang="mn">User List</title>
|
||||
<title xml:lang="tr">User List</title>
|
||||
</menu>
|
||||
<menu name="siteUserList" type="site">
|
||||
<title xml:lang="en">User List</title>
|
||||
<title xml:lang="ko">회원 목록</title>
|
||||
<title xml:lang="zh-CN">User List</title>
|
||||
|
|
|
|||
|
|
@ -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 = '사용자에게 쪽지를 발송해서 이 사실을 알립니다. 작성하지 않으면 발송하지 않습니다.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -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'));
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@
|
|||
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
|
||||
</group>
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="member.member_srl" />
|
||||
</groups>
|
||||
<navigation>
|
||||
<index var="sort_index" default="member.list_order" order="sort_order" />
|
||||
<list_count var="list_count" default="20" />
|
||||
|
|
|
|||
|
|
@ -13,4 +13,7 @@
|
|||
<condition operation="equal" column="a.group_srl" default="b.group_srl" pipe="and" />
|
||||
<condition operation="in" column="b.member_srl" var="member_srls" filter="numbers" notnull="notnull" pipe="and" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="a.group_srl" order="desc" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
|
|||
11
modules/member/ruleset/updateSiteMember.xml
Normal file
11
modules/member/ruleset/updateSiteMember.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ruleset version="1.5.0">
|
||||
<customrules>
|
||||
</customrules>
|
||||
<fields>
|
||||
<field name="member_srls" required="true" />
|
||||
<field name="groups">
|
||||
<if test="$type == 'modify'" attr="required" value="true" />
|
||||
</field>
|
||||
</fields>
|
||||
</ruleset>
|
||||
20
modules/member/tpl/js/site_admin_member.js
Normal file
20
modules/member/tpl/js/site_admin_member.js
Normal file
|
|
@ -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 += '<tr><td>'+memberInfo.join("</td><td>")+'</td><td><input type="checkbox" name="member_srls[]" value="'+memberSrl+'" checked="checked" /></td></tr>'
|
||||
}
|
||||
$('#popupBody').empty().html(memberTag);
|
||||
});
|
||||
});
|
||||
146
modules/member/tpl/stUserList.html
Normal file
146
modules/member/tpl/stUserList.html
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
<load target="js/site_admin_member.js" />
|
||||
<script type="text/javascript">
|
||||
xe.lang.msg_select_user = '{$lang->msg_select_user}';
|
||||
</script>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<div class="content" id="content">
|
||||
<form action="" class="form">
|
||||
<h1 class="h1">{$lang->user_list}</h1>
|
||||
<div class="table even">
|
||||
<table width="100%" border="1" cellspacing="0" class="memberList">
|
||||
<caption>
|
||||
All({number_format($total_count)})
|
||||
<span class="side"><span class="btn"><a href="#listManager" class="modalAnchor _member" >{$lang->cmd_selected_user_manage}...</a></span></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{$lang->user_name}</th>
|
||||
<th scope="col">{$lang->nick_name}</th>
|
||||
<th scope="col">{$lang->signup_date}</th>
|
||||
<th scope="col">{$lang->last_login}</th>
|
||||
<th scope="col" class="text">{$lang->group}</th>
|
||||
<th scope="col">
|
||||
<input type="checkbox" title="Check All" />
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th scope="col">{$lang->user_name}</th>
|
||||
<th scope="col">{$lang->nick_name}</th>
|
||||
<th scope="col">{$lang->signup_date}</th>
|
||||
<th scope="col">{$lang->last_login}</th>
|
||||
<th scope="col" class="text">{$lang->group}</th>
|
||||
<th scope="col">
|
||||
<input type="checkbox" title="Check All" />
|
||||
</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<tbody>
|
||||
<tr loop="$member_list=>$key,$val" >
|
||||
<td>{$val->user_name}</td>
|
||||
<td>{$val->nick_name}</td>
|
||||
<td>{zdate($val->regdate, 'Y-m-d')}</td>
|
||||
<td>{zdate($val->last_login, 'Y-m-d')}</td>
|
||||
<td class="text">
|
||||
<!--@if($members_groups[$val->member_srl])-->
|
||||
{$groupName = implode(',',$members_groups[$val->member_srl])}
|
||||
<!--@else-->
|
||||
|
||||
<!--@end-->
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" name="user" value="{$val->member_srl."\t".$val->user_name."\t".$val->nick_name."\t".$groupName}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<span class="btn"><a href="#listManager" class="modalAnchor _member" >{$lang->cmd_selected_user_manage}...</a></span>
|
||||
</div>
|
||||
</form>
|
||||
<div class="modal" id="listManager">
|
||||
<form action="./" ruleset="updateSiteMember" class="fg form">
|
||||
<input type="hidden" name="act" value="procMemberAdminSiteMemberManage" />
|
||||
<input type="hidden" name="return_url" value="{getUrl('act', $act)}" />
|
||||
<h2 class="h2">{$lang->cmd_selected_user_manage}</h2>
|
||||
<div class="table even">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{$lang->user_name}</th>
|
||||
<th scope="col">{$lang->nick_name}</th>
|
||||
<th scope="col" class="text">{$lang->group}</th>
|
||||
<th scope="col"><input type="checkbox" name="user" checked="checked" title="Check All" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="popupBody">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="q">{$lang->about_change_user_group}</p>
|
||||
<p>
|
||||
<!--@foreach($group_list as $key=>$val)-->
|
||||
<input type="checkbox" name="groups[]" id="g{$val->group_srl}" value="{$val->group_srl}"/> <label for="g{$val->group_srl}">{$val->title}</label>
|
||||
<!--@end-->
|
||||
</p>
|
||||
<p class="q"><label for="message">{$lang->about_send_message}</label></p>
|
||||
<p>
|
||||
<textarea cols="42" rows="3" id="message" style="width:98%" name="message" ></textarea>
|
||||
</p>
|
||||
<div class="btnArea">
|
||||
<button type="submit" name="type" value="modify">{$lang->cmd_modify}</button>
|
||||
<button type="submit" name="type" value="delete">{$lang->cmd_delete}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="search">
|
||||
<form action="" class="pagination">
|
||||
<input type="hidden" name="error_return_url" value="" />
|
||||
<input type="hidden" name="module" value="{$module}" />
|
||||
<input type="hidden" name="act" value="{$act}" />
|
||||
<input cond="$order_target" type="hidden" name="order_target" value="{$order_target}" />
|
||||
<input cond="$order_type" type="hidden" name="order_type" value="{$order_type}" />
|
||||
<input cond="$category_srl" type="hidden" name="category_srl" value="{$category_srl}" />
|
||||
<input cond="$childrenList" type="hidden" name="childrenList" value="{$childrenList}" />
|
||||
<input cond="$search_keyword" type="hidden" name="search_keyword" value="{$search_keyword}" />
|
||||
|
||||
<a href="{getUrl('page', '')}" class="direction">« FIRST</a>
|
||||
|
||||
<block cond="$page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page && $page_navigation->page_count != $page_navigation->total_page">
|
||||
<a href="{getUrl('page', '')}">1</a>
|
||||
<a href="#goTo" class="tgSimple" title="{$lang->cmd_go_to_page}">...</a>
|
||||
</block>
|
||||
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
{@$last_page = $page_no}
|
||||
<strong cond="$page_no == $page">{$page_no}</strong>
|
||||
<a cond="$page_no != $page" href="{getUrl('page', $page_no)}">{$page_no}</a>
|
||||
<!--@end-->
|
||||
|
||||
<block cond="$last_page != $page_navigation->last_page">
|
||||
<a href="#goTo" class="tgSimple" title="{$lang->cmd_go_to_page}">...</a>
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}">{$page_navigation->last_page}</a>
|
||||
</block>
|
||||
|
||||
<a href="{getUrl('page', $page_navigation->last_page)}" class="direction">LAST »</a>
|
||||
|
||||
<span id="goTo" class="tgContent">
|
||||
<input name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit">Go</button>
|
||||
</span>
|
||||
</form>
|
||||
<form action="">
|
||||
<select name="search_target">
|
||||
<option value="">{$lang->search_target}</option>
|
||||
<option value="{$key}" loop="$lang->search_target_list=>$key,$val" selected="selected"|cond="$search_target==$key">{$val}</option>
|
||||
</select>
|
||||
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText" />
|
||||
<input type="submit" value="{$lang->cmd_search}" />
|
||||
<a href="{getUrl('search_target', '', 'search_keyword', '')}">{$lang->cmd_cancel}</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
Loading…
Add table
Add a link
Reference in a new issue