From 61bd26d530710e74ef1c0dfd6920b9c1d27cfdd5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 5 Jun 2015 19:18:58 +1200 Subject: Add user account dialog --- src/org/traccar/database/DataManager.java | 7 ++++ src/org/traccar/http/MainServlet.java | 8 ++++ web/app/Resources.js | 3 ++ web/app/model/User.js | 11 +++++- web/app/view/device/Device.js | 3 ++ web/app/view/device/DeviceController.js | 8 ++++ web/app/view/user/UserDialog.js | 65 +++++++++++++++++++++++++++++++ web/app/view/user/UserDialogController.js | 32 +++++++++++++++ 8 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 web/app/view/user/UserDialog.js create mode 100644 web/app/view/user/UserDialogController.js diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index e9647922c..6cfd84d41 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -228,6 +228,13 @@ public class DataManager { .setObject(user) .executeUpdate()); } + + public void updateUser(User user) throws SQLException { + QueryBuilder.create(dataSource, + "UPDATE user SET name = :name, email = :email, admin = :admin WHERE id = :id;") + .setObject(user) + .executeUpdate(); + } public Collection getPermissions() throws SQLException { return QueryBuilder.create(dataSource, diff --git a/src/org/traccar/http/MainServlet.java b/src/org/traccar/http/MainServlet.java index 18430f0c3..84ec25906 100644 --- a/src/org/traccar/http/MainServlet.java +++ b/src/org/traccar/http/MainServlet.java @@ -34,6 +34,8 @@ public class MainServlet extends BaseServlet { logout(req, resp); } else if (command.equals("/register")) { register(req, resp); + } else if (command.equals("/user/update")) { + update(req, resp); } else { return false; } @@ -70,5 +72,11 @@ public class MainServlet extends BaseServlet { Context.getDataManager().addUser(user); sendResponse(resp.getWriter(), true); } + + private void update(HttpServletRequest req, HttpServletResponse resp) throws Exception { + Context.getDataManager().updateUser(JsonConverter.objectFromJson( + req.getReader(), new User())); + sendResponse(resp.getWriter(), true); + } } diff --git a/web/app/Resources.js b/web/app/Resources.js index def231844..28bf31489 100644 --- a/web/app/Resources.js +++ b/web/app/Resources.js @@ -21,9 +21,11 @@ var strings = { error_unknown: 'Unknown error', login_title: 'Login', + login_user_title: 'User', login_name: 'Name', login_email: 'Email', login_password: 'Password', + login_admin: 'Admin', login_register: 'Register', login_login: 'Login', login_failed: 'Incorrect email address or password', @@ -39,6 +41,7 @@ var strings = { device_remove: 'Remove', device_logout: 'Logout', device_settings: 'Settings', + device_settings_user: 'Account', device_settings_server: 'Server', report_title: 'Reports', diff --git a/web/app/model/User.js b/web/app/model/User.js index 04e3e25b5..4ed3a98d3 100644 --- a/web/app/model/User.js +++ b/web/app/model/User.js @@ -24,5 +24,14 @@ Ext.define('Traccar.model.User', { { name: 'email', type: 'string' }, { name: 'password', type: 'string' }, { name: 'admin', type: 'boolean' } - ] + ], + + proxy: { + type: 'ajax', + url: '/api/user/update', + writer: { + type: 'json', + writeAllFields: true + } + } }); diff --git a/web/app/view/device/Device.js b/web/app/view/device/Device.js index bccb43e9e..a166cb573 100644 --- a/web/app/view/device/Device.js +++ b/web/app/view/device/Device.js @@ -47,6 +47,9 @@ Ext.define('Traccar.view.device.Device', { }, { text: strings.device_settings, menu: [{ + text: strings.device_settings_user, + handler: 'onUserClick' + }, { text: strings.device_settings_server, disabled: true, handler: 'onServerClick', diff --git a/web/app/view/device/DeviceController.js b/web/app/view/device/DeviceController.js index 6d88d8d3e..451b6bbf3 100644 --- a/web/app/view/device/DeviceController.js +++ b/web/app/view/device/DeviceController.js @@ -20,6 +20,7 @@ Ext.define('Traccar.view.device.DeviceController', { requires: [ 'Traccar.view.device.DeviceDialog', + 'Traccar.view.user.UserDialog', 'Traccar.view.admin.ServerDialog' ], @@ -73,6 +74,13 @@ Ext.define('Traccar.view.device.DeviceController', { this.lookupReference('deviceRemoveButton').setDisabled(disabled); }, + onUserClick: function() { + var user = Traccar.getApplication().getUser(); + var dialog = Ext.create('Traccar.view.user.UserDialog'); + dialog.down('form').loadRecord(user); + dialog.show(); + }, + onServerClick: function() { var server = Traccar.getApplication().getServer(); var dialog = Ext.create('Traccar.view.admin.ServerDialog'); diff --git a/web/app/view/user/UserDialog.js b/web/app/view/user/UserDialog.js new file mode 100644 index 000000000..7b6dc4199 --- /dev/null +++ b/web/app/view/user/UserDialog.js @@ -0,0 +1,65 @@ +/* + * 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.UserDialog', { + extend: 'Ext.window.Window', + xtype: 'user-dialog', + + requires: [ + 'Traccar.view.user.UserDialogController' + ], + + controller: 'userdialog', + + bodyPadding: styles.panel_padding, + title: strings.login_user_title, + resizable: false, + modal: true, + + items: { + xtype: 'form', + items: [{ + xtype: 'textfield', + name: 'name', + fieldLabel: strings.login_name + }, { + xtype: 'textfield', + name: 'email', + fieldLabel: strings.login_email, + allowBlank: false + }, { + xtype: 'textfield', + name: 'password', + fieldLabel: strings.login_password, + inputType: 'password', + allowBlank: false + }, { + xtype: 'checkboxfield', + name: 'admin', + fieldLabel: strings.login_admin, + allowBlank: false + }] + }, + + buttons: [{ + text: strings.dialog_save, + handler: 'onSaveClick' + }, { + text: strings.dialog_cancel, + handler: 'onCancelClick' + }] + +}); diff --git a/web/app/view/user/UserDialogController.js b/web/app/view/user/UserDialogController.js new file mode 100644 index 000000000..4c6b6c42f --- /dev/null +++ b/web/app/view/user/UserDialogController.js @@ -0,0 +1,32 @@ +/* + * 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.UserDialogController', { + extend: 'Ext.app.ViewController', + alias: 'controller.userdialog', + + onSaveClick: function(button) { + var dialog = button.up('window').down('form'); + dialog.updateRecord(); + dialog.getRecord().save(); + button.up('window').close(); + }, + + onCancelClick: function(button) { + button.up('window').close(); + } + +}); -- cgit v1.2.3