aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2017-03-08 19:21:24 +1300
committerGitHub <noreply@github.com>2017-03-08 19:21:24 +1300
commit2e76f6cb4487a1efd3fbe168e6168f9ed5c2df47 (patch)
treee8649620a02d050b1c2e907212ae2a0ef2cfd041
parent50a2616002602c379f408d5ecc404a59d317b0ca (diff)
parentf30f6961890371e026cd548874a31292e2de3c21 (diff)
downloadtrackermap-web-2e76f6cb4487a1efd3fbe168e6168f9ed5c2df47.tar.gz
trackermap-web-2e76f6cb4487a1efd3fbe168e6168f9ed5c2df47.tar.bz2
trackermap-web-2e76f6cb4487a1efd3fbe168e6168f9ed5c2df47.zip
Merge pull request #422 from Abyss777/sms_commands
Implement SMS commands
-rw-r--r--web/app/model/Command.js5
-rw-r--r--web/app/store/CommandTypes.js16
-rw-r--r--web/app/view/CommandDialog.js13
-rw-r--r--web/app/view/CommandDialogController.js13
-rw-r--r--web/app/view/DevicesController.js18
5 files changed, 46 insertions, 19 deletions
diff --git a/web/app/model/Command.js b/web/app/model/Command.js
index b298028f..789c3647 100644
--- a/web/app/model/Command.js
+++ b/web/app/model/Command.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,6 +26,9 @@ Ext.define('Traccar.model.Command', {
name: 'type',
type: 'string'
}, {
+ name: 'textChannel',
+ type: 'boolean'
+ }, {
name: 'attributes'
}]
});
diff --git a/web/app/store/CommandTypes.js b/web/app/store/CommandTypes.js
index ad5faba2..445f937d 100644
--- a/web/app/store/CommandTypes.js
+++ b/web/app/store/CommandTypes.js
@@ -1,5 +1,6 @@
/*
* Copyright 2016 Gabor Somogyi (gabor.g.somogyi@gmail.com)
+ * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,17 +20,9 @@ Ext.define('Traccar.store.CommandTypes', {
extend: 'Ext.data.Store',
fields: ['type', 'name'],
- listeners: {
- 'beforeload' : function (store) {
- var proxy;
- proxy = store.getProxy();
- proxy.setUrl('api/commandtypes?deviceId' + proxy.extraParams.deviceId);
- }
- },
-
proxy: {
type: 'rest',
- url: '',
+ url: 'api/commandtypes',
reader: {
type: 'json',
getData: function (data) {
@@ -46,6 +39,11 @@ Ext.define('Traccar.store.CommandTypes', {
});
return data;
}
+ },
+ listeners: {
+ 'exception' : function (proxy, response) {
+ Traccar.app.showError(response);
+ }
}
}
});
diff --git a/web/app/view/CommandDialog.js b/web/app/view/CommandDialog.js
index 24e0e191..ef486c41 100644
--- a/web/app/view/CommandDialog.js
+++ b/web/app/view/CommandDialog.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,8 +28,19 @@ Ext.define('Traccar.view.CommandDialog', {
items: {
xtype: 'form',
items: [{
+ xtype: 'checkboxfield',
+ name: 'textChannel',
+ reference: 'textChannelCheckBox',
+ inputValue: true,
+ uncheckedValue: false,
+ fieldLabel: Strings.notificationSms,
+ listeners: {
+ change: 'onTextChannelChange'
+ }
+ }, {
xtype: 'combobox',
name: 'type',
+ reference: 'commandType',
fieldLabel: Strings.sharedType,
store: 'CommandTypes',
displayField: 'name',
diff --git a/web/app/view/CommandDialogController.js b/web/app/view/CommandDialogController.js
index 6e809fa1..c2859d0a 100644
--- a/web/app/view/CommandDialogController.js
+++ b/web/app/view/CommandDialogController.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -113,9 +113,18 @@ Ext.define('Traccar.view.CommandDialogController', {
});
},
+ onTextChannelChange: function (checkbox, newValue) {
+ var typesStore = this.lookupReference('commandType').getStore();
+ typesStore.getProxy().setExtraParam('textChannel', newValue);
+ typesStore.reload();
+ },
+
onSendResult: function (options, success, response) {
if (success) {
- Ext.toast(Strings.commandSent);
+ Ext.toast({
+ html: Strings.commandSent,
+ align: 'br'
+ });
this.closeView();
} else {
Traccar.app.showError(response);
diff --git a/web/app/view/DevicesController.js b/web/app/view/DevicesController.js
index ad0dd363..742077b2 100644
--- a/web/app/view/DevicesController.js
+++ b/web/app/view/DevicesController.js
@@ -74,28 +74,34 @@ Ext.define('Traccar.view.DevicesController', {
},
onCommandClick: function () {
- var device, deviceId, command, dialog, comboStore;
+ var device, deviceId, command, dialog, typesStore, online;
device = this.getView().getSelectionModel().getSelection()[0];
+ online = device.get('status') === 'online';
deviceId = device.get('id');
+
command = Ext.create('Traccar.model.Command');
command.set('deviceId', deviceId);
+ command.set('textChannel', !online);
+
dialog = Ext.create('Traccar.view.CommandDialog');
- comboStore = dialog.down('form').down('combobox').getStore();
- comboStore.getProxy().setExtraParam('deviceId', deviceId);
+
+ typesStore = dialog.lookupReference('commandType').getStore();
+ typesStore.getProxy().setExtraParam('deviceId', deviceId);
+
dialog.down('form').loadRecord(command);
+ dialog.lookupReference('textChannelCheckBox').setDisabled(!online);
dialog.show();
},
updateButtons: function (selected) {
- var readonly, deviceReadonly, empty, online;
+ var readonly, deviceReadonly, empty;
deviceReadonly = Traccar.app.getPreference('deviceReadonly', false) && !Traccar.app.getUser().get('admin');
readonly = Traccar.app.getPreference('readonly', false) && !Traccar.app.getUser().get('admin');
empty = selected.getCount() === 0;
- online = selected.getLastSelected().get('status') === 'online';
this.lookupReference('toolbarEditButton').setDisabled(empty || readonly || deviceReadonly);
this.lookupReference('toolbarRemoveButton').setDisabled(empty || readonly || deviceReadonly);
this.lookupReference('toolbarGeofencesButton').setDisabled(empty || readonly);
- this.lookupReference('deviceCommandButton').setDisabled(empty || readonly || !online);
+ this.lookupReference('deviceCommandButton').setDisabled(empty || readonly);
},
onSelectionChange: function (selected) {