add set group

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8992 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
devjin 2011-09-02 06:47:57 +00:00
parent b54f869704
commit 8f2180dd3f
12 changed files with 401 additions and 185 deletions

View file

@ -1,102 +1,148 @@
<!--%import("filter/update_group.xml")-->
<!--#include("header.html")-->
<!--%load_js_plugin("ui")-->
<!--%load_js_plugin("filebox")-->
<!-- 그룹의 삭제와 관련된 form -->
<form ruleset="deleteGroup" id="fo_group_info" action="./" method="post">
<input type="hidden" name="act" value="procMemberAdminDeleteGroup" />
<input type="hidden" name="group_srl" value="" />
</form>
<form id="fo_group_order" action="./" method="get">
<input type="hidden" name="act" value="procMemberAdminUpdateGroupOrder" />
<table cellspacing="0" class="rowTable">
<thead>
<tr>
<th scope="col"><div>{$lang->group_order}</div></th>
<th scope="col" class="half_wide"><div>{$lang->group_title}</div></th>
<th scope="col" class="half_wide"><div>{$lang->description}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col"><div>{$lang->is_default}</div></th>
<th scope="col" class="half_wide"><div>{$lang->group_order_change}</div></th>
<th scope="col" colspan="2"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@if(!count($group_list))-->
<tr>
<td colspan="7">{$lang->msg_group_is_null}</td>
</tr>
<!--@end-->
{@$__i=1}
<!--@foreach($group_list as $group_srl => $group_info)-->
<tr class="row{$cycle_idx}">
<input type="hidden" name="group_srls[]" value="{$group_info->group_srl}" />
<td>{$__i++}</td>
<td><!--@if($config->group_image_mark=='Y' && $group_info->image_mark)--><img src="{$group_info->image_mark}" style="vertical-align: middle; margin-right: 3px;" /><!--@endif-->{$group_info->title}</td>
<td>{nl2br($group_info->description)}&nbsp;</td>
<td>{zdate($group_info->regdate,"Y-m-d H:i:s")}</td>
<td><!--@if($group_info->is_default=='Y')-->Y<!--@else-->&nbsp;<!--@end--></td>
<td><a href="#" class="_up">위로</a> <a href="#" class="_down"><span>아래로</span></a></td>
<td><a href="{getUrl('group_srl',$group_info->group_srl)}" title="{$lang->cmd_modify}" class="buttonSet buttonSetting"><span>{$lang->cmd_modify}</span></a></td>
<td>
<!--@if($group_info->is_default!='Y' && $group_info->is_admin !='Y')-->
<a href="#" onclick="doUpdateGroup('{$group_info->group_srl}','delete','{$lang->confirm_delete}');return false;" title="{$lang->cmd_delete}" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</span></a>
<!--@else-->
&nbsp;
<!--@end-->
</td>
</tr>
<!--@end-->
<tr>
<th colspan="8" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
</th>
</tr>
</tbody>
</table>
</form>
<!-- 그룹 추가 -->
<load target="js/member_admin_group.js" />
<script type="text/javascript" >
xe.lang.groupDeleteMessage = '{$lang->msg_group_delete}';
xe.lang.multilingual = '{$lang->cmd_set_multilingual}';
xe.lang.modify = '{$lang->cmd_modify}';
xe.lang.delete = '{$lang->cmd_delete}';
</script>
<style type="text/css">
#imageMarkList li img,._imageMarkButton img {max-height:16px}
</style>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertGroup" action="./" method="post">
<input type="hidden" name="act" value="procMemberAdminInsertGroup" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="group_srl" value="" />
<div class="content" id="content">
<h1 class="h1">{$lang->group}</h1>
<form action="" class="form" method="post" ruleset="insertGroupConfig">
<input type="hidden" name="act" value="procMemberAdminGroupConfig" />
{$lang->use_group_image_mark}
<input type="radio" name="group_image_mark" id="yes" value="Y" checked="checked"|cond="$config->group_image_mark == 'Y'" /> <label for="yes">{$lang->cmd_yes}</label>
<input type="radio" name="group_image_mark" id="no" value="N" checked="checked"|cond="$config->group_image_mark != 'Y'" /> <label for="no">{$lang->cmd_no}</label>
<div class="table even">
<table width="100%" border="1" cellspacing="0" class="sortable">
<caption>
<strong>{count($group_list)}</strong> groups are exist.
</caption>
<thead>
<tr>
<th scope="col">{$lang->group_title}</th>
<th scope="col">{$lang->description}</th>
<th scope="col">{$lang->is_default}
[<a href="#helpDefault" class="tgAnchor">?</a>]
<div class="tgContent layer" id="helpDefault" style="right:0">
<p>회원 가입을 한 사람이 최초에 속하는 그룹을 말합니다.</p>
</div>
</th>
<th scope="col" class="_imageMarkButton">Image Mark</th>
<th scope="col">Action</th>
</tr>
</thead>
<tfoot>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="_imageMarkButton">&nbsp;</td>
<td><a href="#" class="_addGroup">Add Group</a></td>
</tr>
</tfoot>
<tbody class="uDrag _groupList">
<tr loop="$group_list=>$group_srl,$group_info">
<td class="multiLangEdit"><div class="wrap" style="height:22px"><button type="button" class="dragBtn">Move to</button>
<input type="hidden" name="group_srls[]" value="{$group_info->group_srl}" />
<input type="hidden" name="group_titles[]" value="{htmlspecialchars($group_info->title)}" class="vLang"/>
<input type="text" value="{$group_info->title}" class="vLang" style="width:120px;display:inline" />
<!-- Suggestion -->
<div class="suggestion">
<ul>
</ul>
</div>
<!-- /Suggestion -->
<span class="desc"><a href="#langEdit" class="tgAnchor editUserLang">{$lang->cmd_set_multilingual}</a></span>
</div>
</td>
<td><input type="text" name="descriptions[]" value="{$group_info->description}" style="width:240px" /></td>
<td><input type="radio" name="defaultGroup" value="{$group_info->group_srl}" title="Default" checked="checked"|cond="$group_info->is_default=='Y'" /></td>
<td class="_imageMarkButton"><input type="hidden" name="image_marks[]" value="{$group_info->image_mark}" class="_imgMarkHidden" />
<img src="{$group_info->image_mark}" alt="{$group_info->title}" cond="$config->group_image_mark == 'Y' && $group_info->image_mark" />
<a href="#imageMark" class="modalAnchor _imageMark">{$lang->cmd_modify}</a></td>
<td><div class="_deleteTD" style="display:none"|cond="$group_info->is_default == 'Y'"><a href="#{$group_srl}" class="_deleteGroup">{$lang->cmd_delete}</a></div></td>
</tr>
<tr style="display:none" class="_template">
<td class="multiLangEdit"><div class="wrap" style="height:22px"><button type="button" class="dragBtn">Move to</button>
<input type="hidden" name="group_srls[]" value="new" disabled="disabled"/>
<input type="hidden" name="group_titles[]" value="" disabled="disabled" class="vLang" />
<input type="text" value="" class="vLang" style="width:120px;display:inline" />
<!-- Suggestion -->
<div class="suggestion">
<ul>
</ul>
</div>
<!-- /Suggestion -->
<span class="desc"><a href="#langEdit" class="tgAnchor editUserLang">{$lang->cmd_set_multilingual}</a></span>
</div>
</td>
<td><input type="text" name="descriptions[]" value="" style="width:240px" disabled="disabled" /></td>
<td><input type="radio" name="defaultGroup" value="" title="Default" disabled="disabled" /></td>
<td class="_imageMarkButton"><input type="hidden" name="image_marks[]" value="" class="_imgMarkHidden" disabled="disabled" />
<a href="#imageMark" class="modalAnchor _imageMark">{$lang->cmd_modify}</a></td>
<td><div class="_deleteTD"><a href="#new" class="_deleteGroup">{$lang->cmd_delete}</a></div></td>
</tr>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->group_title}</div></th>
<td class="wide"><input type="text" name="title" class="inputTypeText w400" /></td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->is_default}</div></th>
<td><input type="checkbox" name="is_default" value="Y" class="checkbox" /> {$lang->about_member_default}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td><textarea name="description" class="inputTypeTextArea w400"></textarea></td>
</tr>
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="Save" /></span>
</div>
</form>
<!-- Multilingual -->
<div id="langEdit" class="langEdit tgContent">
<ul>
<li class="ko"><label for="ko_var1">Korean</label> <input type="text" value="안녕 세상아!" id="ko_var1" /></li>
<li class="en"><label for="en_var1">English</label> <input type="text" value="Hello World!" id="en_var1" /></li>
<li class="ja"><label for="ja_var1">Japanese</label> <input type="text" value="" id="ja_var1" /></li>
<li class="zh"><label for="zhcn_var1">Chinese(Simplified)</label> <input type="text" value="" id="zhcn_var1" /></li>
<li class="zh"><label for="zhtw_var1">Chinese(Traditional)</label> <input type="text" value="" id="zhtw_var1" /></li>
<li class="fr"><label for="fr_var1">French</label> <input type="text" value="" id="fr_var1" /></li>
<li class="de"><label for="de_var1">Deutsch</label> <input type="text" value="" id="de_var1" /></li>
<li class="ru"><label for="ru_var1">Russian</label> <input type="text" value="" id="ru_var1" /></li>
<li class="es"><label for="es_var1">Spanish</label> <input type="text" value="" id="es_var1" /></li>
<li class="tr"><label for="tr_var1">Turkish</label> <input type="text" value="" id="tr_var1" /></li>
<li class="vi"><label for="vi_var1">Vietnamese</label> <input type="text" value="" id="vi_var1" /></li>
<li class="mn"><label for="mn_var1">Mongolian</label> <input type="text" value="" id="mn_var1" /></li>
</ul>
<div class="action">
<!-- 여기부터 기존 랭귀지 변수를 수정한 경우에만 보인다 -->
<p>다국어 텍스트가 변경되었습니다. <em>업데이트</em> 버튼을 클릭하면 같은 텍스트를 사용하는 다른 페이지에도 반영됩니다. <em>새로 저장</em> 버튼을 클릭하면 이 페이지에만 적용됩니다.</p>
<div class="btnArea">
<span class="btn small"><input type="submit" value="업데이트" /></span>
<span class="btn small"><input type="submit" value="새로저장" /></span>
</div>
<!-- 여기까지 기존 랭귀지 변수를 수정한 경우에만 보인다 -->
<p><a href="#">다국어 텍스트 관리</a></p>
</div>
</div>
<tr class="row2">
<th scope="row"><div>{$lang->group_image_mark}</div></th>
<td class="left">
<div id="filebox_preview_image_mark" style="width:100px;height:100px;display:none"></div>
<input type="hidden" name="image_mark" value="" />
<span class="button black"><button type="button" onclick="XE.filebox.open(jQuery('[name=image_mark]').get(0), 'jpg,jpeg,gif,png')">{$lang->cmd_select}</button></span>
<span id="filebox_cancel_image_mark" class="button red" style="display:none"><button type="button" onclick="XE.filebox.cancel('image_mark')">{$lang->cmd_delete}</button></span>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</th>
</tr>
</table>
</form>
<div class="modal" id="imageMark">
<div class="fg portlet">
<div class="_useImageMark" style="display:none">
<h2>Image Mark 사용여부</h2>
<input id="useImageMark" type="radio" name="useImageMark" value="Y" />
<label for="useImageMark">{$lang->use}</label>
<input id="noImageMark" type="radio" name="useImageMark" value="N" />
<label for="noImageMark">{$lang->notuse}</label>
</div>
<!--@if($fileBoxList)-->
<div>
<h2>사용 가능한 Image Mark</h2>
<ul class="lined" id="imageMarkList">
<li loop="$fileBoxList=>$key,$fileInfo"><img src="{$fileInfo->filename}" alt="{$fileInfo->comment}" /> <span class="side"><a href="#" class="_selectImageMark">{$lang->cmd_select}</a></span></li>
</ul>
</div>
<!--@end-->
<h2>Image Mark 추가</h2>
<a href="#">Image Mark 관리바로가기...</a>
</div>
</div>
</div>

