////////////////////////////////////////////////////////////////////////////////////////
//Page 전역 변수
////////////////////////////////////////////////////////////////////////////////////////
var dataTableRef; // 데이터테이블 참조 변수
var groupMembersDataTable;
var attributesDataTable;
var realm = 'master'; // realm 명
var selectedGroup = { id: null, name: null, attributes: {} };
////////////////////////////////////////////////////////////////////////////////////////
//Document Ready
////////////////////////////////////////////////////////////////////////////////////////
function execDocReady() {
var pluginGroups = [
[
'../reference/light-blue/lib/vendor/jquery.ui.widget.js',
'../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Templates_js_tmpl.js',
'../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Load-Image_js_load-image.js',
'../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Canvas-to-Blob_js_canvas-to-blob.js',
'../reference/light-blue/lib/jquery.iframe-transport.js',
'../reference/light-blue/lib/jquery.fileupload.js',
'../reference/light-blue/lib/jquery.fileupload-fp.js',
'../reference/light-blue/lib/jquery.fileupload-ui.js',
],
[
'../reference/jquery-plugins/select2-4.0.2/dist/css/select2_lightblue4.css',
'../reference/jquery-plugins/lou-multi-select-0.9.12/css/multiselect-lightblue4.css',
'../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select-bluelight.css',
'../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js',
'../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.quicksearch.js',
'../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.multi-select.js',
'../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select.min.js',
],
[
'../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.min.css',
'../reference/light-blue/lib/bootstrap-datepicker.js',
'../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.full.min.js',
'../reference/lightblue4/docs/lib/widgster/widgster.js',
'../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js',
'../reference/lightblue4/docs/lib/jquery.sparkline/index.js',
'../reference/lightblue4/docs/js/charts.js',
//jsTree
'../reference/jquery-plugins/jstree-v.pre1.0/jquery.jstree.js',
'../arms/js/common/table_new.js',
],
[
// datatables(13)
'../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css',
'../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/pdfmake.min.js',
'../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/vfs_fonts.js',
],
// 추가적인 플러그인 그룹들을 이곳에 추가하면 됩니다.
];
loadPluginGroupsParallelAndSequential(pluginGroups)
.then(function () {
console.log('모든 플러그인 로드 완료');
// 사이드 메뉴 색상 설정
$('.widget').widgster();
setSideMenu('sidebar_menu_security', 'sidebar_menu_security_group');
tabClickEvent();
btnClickEvent();
var waitDataTable = setInterval(function () {
try {
if (!$.fn.DataTable.isDataTable('#attributesTable')) {
clearInterval(waitDataTable);
$(document).trigger($.Event('init.attributeTable'));
}
} catch (err) {
console.log('서비스 데이터 테이블 로드가 완료되지 않아서 초기화 재시도 중...');
}
}, 313 /*milli*/);
// group List 조회
getGroups();
})
.catch(function (error) {
console.error('플러그인 로드 중 오류 발생');
console.log(error);
});
}
// 데이터 테이블 데이터 렌더링 이후 콜백 함수.
function dataTableCallBack() {
console.log('table Callback');
}
function dataTableDrawCallback(tableInfo) {
console.log('dataTableDrawCallback => ', tableInfo);
}
function dataTableClick(tempDataTable, selectedData) {
console.log('tempDataTable => ', tempDataTable);
console.log('tempDataTable => ', tempDataTable.context[0].sTableId);
console.log('selectedData => ', selectedData);
if (tempDataTable.context[0].sTableId === 'membersTable') {
// 페이지 이동 with userId 함께
let url = '/backoffice/template.html?page=securityUser&userId=' + selectedData.id;
// user page 클릭 이벤트 연결 필요
window.location.href = url;
}
}
/////////////////////////////////
// jsTree 선택된 노드 판별 함수
/////////////////////////////////
function isDefaultOrFolderNode() {
// root node 선택 또는 아무 노드도 선택하지 않았을 때
if (selectedGroup.id === 'root_id' || selectedGroup.id === null) {
return false;
}
// root 노드 제외하고 선택
else {
return true;
}
}
//////////////////////
// Button Click Event
//////////////////////
function btnClickEvent() {
/*
* Group 추가
*/
$('#btnGroupCreateSave').on('click', function () {
console.log('btnClickEvent :: btnGroupCreateSave is submitted');
let groupName = $('#modalCreateGroupName').val().trim();
if (groupName) {
if (isDefaultOrFolderNode()) {
createChildGroup(selectedGroup.id, groupName);
} else {
createGroup(groupName);
}
} else {
jError('그룹 이름을 입력해 주세요.');
}
});
/*
* Group 삭제
*/
// 삭제모달
$('#groupDeleteBtn').on('click', function () {
console.log('btnClickEvent :: groupDeleteDtn is submitted');
console.log('selectedGroup.name => ', selectedGroup.name);
if (typeof selectedGroup.name === 'object') {
$('#modalDeleteGroupName').val(selectedGroup.name.title);
} else {
$('#modalDeleteGroupName').val(selectedGroup.name);
}
});
// 삭제 실행
$('#btnGroupDelete').on('click', function () {
deleteGroups(selectedGroup.id, selectedGroup.name);
});
/*
* Group 명 변경
*/
$('#name-edit-btn').on('click', function () {
console.log('btnClickEvent :: name-edit-btn is submitted');
if ($('#group-name').val() == '' || $('#group-name').val() === selectedGroup.name) {
return false;
} else {
editGroupName(selectedGroup.id, $('#group-name').val());
}
});
/*
* Role Mappings
*/
$('#available').on('change', function () {
if ($(this).find('option:selected').length > 0) {
$('#addSelected').removeAttr('disabled').addClass('btn-primary');
} else {
$('#addSelected').attr('disabled', 'disabled').removeClass('btn-primary');
}
$('#assigned').prop('selectedIndex', -1); // #assigned의 선택 해제
$('#removeSelected').attr('disabled', 'disabled').removeClass('btn-danger');
});
$('#assigned').on('change', function () {
if ($(this).find('option:selected').length > 0) {
$('#removeSelected').removeAttr('disabled').addClass('btn-danger');
} else {
$('#removeSelected').attr('disabled', 'disabled').removeClass('btn-danger');
}
$('#available').prop('selectedIndex', -1); // #available의 선택 해제
$('#addSelected').attr('disabled', 'disabled').removeClass('btn-primary');
});
$('#addSelected').on('click', function () {
$('#available option:selected').each(function () {
addRoleMapping(realm, selectedGroup.id, $(this).val());
});
if ($('#available option').length === 0) {
$('#addSelected').attr('disabled', 'disabled').removeClass('btn-primary');
}
$('#assigned').prop('selectedIndex', -1); // #assigned의 선택 해제
$('#addSelected').attr('disabled', 'disabled').removeClass('btn-primary');
$('#removeSelected').attr('disabled', 'disabled').removeClass('btn-danger');
});
$('#removeSelected').on('click', function () {
$('#assigned option:selected').each(function () {
deleteRoleMapping(realm, selectedGroup.id, $(this).val());
});
if ($('#assigned option').length === 0) {
$('#removeSelected').attr('disabled', 'disabled').removeClass('btn-danger');
}
$('#available').prop('selectedIndex', -1); // #available의 선택 해제
$('#addSelected').attr('disabled', 'disabled').removeClass('btn-primary');
$('#removeSelected').attr('disabled', 'disabled').removeClass('btn-danger');
});
}
//////////////////////
// Tab Click Event
//////////////////////
function tabClickEvent() {
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr('href'); // activated tab
console.log('[ security :: group ] :: target => ' + target);
if (target === '#groupSettings') {
$('.tab-content .tab-pane').addClass('hidden');
$('#groupSettings').removeClass('hidden');
} else if (target === '#attributes') {
$('.tab-content .tab-pane').addClass('hidden');
$('#attributes').removeClass('hidden');
if (!selectedGroup.id) {
jError('선택된 그룹이 없습니다. 폴더 또는 일반 그룹을 선택해주세요.');
} else if (selectedGroup.id === 'root_id') {
jError('루트를 선택하셨습니다. 폴더 또는 일반 그룹을 선택해주세요.');
}
getAttributeInfo(selectedGroup.id);
} else if (target === '#roleMappings') {
$('.tab-content .tab-pane').addClass('hidden');
$('#roleMappings').removeClass('hidden');
if (!selectedGroup.id) {
jError('선택된 그룹이 없습니다. 폴더 또는 일반 그룹을 선택해주세요.');
} else if (selectedGroup.id === 'root_id') {
jError('루트를 선택하셨습니다. 폴더 또는 일반 그룹을 선택해주세요.');
}
getComposite('master', selectedGroup.id);
getAvailableRoles('master', selectedGroup.id);
getAssignedRoles('master', selectedGroup.id);
} else if (target === '#members') {
// 그룹 유저
$('.tab-content .tab-pane').addClass('hidden');
$('#members').removeClass('hidden');
if (!selectedGroup.id) {
jError('선택된 그룹이 없습니다. 폴더 또는 일반 그룹을 선택해주세요.');
} else if (selectedGroup.id === 'root_id') {
jError('루트를 선택하셨습니다. 폴더 또는 일반 그룹을 선택해주세요.');
}
getGroupMembers('master', selectedGroup.id);
}
});
}
function groupMembersTableLoad(tableData) {
var columnList = [
{
name: 'username',
title: 'Username',
data: 'username',
render: function (data, type, row, meta) {
if (isEmpty(data) || data === 'false') {
return "
N/A
";
} else {
let displayText = data;
let color = '#a4c6ff'; // color = "#f8f8f8"; // 기본 텍스트 색상
return "" + displayText + '
';
}
},
className: 'dt-body-left',
visible: true,
},
{
name: 'lastName',
title: 'Last Name (Family Name)',
data: 'lastName',
render: function (data, type, row, meta) {
if (isEmpty(data) || data === 'false') {
return "N/A
";
} else {
let displayText = data;
let color = '#a4c6ff'; // color = "#f8f8f8"; // 기본 텍스트 색상
return "" + displayText + '
';
}
},
className: 'dt-body-left',
visible: true,
},
{
name: 'firstName',
title: 'First Name',
data: 'firstName',
render: function (data, type, row, meta) {
if (isEmpty(data) || data === 'false') {
return "N/A
";
} else {
let displayText = data;
let color = '#a4c6ff'; // color = "#f8f8f8"; // 기본 텍스트 색상
return "" + displayText + '
';
}
},
className: 'dt-body-left',
visible: true,
},
{
name: 'email',
title: 'Email',
data: 'email',
render: function (data, type, row, meta) {
if (isEmpty(data) || data === 'false') {
return "N/A
";
} else {
let displayText = data;
let color = '#a4c6ff'; // color = "#f8f8f8"; // 기본 텍스트 색상
return "" + displayText + '
';
}
},
className: 'dt-body-left',
visible: true,
},
{
name: 'id',
title: '',
data: 'id',
orderable: false,
render: function (data, type) {
if (type === 'display' && data) {
return $(`