aboutsummaryrefslogtreecommitdiff
path: root/web/app/view
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-06-06 23:18:49 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2015-06-06 23:18:49 +1200
commiteaa0044002aeaff0b5df11f8463a068a6ff2284d (patch)
treefb9cec4ad52ac09f0b75061a41947dbc89b2cf81 /web/app/view
parent40107a7886412c4582ea9a9ee946f454e28a1178 (diff)
downloadtraccar-server-eaa0044002aeaff0b5df11f8463a068a6ff2284d.tar.gz
traccar-server-eaa0044002aeaff0b5df11f8463a068a6ff2284d.tar.bz2
traccar-server-eaa0044002aeaff0b5df11f8463a068a6ff2284d.zip
Add user management window
Diffstat (limited to 'web/app/view')
-rw-r--r--web/app/view/device/Device.js5
-rw-r--r--web/app/view/device/DeviceController.js17
-rw-r--r--web/app/view/user/User.js56
-rw-r--r--web/app/view/user/UserController.js73
-rw-r--r--web/app/view/user/UserDialogController.js16
5 files changed, 165 insertions, 2 deletions
diff --git a/web/app/view/device/Device.js b/web/app/view/device/Device.js
index a166cb573..25c067242 100644
--- a/web/app/view/device/Device.js
+++ b/web/app/view/device/Device.js
@@ -54,6 +54,11 @@ Ext.define('Traccar.view.device.Device', {
disabled: true,
handler: 'onServerClick',
reference: 'settingsServerButton'
+ }, {
+ text: strings.device_settings_users,
+ disabled: true,
+ handler: 'onUsersClick',
+ reference: 'settingsUsersButton'
}]
}, {
text: strings.device_logout,
diff --git a/web/app/view/device/DeviceController.js b/web/app/view/device/DeviceController.js
index 451b6bbf3..f45f348b6 100644
--- a/web/app/view/device/DeviceController.js
+++ b/web/app/view/device/DeviceController.js
@@ -21,12 +21,14 @@ Ext.define('Traccar.view.device.DeviceController', {
requires: [
'Traccar.view.device.DeviceDialog',
'Traccar.view.user.UserDialog',
- 'Traccar.view.admin.ServerDialog'
+ 'Traccar.view.admin.ServerDialog',
+ 'Traccar.view.user.User'
],
init: function() {
if (Traccar.getApplication().getUser().get('admin')) {
this.lookupReference('settingsServerButton').setDisabled(false);
+ this.lookupReference('settingsUsersButton').setDisabled(false);
}
},
@@ -86,6 +88,19 @@ Ext.define('Traccar.view.device.DeviceController', {
var dialog = Ext.create('Traccar.view.admin.ServerDialog');
dialog.down('form').loadRecord(server);
dialog.show();
+ },
+
+ onUsersClick: function() {
+ Ext.create('Ext.window.Window', {
+ title: strings.login_users_title,
+ width: styles.window_width,
+ height: styles.window_height,
+ layout: 'fit',
+ modal: true,
+ items: {
+ xtype: 'user-view'
+ }
+ }).show();
}
});
diff --git a/web/app/view/user/User.js b/web/app/view/user/User.js
new file mode 100644
index 000000000..fa9c9201a
--- /dev/null
+++ b/web/app/view/user/User.js
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2015 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.user.User', {
+ extend: 'Ext.grid.Panel',
+ xtype: 'user-view',
+
+ requires: [
+ 'Traccar.view.user.UserController'
+ ],
+
+ controller: 'user',
+ store: 'Users',
+
+ selType: 'rowmodel',
+
+ tbar: [{
+ text: strings.device_add,
+ handler: 'onAddClick',
+ reference: 'deviceAddButton'
+ }, {
+ text: strings.device_edit,
+ disabled: true,
+ handler: 'onEditClick',
+ reference: 'userEditButton'
+ }, {
+ text: strings.device_remove,
+ disabled: true,
+ handler: 'onRemoveClick',
+ reference: 'userRemoveButton'
+ }],
+
+ listeners: {
+ selectionchange: 'onSelectionChange'
+ },
+
+ columns: [
+ { text: strings.login_name, dataIndex: 'name', flex: 1 },
+ { text: strings.login_email, dataIndex: 'email', flex: 1 },
+ { text: strings.login_admin, dataIndex: 'admin', flex: 1 }
+ ]
+
+});
diff --git a/web/app/view/user/UserController.js b/web/app/view/user/UserController.js
new file mode 100644
index 000000000..2b587b3d3
--- /dev/null
+++ b/web/app/view/user/UserController.js
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2015 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.user.UserController', {
+ extend: 'Ext.app.ViewController',
+ alias: 'controller.user',
+
+ requires: [
+ 'Traccar.view.user.UserDialog'
+ ],
+
+ init: function() {
+ Ext.getStore('Users').load();
+ },
+
+ onLogoutClick: function() {
+ Traccar.LoginManager.logout();
+ },
+
+ onAddClick: function() {
+ var user = Ext.create('Traccar.model.User');
+ var dialog = Ext.create('Traccar.view.user.UserDialog');
+ dialog.down('form').loadRecord(user);
+ dialog.show();
+ },
+
+ onEditClick: function() {
+ var user = this.getView().getSelectionModel().getSelection()[0];
+ var dialog = Ext.create('Traccar.view.user.UserDialog');
+ dialog.down('form').loadRecord(user);
+ dialog.show();
+ },
+
+ onRemoveClick: function() {
+ var user = this.getView().getSelectionModel().getSelection()[0];
+ Ext.Msg.show({
+ title: strings.login_user_title,
+ message: strings.user_remove_confirm,
+ buttons: Ext.Msg.YESNO,
+ buttonText: {
+ yes: strings.dialog_delete,
+ no: strings.dialog_cancel
+ },
+ fn: function(btn) {
+ if (btn === 'yes') {
+ var store = Ext.getStore('Users');
+ store.remove(user);
+ store.sync();
+ }
+ }
+ });
+ },
+
+ onSelectionChange: function(selected) {
+ var disabled = selected.length > 0;
+ this.lookupReference('userEditButton').setDisabled(disabled);
+ this.lookupReference('userRemoveButton').setDisabled(disabled);
+ }
+
+});
diff --git a/web/app/view/user/UserDialogController.js b/web/app/view/user/UserDialogController.js
index 4c6b6c42f..1ec14c5e8 100644
--- a/web/app/view/user/UserDialogController.js
+++ b/web/app/view/user/UserDialogController.js
@@ -21,7 +21,21 @@ Ext.define('Traccar.view.user.UserDialogController', {
onSaveClick: function(button) {
var dialog = button.up('window').down('form');
dialog.updateRecord();
- dialog.getRecord().save();
+ var record = dialog.getRecord();
+ if (record === Traccar.getApplication().getUser()) {
+ record.save();
+ } else {
+ var store = Ext.getStore('Users');
+ if (record.phantom) {
+ store.add(record);
+ }
+ store.sync({
+ failure: function(batch) {
+ store.rejectChanges(); // TODO
+ Traccar.ErrorManager.check(true, batch.exceptions[0].getResponse());
+ }
+ });
+ }
button.up('window').close();
},