View file

@ -9,10 +9,18 @@
<input type="hidden" name="act" value="procMemberAdminInsert" />
<input type="hidden" name="member_srl" value="{$member_srl}" />
<input type="hidden" name="signature" value="{htmlspecialchars($member_info->signature)}" />
<input type="hidden" name="success_return_url" value="{getUrl('act', $act)}" />
<h1 class="h1">{$lang->msg_update_member}</h1>
<ul>
<li>
<p class="q">{$lang->email_address} <em style="color:red">*</em></p>
<p class="a">
<input type="hidden" name="email_address" value="{$member_info->email_address}" />
<input type="text" name="email_address" value="{$member_info->email_address}" disabled="disabled" />
</p>
</li>
<li loop="$formTags=>$formTag">
<p class="q"><label for="id">{$formTag->title}</label></p>
<p class="q">{$formTag->title}</p>
<div class="a" cond="$formTag->name != 'signature'">{$formTag->inputTag}</div>
<div class="a" cond="$formTag->name =='signature'">{$editor}</div>
</li>

View file

@ -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 = $('<img src="'+selectImgSrc+'" alt="" />').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);
});

View file

@ -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 += '<tr><td>#email_address#</td><td>'+memberInfo.join("</td><td>")+'<input type="hidden" name="member_srls[]" value="'+memberSrl+'"/></td></tr>'
memberTag += '<tr><td>'+memberInfo.join("</td><td>")+'<input type="hidden" name="member_srls[]" value="'+memberSrl+'"/></td></tr>'
}
$('#popupBody').empty().html(memberTag);
});

