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:
devjin 2011-08-18 02:59:51 +00:00
parent 5d415ec3c3
commit eeb849c836
10 changed files with 384 additions and 3 deletions

View file

@ -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>

View file

@ -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 = '사용자에게 쪽지를 발송해서 이 사실을 알립니다. 작성하지 않으면 발송하지 않습니다.';
?>

View file

@ -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'));
}
}
?>

View file

@ -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');
}
}
?>

View file

@ -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();

View file

@ -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" />

View file

@ -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>

View 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>

View 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);
});
});

View 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-->
&nbsp;
<!--@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">&laquo; 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 &raquo;</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>