diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2016-03-09 22:03:30 +1300 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2016-03-09 22:03:30 +1300 |
commit | 71c5871dc0221d7a82851f2c3ca3cd2b594982f2 (patch) | |
tree | 4bd874a7be91a346b162c3e08f9c3b7499896bf9 /web | |
parent | c22cc6982a18eb3601fdc8fb8447b5a2ba73690a (diff) | |
download | traccar-server-71c5871dc0221d7a82851f2c3ca3cd2b594982f2.tar.gz traccar-server-71c5871dc0221d7a82851f2c3ca3cd2b594982f2.tar.bz2 traccar-server-71c5871dc0221d7a82851f2c3ca3cd2b594982f2.zip |
Add window to link users and groups
Diffstat (limited to 'web')
-rw-r--r-- | web/app/Application.js | 1 | ||||
-rw-r--r-- | web/app/store/AllGroups.js | 28 | ||||
-rw-r--r-- | web/app/view/UserDevices.js | 6 | ||||
-rw-r--r-- | web/app/view/UserGroups.js | 44 | ||||
-rw-r--r-- | web/app/view/UserGroupsController.js | 79 | ||||
-rw-r--r-- | web/app/view/Users.js | 5 | ||||
-rw-r--r-- | web/app/view/UsersController.js | 12 |
7 files changed, 173 insertions, 2 deletions
diff --git a/web/app/Application.js b/web/app/Application.js index f81e87d5f..69ce8f891 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -36,6 +36,7 @@ Ext.define('Traccar.Application', { stores: [ 'Groups', 'Devices', + 'AllGroups', 'AllDevices', 'Positions', 'LatestPositions', diff --git a/web/app/store/AllGroups.js b/web/app/store/AllGroups.js new file mode 100644 index 000000000..880ccc8f5 --- /dev/null +++ b/web/app/store/AllGroups.js @@ -0,0 +1,28 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.store.AllGroups', { + extend: 'Ext.data.Store', + model: 'Traccar.model.Group', + + proxy: { + type: 'rest', + url: '/api/groups', + extraParams: { + all: true + } + } +}); diff --git a/web/app/view/UserDevices.js b/web/app/view/UserDevices.js index f42f7c1bb..fe16dd93a 100644 --- a/web/app/view/UserDevices.js +++ b/web/app/view/UserDevices.js @@ -38,9 +38,11 @@ Ext.define('Traccar.view.UserDevices', { columns: [{ text: Strings.sharedName, - dataIndex: 'name', flex: 1 + dataIndex: 'name', + flex: 1 }, { text: Strings.deviceIdentifier, - dataIndex: 'uniqueId', flex: 1 + dataIndex: 'uniqueId', + flex: 1 }] }); diff --git a/web/app/view/UserGroups.js b/web/app/view/UserGroups.js new file mode 100644 index 000000000..cb0f0bd5d --- /dev/null +++ b/web/app/view/UserGroups.js @@ -0,0 +1,44 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.UserGroups', { + extend: 'Ext.grid.Panel', + xtype: 'userGroupsView', + + requires: [ + 'Traccar.view.UserGroupsController' + ], + + controller: 'userGroups', + store: 'AllGroups', + + selModel: { + selType: 'checkboxmodel', + checkOnly: true, + showHeaderCheckbox: false + }, + + listeners: { + beforedeselect: 'onBeforeDeselect', + beforeselect: 'onBeforeSelect' + }, + + columns: [{ + text: Strings.sharedName, + dataIndex: 'name', + flex: 1 + }] +}); diff --git a/web/app/view/UserGroupsController.js b/web/app/view/UserGroupsController.js new file mode 100644 index 000000000..662508f0a --- /dev/null +++ b/web/app/view/UserGroupsController.js @@ -0,0 +1,79 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.UserGroupsController', { + extend: 'Ext.app.ViewController', + alias: 'controller.userGroups', + + init: function () { + this.userId = this.getView().user.getData().id; + this.getView().getStore().load({ + scope: this, + callback: function (records, operation, success) { + var userStore = Ext.create('Traccar.store.Groups'); + + userStore.load({ + params: { + userId: this.userId + }, + scope: this, + callback: function (records, operation, success) { + var i, index; + if (success) { + for (i = 0; i < records.length; i++) { + index = this.getView().getStore().find('id', records[i].getData().id); + this.getView().getSelectionModel().select(index, true, true); + } + } + } + }); + } + }); + }, + + onBeforeSelect: function (object, record, index) { + Ext.Ajax.request({ + scope: this, + url: '/api/permissions/groups', + jsonData: { + userId: this.userId, + groupId: record.getData().id + }, + callback: function (options, success, response) { + if (!success) { + Traccar.app.showError(response); + } + } + }); + }, + + onBeforeDeselect: function (object, record, index) { + Ext.Ajax.request({ + scope: this, + method: 'DELETE', + url: '/api/permissions/groups', + jsonData: { + userId: this.userId, + groupId: record.getData().id + }, + callback: function (options, success, response) { + if (!success) { + Traccar.app.showError(response); + } + } + }); + } +}); diff --git a/web/app/view/Users.js b/web/app/view/Users.js index 684931559..408a70885 100644 --- a/web/app/view/Users.js +++ b/web/app/view/Users.js @@ -35,6 +35,11 @@ Ext.define('Traccar.view.Users', { disabled: true, handler: 'onDevicesClick', reference: 'userDevicesButton' + }, { + text: Strings.settingsGroups, + disabled: true, + handler: 'onGroupsClick', + reference: 'userGroupsButton' }] }, diff --git a/web/app/view/UsersController.js b/web/app/view/UsersController.js index 3d0e813e8..6e8921026 100644 --- a/web/app/view/UsersController.js +++ b/web/app/view/UsersController.js @@ -75,10 +75,22 @@ Ext.define('Traccar.view.UsersController', { }).show(); }, + onGroupsClick: function () { + var user = this.getView().getSelectionModel().getSelection()[0]; + Ext.create('Traccar.view.BaseWindow', { + title: Strings.settingsGroups, + items: { + xtype: 'userDevicesView', + user: user + } + }).show(); + }, + onSelectionChange: function (selected) { var disabled = selected.length > 0; this.lookupReference('toolbarEditButton').setDisabled(disabled); this.lookupReference('toolbarRemoveButton').setDisabled(disabled); this.lookupReference('userDevicesButton').setDisabled(disabled); + this.lookupReference('userGroupsButton').setDisabled(disabled); } }); |