123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- "use strict";
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: Cognos Analytics
- * Copyright IBM Corp. 2015, 2018
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define(['doT', 'q', 'jquery', 'underscore', 'bi/commons/utils/BidiUtil', 'bi/admin/nls/StringResource', 'bi/glass/app/ContentView', 'bacontentnav/utils/WidgetNavigator', 'bi/commons/ui/dialogs/ConfirmationDialog', 'text!bi/admin/account/templates/MembersTabTemplate.html', 'bi/admin/common/utils/AJAXUtils', 'bi/commons/utils/ContentFormatter'], function (dot, Q, $, _, BidiUtil, StringResource, ContentView, WidgetNavigator, ConfirmationDialog, template, AJAXUtils, ContentFormatter) {
- var MembersTab = ContentView.extend({
- init: function init(options) {
- MembersTab.inherited('init', this, arguments);
- this.unavailableMembersExist = false;
- $.extend(this, options);
- },
- render: function render() {
- var strings = {
- 'addMember': StringResource.get('addMember'),
- 'removeMember': StringResource.get('removeMember'),
- 'removeMemberButton': StringResource.get('removeMemberButton'),
- 'tableCaption': StringResource.get('membersTableCaption'),
- 'tableheader': {
- 'type': StringResource.get('type'),
- 'name': StringResource.get('name'),
- 'action': StringResource.get('removeActionColumn')
- },
- 'group': StringResource.get('groupIconName'),
- 'account': StringResource.get('accountIconName'),
- 'import': StringResource.get('import'),
- 'select': StringResource.get('select'),
- 'addBulkMembers': StringResource.get('import'),
- 'unavailableMembersExist': StringResource.get('unavailableMembersExist')
- }; // check write permission
- var writable = this.objectInfo.permissions && this.objectInfo.permissions.indexOf('write') > -1 ? true : false;
- if (!this.glassContext.isDevInstall()) {
- //external namespace has no write permission
- var currentNamespace = this.accountExplorer.getCurrentNamespace();
- if (currentNamespace.defaultName !== "Cognos") {
- writable = false;
- }
- }
- return this._getMembers().then(function (members) {
- var htmlStr;
- if (members === 'everyone' || members === 'allAuthUsers') {
- htmlStr = this._getBlankHtml(members);
- } else {
- members = _.map(members, function (member) {
- return this._patchItem(member);
- }.bind(this));
- var sText = StringResource.get('noMember', {
- 'type': this.objectInfo.type
- });
- var tempObj = {
- 'members': members,
- 'writable': writable,
- 'strings': strings,
- 'unavailableMembersExist': this.unavailableMembersExist,
- noMemberText: sText
- };
- htmlStr = dot.template(template)(tempObj);
- }
- this.$el.append(htmlStr);
- $.each(this.$el.find('.groupListFocusable .text-title'), function (index, value) {
- ContentFormatter.middleShortenString(value);
- });
- this.widgetKeyController = new WidgetNavigator({
- $el: this.$el.find(".groupList-table"),
- focusClass: "groupListFocusable"
- });
- this._bindEvents();
- this._enforceTextDir();
- }.bind(this));
- },
- refresh: function refresh() {
- this.$el.empty();
- this.render();
- },
- _enforceTextDir: function _enforceTextDir() {
- var $spans = this.$el.find(".text-title");
- $spans.attr('dir', BidiUtil.resolveBaseTextDir(this.innerHTML));
- },
- _removeMembers: function _removeMembers(members) {
- var objId = this.objectInfo.id;
- var objType = this.objectInfo.type;
- var membersURL;
- switch (objType) {
- case 'role':
- membersURL = AJAXUtils.getPath('getRoleMembers', objId);
- break;
- case 'group':
- membersURL = AJAXUtils.getPath('getGroupMembers', objId);
- break;
- default:
- membersURL = "";
- break;
- }
- var options = {
- dataType: 'json',
- type: 'PUT',
- data: JSON.stringify(members),
- url: membersURL,
- cache: false
- };
- return this.glassContext.services.ajax.ajax(options);
- },
- _getMemberList: function _getMemberList() {
- var objId = this.objectInfo.id;
- var objType = this.objectInfo.type;
- if (objType !== 'group' && objType !== 'role') {
- this.logger.error("Can't get member list for object type: " + this.objectInfo.type);
- var resp = $.Deferred();
- resp.reject(resp, "Can't get member list for object type: " + this.objectInfo.type);
- return resp.promise();
- }
- var membersURL = 'v1/' + objType + "s/" + objId + '/members';
- var options = {
- dataType: 'json',
- type: 'GET',
- data: {},
- url: membersURL,
- cache: false
- };
- return this.glassContext.services.ajax.ajax(options);
- },
- _getMembers: function _getMembers() {
- var deferred = Q.defer();
- switch (this.objectInfo.type) {
- case 'group':
- var isEveryoneGroup = this.objectInfo.searchPath.indexOf("CAMID(\"::Everyone") >= 0;
- var isAllAuthUserGroup = this.objectInfo.searchPath.indexOf("CAMID(\"::All Authenticated Users") >= 0;
- if (isEveryoneGroup) {
- deferred.resolve('everyone');
- } else if (isAllAuthUserGroup) {
- deferred.resolve('allAuthUsers');
- } else {
- this._getMemberList().then(function (data) {
- this._checkifUnavailableMembersExist(data);
- var members = [].concat(data.groups, data.users);
- deferred.resolve(members);
- }.bind(this), function (dfd, err) {
- deferred.reject(err);
- });
- }
- break;
- case 'role':
- this._getMemberList().then(function (data) {
- this._checkifUnavailableMembersExist(data);
- var members = [].concat(data.groups, data.users, data.roles);
- deferred.resolve(members);
- }.bind(this), function (dfd, err) {
- deferred.reject(err);
- });
- break;
- default:
- deferred.resolve();
- break;
- }
- return deferred.promise;
- },
- _checkifUnavailableMembersExist: function _checkifUnavailableMembersExist(data) {
- if (data.unavailableMembersExist && !this.unavailableMembersExist) {
- this.unavailableMembersExist = data.unavailableMembersExist;
- }
- },
- _getBlankHtml: function _getBlankHtml(members) {
- return '<div class="member-pane-empty">' + '<div class="emptyTableImage wft_bee"></div>' + '<div class="emptyTableText">' + StringResource.get(members + 'MemberMsg') + '</div>';
- },
- _patchItem: function _patchItem(member) {
- switch (member.type) {
- case 'account':
- member.svgIcon = "common-user";
- if (member.givenName && member.surname) {
- member.defaultName = member.givenName + ' ' + member.surname;
- }
- if (member.ancestors && member.ancestors.length > 1) {
- member.namespace = member.ancestors[1].defaultName;
- }
- break;
- case 'role':
- member.svgIcon = "common-role";
- break;
- case 'group':
- member.svgIcon = "common-group";
- break;
- default:
- this.logger.error("can not patch item of type: " + member.type);
- }
- return member;
- },
- _bindEvents: function _bindEvents() {
- this.$el.find('#addMember').on('primaryaction', function () {
- var defaultTypes = this.objectInfo.type === 'group' ? ['group', 'account'] : ['group', 'role', 'account'];
- this.addMemberSlideout = this.glassContext.appController.showSlideOut({
- 'parent': this.slideout,
- 'width': "450px",
- 'content': {
- 'module': 'bi/admin/account/slideout/SecurityObjectSelectorPane',
- 'parentView': this,
- 'objectInfo': [this.objectInfo],
- 'allowedSelectionTypes': defaultTypes,
- targetType: []
- }
- });
- }.bind(this));
- this.$el.find('td .admin-remove-member-svgIcon').on('primaryaction', this._removeMemberClick.bind(this));
- this.$el.find('#addBulkMembers').on('primaryaction', function () {
- this.addBulkMembersSlideout = this.glassContext.appController.showSlideOut({
- 'parent': this.slideout,
- 'width': "400px",
- 'content': {
- 'module': 'bi/admin/account/slideout/BulkMembershipPane',
- 'parentView': this,
- 'objectInfo': [this.objectInfo],
- 'refreshListCallback': this.refresh
- }
- });
- }.bind(this));
- },
- _removeMemberClick: function _removeMemberClick(e) {
- var item = $(e.currentTarget).closest('tr.list-item');
- if (this.objectInfo.searchPath.indexOf('CAMID("::System Administrators")') !== -1 && this.objectInfo.members && this.objectInfo.members.length === 1) {
- var oDialog = this._getNewConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), StringResource.get('unableToRemoveMembers'));
- oDialog.confirm(function () {});
- } else {
- var conDialog = this._getNewConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), StringResource.get('confirmDeleteMemberMessage'));
- conDialog.confirm(this._removeMember.bind(this, item));
- }
- e.stopPropagation();
- return false;
- },
- _getNewConfirmationDialog: function _getNewConfirmationDialog(sType, sTitle, sMessage) {
- return new ConfirmationDialog(sType, sTitle, sMessage);
- },
- _removeMember: function _removeMember(item) {
- var members = {};
- members.groups = [];
- members.users = [];
- members.roles = [];
- switch (item.attr('data-type')) {
- case 'account':
- members.users.push({
- id: item.attr('id')
- });
- break;
- case 'role':
- members.roles.push({
- id: item.attr('id')
- });
- break;
- case 'group':
- members.groups.push({
- id: item.attr('id')
- });
- break;
- default:
- this.logger.error("can not remove member of type: " + item.attr('data-type'));
- }
- return this._removeMembers(members).then(function () {
- this.objectInfo.members = _.filter(this.objectInfo.members, function (member) {
- return member.id !== item.attr('id');
- });
- this._removeItemFromMemberList(members);
- this.glassContext.appController.showToast(StringResource.get('removeMemberMsg'));
- }.bind(this));
- },
- _removeItemFromMemberList: function _removeItemFromMemberList(members) {
- var allMembers = members.groups.concat(members.users, members.roles);
- _.each(allMembers, function (member) {
- var item = _.find(this.$el.find('tr.list-item'), function (item) {
- if (item.id === member.id) {
- return item;
- }
- });
- try {
- item.removeNode(true);
- } catch (err) {
- item.remove();
- }
- }.bind(this));
- if (this.widgetKeyController) {
- this.widgetKeyController.setInitialTabIndex();
- }
- }
- });
- return MembersTab;
- });
|