frontend/dcmgr_gui/public/javascripts/dcmgr_gui/users_panel.js
DcmgrGUI.prototype.usersPanel = function(){
// Core.jsのクラス利用の初期設定
var total = 0;
var maxrow = 10;
var page = 1;
var list_request = {
"url" : DcmgrGUI.Util.getPagePath('/users/list/',page),
"data" : DcmgrGUI.Util.getPagenateData(page,maxrow)
};
// ユーザ一覧の空データ
DcmgrGUI.List.prototype.getEmptyData = function(){
return [{
"login_id":''
}]
}
// ユーザ詳細の空データ
DcmgrGUI.Detail.prototype.getEmptyData = function(){
return {
"login_id" : "-",
"create_at" : "-",
"last_update_at":''
}
}
// ボタン名設定
var create_button_name = $.i18n.prop('create_button');
var delete_button_name = $.i18n.prop('delete_button');
var update_button_name = $.i18n.prop('update_button');
var close_button_name = $.i18n.prop('close_button');
// ページ制御オブジェクト生成
var c_pagenate = new DcmgrGUI.Pagenate({
row:maxrow,
total:total
});
// ユーザ一覧オブジェクト生成
var c_list = new DcmgrGUI.List({
element_id:'#display_users',
template_id:'#usersListTemplate',
maxrow:maxrow,
page:page
});
// ユーザ詳細パラメータセット
c_list.setDetailTemplate({
template_id:'#usersDetailTemplate',
detail_path:'/users/show/'
});
// 一覧内容更新コールバック
c_list.element.bind('dcmgrGUI.contentChange', function(event,params){
var user = params.data.user;
c_pagenate.changeTotal(user.total);
c_list.setData(user.results);
c_list.singleCheckList(c_list.detail_template);
// ユーザ情報編集ダイアログ
// ダイアログ上のボタン押下時処理
var edit_user_buttons = {};
edit_user_buttons[close_button_name] = function() { $(this).dialog('close'); };
edit_user_buttons[update_button_name] = function(event) {
var login_id = $(this).find('#login_id').val();
var name = $(this).find('#user_name').val();
var locale = $(this).find('#sellocale_locale').val();
var time_zone = $(this).find('#seltimezone').val();
var uuid = $(this).find('#uuid').val();
var data ='login_id=' + login_id
+'&name=' + name
+'&locale=' + locale
+'&time_zone=' + time_zone;
var request = new DcmgrGUI.Request;
request.post({
"url": '/users/edit_user/' + uuid + '.json',
"data": data,
success: function(json,status) {
bt_refresh.element.trigger('dcmgrGUI.refresh');
c_list.checkRadioButton(uuid);
}
});
$(this).dialog("close");
}
// 編集ダイアログ生成(定義)
var bt_edit_user = new DcmgrGUI.Dialog({
target:'.edit_user',
width:600,
height:240,
title:$.i18n.prop('edit_user_header'),
path:'/edit_user',
button:edit_user_buttons
});
// ユーザ一覧中の編集ボタンコールバック
bt_edit_user.target.bind('click',function(event){
var uuid = $(this).attr('id').replace(/edit_([a-z0-9]+)/,'$1');
if (uuid) {
bt_edit_user.open({"ids":[uuid]});
}
c_list.checkRadioButton(uuid);
});
$(bt_edit_user.target).button({ disabled: false });
// 選択ユーザからグループへの紐付けダイアログ
// ダイアログ中のボタン押下時処理
var link_group_buttons = {};
link_group_buttons[close_button_name] = function() { $(this).dialog('close'); };
link_group_buttons[update_button_name] = function(event) {
var self = this;
var user_uuid = $(self).find('#user_uuid').val();
var pr_group_uuid = "";
$(self).find("[type='radio']").each(function() {
if($(this).is(':checked')) {
pr_group_uuid = $(this).val();
}
});
var data = 'pr_group_uuid=' + pr_group_uuid;
var i = 0;
$(self).find('#sel_link').each(function(key,value) {
if ($(this).is(':checked')) {
data = data + '&sel_group_uuid['+ i +']=' + $(this).val();
i += 1;
}
});
var request = new DcmgrGUI.Request;
request.post({
"url": '/users/link_user_groups/' + user_uuid + '.json',
"data": data,
success: function(json,status) {
bt_refresh.element.trigger('dcmgrGUI.refresh');
c_list.checkRadioButton(user_uuid);
},
error: function() {
}
});
$(this).dialog("close");
}
// グループへの関連付けダイアログ定義
var bt_link_group = new DcmgrGUI.Dialog({
target:'.link_group',
width:500,
height:500,
title:$.i18n.prop('link_group_header'),
path:'/link_group',
button:link_group_buttons,
callback: function(){
var self = this;
// 指定のプライマリグループがリンクされていない場合、自動的にリンクする
$(this).find("[type='radio']").each(function(key,value) {
$(value).click(function(){
if ($(value).is(':checked')) {
var radio_val = $(value).val();
var sel_links = $(self).find('#sel_link');
sel_links.each(function() {
if($(this).val() == radio_val) {
$(this).attr('checked',true);
}
});
};
});
});
// プライマリグループをリンク対象から外す場合、自動的にプライマリ指定もはずす
$(this).find('#sel_link').click(function() {
if ($(this).is(':checked') != true) {
//alert('nothing!');
var sel_value = $(this).val();
var radios = $(self).find("[type='radio']");
radios.each(function() {
if($(this).val() == sel_value) {
$(this).attr('checked',false);
}
});
};
});
}
});
// メイン画面の関連付けボタン押下時の処理(ダイアログ表示)
bt_link_group.target.bind('click',function(event){
var uuid = $(this).attr('id').replace(/link_([a-z0-9]+)/,'$1');
if (uuid) {
bt_link_group.open({"ids":[uuid]});
}
c_list.checkRadioButton(uuid);
});
$(bt_link_group.target).button({ disabled: false });
});
var bt_refresh = new DcmgrGUI.Refresh();
// 更新ボタン処理
bt_refresh.element.bind('dcmgrGUI.refresh', function(){
//Update list element
c_list.page = c_pagenate.current_page;
list_request.url = DcmgrGUI.Util.getPagePath('/users/list/', c_list.page);
list_request.data = DcmgrGUI.Util.getPagenateData(c_pagenate.start,c_pagenate.row);
c_list.element.trigger('dcmgrGUI.updateList', {request:list_request})
$.each(c_list.checked_list, function(check_id,obj){
//All remove detail element
$($('#detail').find('#'+check_id)).remove();
//All reload detail element
c_list.checked_list[check_id].c_detail.update({
url:DcmgrGUI.Util.getPagePath('/users/show/', check_id)
},true);
});
});
// ページャ更新時処理
c_pagenate.element.bind('dcmgrGUI.updatePagenate', function(){
c_list.clearCheckedList();
$('#detail').html('');
bt_refresh.element.trigger('dcmgrGUI.refresh');
});
// ユーザ作成ダイアログボタン押下時処理
var create_user_buttons = {};
create_user_buttons[close_button_name] = function() {
$(this).dialog("destroy");
$(this).remove();
};
create_user_buttons[create_button_name] = function() {
// フォーム全部をバリデーション
var f = $('#fm');
var valid = f.validate().form();
if(valid) { // バリデーション通過時
var login_id = $(this).find('#login_id').val();
var password = $(this).find('#pass').val();
var name = $(this).find('#user_name').val();
var primary_account_id = $(this).find('#primary_account_id').val();
var locale = $(this).find('#sellocale_locale').val();
var time_zone = $(this).find('#seltimezone').val();
var data ='login_id=' + login_id
+'&password=' + password
+'&name=' + name
+'&primary_account_id=' + primary_account_id
+'&locale=' + locale
+'&time_zone=' + time_zone;
var request = new DcmgrGUI.Request;
request.post({
"url": '/users/create_user',
"data": data,
success: function(json,status) {
// ダイアログを削除
bt_create_user.content.dialog("destroy");
bt_create_user.content.remove();
bt_refresh.element.trigger('dcmgrGUI.refresh');
}
});
}
}
// ユーザ作成ダイアログ定義
var bt_create_user = new DcmgrGUI.Dialog({
target:'.create_user',
width:600,
height:270,
title:$.i18n.prop('create_user_header'),
path:'/create_user',
callback: function(){
// バリデーション定義
var f = $('#fm');
f.validate({
errorClass : 'valid-error',
rules: {
'login_id' : {
required : true,
AN : true,
maxlength : 255
},
'user_name' : {
maxlength : 200
},
'pass' : {
required : true,
maxlength : 255
}
},
messages: {
'login_id' : {
required: $.i18n.prop('validate_errmsg_required',[$.i18n.prop('item_login_id')]),
AN: $.i18n.prop('validate_errmsg_AN'),
maxlength: $.validator.format($.i18n.prop('validate_errmsg_maxlength'))
},
'user_name' : {
maxlength: $.validator.format($.i18n.prop('validate_errmsg_maxlength'))
},
'pass' : {
required: $.i18n.prop('validate_errmsg_required',[$.i18n.prop('item_pass')]),
maxlength: $.validator.format($.i18n.prop('validate_errmsg_maxlength'))
}
},
onkeyup: false
});
},
button: create_user_buttons
});
// メイン画面上の新規作成ボタン押下時処理
bt_create_user.target.bind('click', function(){
bt_create_user.open();
});
// ユーザ削除ダイアログ
// ダイアログ内ボタン押下時処理
var delete_user_buttons = {};
delete_user_buttons[close_button_name] = function() { $(this).dialog("close"); };
delete_user_buttons[delete_button_name] = function() {
var user_id = $(this).find('#user_id').val();
var request = new DcmgrGUI.Request;
request.post({
"url": '/users/'+ user_id +'.json',
success: function(json, status){
bt_refresh.element.trigger('dcmgrGUI.refresh');
$(bt_delete_user.target).button({ disabled: true });
}
});
$(this).dialog("close");
}
// ユーザ削除ダイアログ定義
var bt_delete_user = new DcmgrGUI.Dialog({
target: '.delete_user',
width: 600,
height: 300,
title: $.i18n.prop('delete_user_header'),
path: '/delete_user',
button: delete_user_buttons
});
// ラジオボタン選択連動で、ユーザ削除ボタンを活性化
dcmgrGUI.notification.subscribe('checked_radio', bt_delete_user, 'enableDialogButton');
// ページ移動連動で、ユーザ削除ボタンを非活性化
dcmgrGUI.notification.subscribe('change_pagenate', bt_delete_user, 'disableDialogButton');
// 各ボタンの初期化
$(bt_create_user.target).button({ disabled: false });
$(bt_delete_user.target).button({ disabled: true });
$(bt_refresh.target).button({ disabled: false });
// メイン画面上の削除ボタンのコールバック
bt_delete_user.target.bind('click', function() {
var id = c_list.currentChecked();
if( id ){
bt_delete_user.open({"ids":[id]});
}
return false;
});
// メイン画面上のデータ取得
c_list.setData(null);
c_list.update(list_request,true);
}