123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- "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(['q', 'underscore', 'doT', 'bi/commons/ui/Slideout', 'bi/admin/account/AccountExplorer', 'bi/admin/account/services/SecurityObjectSelectorAdaptor', 'bi/admin/common/slideout/BasePane', 'bi/admin/common/ui/MagicWand', 'bacontentnav/utils/UIHelper', 'bacontentnav/common/ui/Breadcrumbs', 'bi/admin/common/ui/listview/ListView', 'bi/admin/nls/StringResource', 'text!bi/admin/account/templates/SecurityObjectSelectorTemplate.html', 'bi/admin/common/utils/AJAXUtils', 'bi/admin/account/ui/SecurityObjectExplorerView'], function (Q, _, dot, Slideout, AccountExplorer, SecurityObjectSelectorAdaptor, BasePane, MagicWand, UIHelper, Breadcrumbs, ListView, StringResource, template, AJAXUtils, SecurityObjectExplorerView) {
- 'use strict'; //NOSONAR: meant to be strict
- var SecurityObjectSelectorPane = BasePane.extend({
- title: StringResource.get('addMembersPaneTitle'),
- showBreadcrumbs: true,
- multiSelect: true,
- _breadCrumbs: null,
- /**
- * @param options.el {node} - container dom node
- */
- init: function init(options) {
- SecurityObjectSelectorPane.inherited('init', this, arguments);
- _.extend(this, options);
- var cognosNamespaceOnly = options.cognosNamespaceOnly ? options.cognosNamespaceOnly : false;
- this.title = !options.fromFilterPane ? this.title : StringResource.get('selectauser');
- this.explorerView = this._getNewSecurityObjectExplorerView({
- glassContext: this.glassContext,
- showBreadcrumbs: true,
- hideSearch: options.hideSearch,
- type: options.type,
- accountExplorer: options.accountExplorer,
- listAdaptor: this._getNewSecurityObjectSelectorAdaptor({
- glassContext: this.glassContext,
- 'allowedSelectionTypes': options.allowedSelectionTypes,
- "cognosNamespaceOnly": cognosNamespaceOnly,
- 'enableAccountItemLink': options.enableAccountItemLink
- }),
- parent: this,
- onSelectionChange: this._onSelectionChange.bind(this)
- });
- if (options.targetType) {
- this.explorerView.targetType = options.targetType;
- }
- },
- _getNewSecurityObjectExplorerView: function _getNewSecurityObjectExplorerView(options) {
- return new SecurityObjectExplorerView(options);
- },
- _getNewSecurityObjectSelectorAdaptor: function _getNewSecurityObjectSelectorAdaptor(options) {
- return new SecurityObjectSelectorAdaptor(options);
- },
- renderBody: function renderBody($body) {
- this.explorerView.$el = $body;
- return this.explorerView.render($body).then(function () {
- var tempObj = {};
- tempObj.strings = {
- 'add': StringResource.get('add'),
- 'close': StringResource.get('close')
- };
- var sHtml = dot.template(template)(tempObj);
- $body.append(sHtml);
- this._bindEvents();
- this.$el.addClass("securityObjectExplorer"); //reload the listView in order to readjust its flex box so it does not get overlapped by the footer
- return this.explorerView.reloadList();
- }.bind(this));
- },
- setFocus: function setFocus() {
- this.$body.find('.bi-admin-filterbar-leading input').focus();
- },
- setFocusOnMemberList: function setFocusOnMemberList() {
- if (!this.listView.setFocus()) {
- this.setFocus();
- }
- },
- _bindEvents: function _bindEvents() {
- if (this.isCopyUserProfile) {
- $('#btnAdd_addMembers').on('clicktap', this._addCopyTargetsClick.bind(this));
- } else {
- $('#btnAdd_addMembers').on('clicktap', this._addMembersClick.bind(this));
- }
- $('#btnCancel_addMembers').on('clicktap', this.slideout.hide.bind(this.slideout));
- },
- _addCopyTargetsClick: function _addCopyTargetsClick() {
- var selectedItems = this.explorerView.getSelectedObjects();
- if (selectedItems.length > 0 && !_.isUndefined(this.multiSelectCallback) && this.isCopyUserProfile) {
- this.multiSelectCallback(selectedItems);
- }
- this.slideout.hide();
- },
- _addMembersClick: function _addMembersClick() {
- return Promise.try(function () {
- var selectedItems = this.explorerView.getSelectedObjects();
- if (selectedItems.length === 0) {
- this.glassContext.appController.showToast(StringResource.get('memberSelErrorMsg'), {
- type: 'error'
- });
- } else {
- if (!_.isUndefined(this.multiSelectCallback)) {
- return this.multiSelectCallback(selectedItems);
- } else if (!_.isUndefined(this.selectedCallback)) {
- return this.selectedCallback(selectedItems[0]);
- } else {
- if (this.isAddMemberTo) {
- return this._addToAsMember(selectedItems);
- } else {
- return this._addMember(selectedItems);
- }
- }
- }
- }.bind(this));
- },
- _onSelectionChange: function _onSelectionChange() {
- var selectedItems = this.explorerView.getSelectedObjects();
- if (selectedItems.length > 0 && this._checkSelectedItemTypes(selectedItems)) {
- this._toggleAddMembersButton(false);
- } else {
- this._toggleAddMembersButton(true);
- }
- if (this.isCopyUserProfile) {
- var selectedAccounts = selectedItems.filter(function (item) {
- return item.objectClass === 'account';
- });
- var title = this.$el.find('.bi-admin-pane-header .title');
- if (selectedAccounts.length > 0) {
- $(title[0]).html(StringResource.get('usersSelected', {
- numUsers: selectedItems.length
- }));
- } else {
- $(title[0]).html(this.title);
- }
- }
- },
- _toggleAddMembersButton: function _toggleAddMembersButton(disable) {
- if (disable === true) {
- this.$el.find('button#btnAdd_addMembers').addClass('disabled');
- } else if (disable === false) {
- this.$el.find('button#btnAdd_addMembers').removeClass('disabled');
- } else {
- this.$el.find('button#btnAdd_addMembers').toggleClass('disabled');
- }
- },
- _addMembers: function _addMembers(type, id, members) {
- var userPrefURL = "";
- switch (type) {
- case 'group':
- userPrefURL = AJAXUtils.getPath('addGroupMembers', id);
- break;
- case 'role':
- userPrefURL = AJAXUtils.getPath('addRoleMembers', id);
- break;
- default:
- break;
- }
- var options = {
- dataType: 'json',
- type: 'POST',
- contentType: 'application/json; charset=utf-8',
- data: JSON.stringify(members),
- url: userPrefURL,
- cache: false
- };
- return this.glassContext.services.ajax.ajax(options);
- },
- _addToAsMember: function _addToAsMember(selectedItems) {
- var members = this._buildMembersFromObjectInfo();
- var isError = false;
- var aPromises = [];
- _.each(selectedItems, function (item) {
- if (item.permissions.indexOf('write') > -1 && _.contains(this.allowedSelectionTypes, item.objectClass)) {
- var innerDeferred = Q.defer();
- this._addMembers(item.objectClass, item.id, members).then(function (data) {
- innerDeferred.resolve(data.warning ? data.warning : StringResource.get('addMemberMsg'));
- }).fail(function (jqXHR, err) {
- innerDeferred.resolve(err.responseJSON.messages[0]);
- isError = true;
- });
- aPromises.push(innerDeferred.promise);
- } //If a user doesn't have write permissions show correct error message
- else if (item.permissions.indexOf('write') === -1) {
- var prom = Q.defer();
- prom.resolve(StringResource.get('writePermissionNeededError'));
- aPromises.push(prom.promise);
- isError = true;
- }
- }.bind(this));
- return Q.all(aPromises).then(function (messages) {
- if (!isError) {
- this.glassContext.appController.showToast(messages);
- } else {
- this.glassContext.appController.showToast(StringResource.get(messages), {
- type: 'error'
- });
- }
- }.bind(this));
- },
- _buildMembersFromObjectInfo: function _buildMembersFromObjectInfo() {
- var members = {};
- members.groups = [];
- members.users = [];
- members.roles = [];
- for (var i = 0; i < this.objectInfo.length; i++) {
- var object = this.objectInfo[i];
- if (object.type === 'group') {
- members.groups.push({
- id: object.id
- });
- } else {
- members.users.push({
- id: object.id
- });
- }
- }
- return members;
- },
- _addMember: function _addMember(selectedItems) {
- var members = {};
- members.groups = [];
- members.users = [];
- members.roles = [];
- _.each(selectedItems, function (item) {
- var memberId = item.id;
- var memberType = item.type;
- if (this.objectInfo[0].type === 'group') {
- if (memberType === 'group') {
- members.groups.push({
- id: memberId
- });
- } else {
- members.users.push({
- id: memberId
- });
- }
- } else {
- if (memberType === 'group') {
- members.groups.push({
- id: memberId
- });
- } else if (memberType === 'role') {
- members.roles.push({
- id: memberId
- });
- } else {
- members.users.push({
- id: memberId
- });
- }
- }
- }.bind(this));
- return this._addMembers(this.objectInfo[0].type, this.objectInfo[0].id, members).then(function (data) {
- this.objectInfo[0].members = data.members;
- this.parentView.refresh();
- this.glassContext.appController.showToast(data.warning ? data.warning : StringResource.get('addMemberMsg'));
- }.bind(this));
- },
- _checkSelectedItemTypes: function _checkSelectedItemTypes(selectedItems) {
- for (var i = 0; i < selectedItems.length; i++) {
- if (!_.contains(this.allowedSelectionTypes, selectedItems[i].type)) {
- return false;
- }
- }
- return true;
- }
- });
- return SecurityObjectSelectorPane;
- });
|