View file

@ -29,14 +29,12 @@
<thead>
<tr>
<th scope="col">{$lang->email}</th>
<th scope="col">{$lang->user_id}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->nick_name}</th>
<th scope="col" loop="$usedIdentifiers=>$name,$title">{$title}</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">{$lang->status}</th>
<th scope="col">{$lang->view}</th>
<th scope="col">{$lang->cmd_view}</th>
<th scope="col">{$lang->cmd_modify}</th>
<th scope="col">
<input type="checkbox" title="Check All" data-name="user" />
@ -46,14 +44,12 @@
<tfoot>
<tr>
<th scope="col">{$lang->email}</th>
<th scope="col">{$lang->user_id}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->nick_name}</th>
<th scope="col" loop="$usedIdentifiers=>$name,$title">{$title}</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">{$lang->status}</th>
<th scope="col">{$lang->view}</th>
<th scope="col">{$lang->cmd_view}</th>
<th scope="col">{$lang->cmd_modify}</th>
<th scope="col">
<input type="checkbox" title="Check All" data-name="user" />
@ -61,24 +57,29 @@
</tr>
</tfoot>
<tbody>
<tr loop="$member_list=>$no,$member_info">
<td>
<a href="#popup_menu_area" class="member_{$member_info->member_srl}">{$member_info->email_address}</a>
</td>
{@ $member_info->group_list = implode(', ', $member_info->group_list)}
<td>{$member_info->user_id}</td>
<td>{$member_info->user_name}</td>
<td>{$member_info->nick_name}</td>
<td>{zdate($member_info->regdate, 'Y-m-d')}</td>
<td>{zdate($member_info->last_login, 'Y-m-d')}</td>
<td class="text">{$member_info->group_list}&nbsp;</td>
{@ $lang_denied = ($member_info->denied == 'N')?$lang->use:$lang->denied}
<td>{$lang_denied}</td>
<td><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInfo', 'member_srl', $member_info->member_srl)}">{$lang->view}</a></td>
<td><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInsert', 'member_srl', $member_info->member_srl)}">{$lang->cmd_modify}</a></td>
<td><input type="checkbox" name="user" value="{$member_info->member_srl."\t".$member_info->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'"/></td>
</tr>
</tbody>
<tr loop="$member_list=>$no,$member_info">
{@$member_info = get_object_vars($member_info)}
<td>
<span class="member_{$member_info['member_srl']}">{getEncodeEmailAddress($member_info['email_address'])}</span>
</td>
{@ $member_info['group_list'] = implode(', ', $member_info['group_list'])}
<td loop="$usedIdentifiers=>$name,$title">{$member_info[$name]}</td>
<td>{zdate($member_info['regdate'], 'Y-m-d')}</td>
<td>{zdate($member_info['last_login'], 'Y-m-d')}</td>
<td class="text">{$member_info['group_list']}&nbsp;</td>
{@ $lang_denied = ($member_info['denied'] == 'N')?$lang->use:$lang->denied}
<td>{$lang_denied}</td>
<td>
<a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInfo', 'member_srl', $member_info['member_srl'])}">{$lang->cmd_view}</a>
</td>
<td><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInsert', 'member_srl', $member_info['member_srl'])}">{$lang->cmd_modify}</a></td>
{@$used_values = ''}
<!--@foreach($usedIdentifiers as $name=>$title)-->
{@$used_values .= "\t".$member_info[$name]}
<!--@end-->
<td><input type="checkbox" name="user" value="{$member_info['member_srl']."\t".$member_info['email_address'].$used_values."\t".$member_info['group_list']."\t".$lang_denied}" disabled="disabled"|cond="$member_info['is_admin'] == 'Y'"/></td>
</tr>
</tbody>
</table>
</div>
<div class="btnArea">
@ -95,9 +96,7 @@
<thead>
<tr>
<th scope="col">{$lang->email_address}</th>
<th scope="col">{$lang->user_id}</th>
<th scope="col">{$lang->user_name}</th>
<th scope="col">{$lang->nick_name}</th>
<th scope="col" loop="$usedIdentifiers=>$name,$title">{$title}</th>
<th scope="col" class="text">{$lang->group}</th>
<th scope="col">{$lang->status}</th>
</tr>
@ -166,6 +165,7 @@
<form action="" method="post">
<select name="search_target">
<option value="">{$lang->search_target}</option>
{@$lang->search_target_list = array_merge($lang->search_target_list, $usedIdentifiers)}
<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)}" />