Browse Source

UI-3147: Use common submodule to delete SmartPBX user (#100)

* Use object instead of parameter list for function usersDeleteDialog

* Refactor user deletion methods, and subscribe to new user deletion event

* Remove user deletion and related unused functions

* Use common event to delete user

* Remove user deleteDialog and related data

* Rename deleteSmartUser dialog event
4.3
Guillermo Gutiérrez 7 years ago
committed by GitHub
parent
commit
e82c9c841f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 335 deletions
  1. +0
    -17
      i18n/de-DE.json
  2. +0
    -17
      i18n/en-US.json
  3. +0
    -13
      i18n/ru-RU.json
  4. +14
    -249
      submodules/users/users.js
  5. +0
    -5
      submodules/users/users.scss
  6. +0
    -34
      submodules/users/views/deleteDialog.html

+ 0
- 17
i18n/de-DE.json View File

@ -767,23 +767,6 @@
"__version": "4.0",
"confirmMobileUnAssignment": "Sie versuchen gerade, die Zuweisung eines mobilen Geräts aufzuheben. Beachten Sie, dass dadurch auch die Verknüpfung der zu diesem Gerät ({{variable}}) zugehörigen Telefonnummer mit diesem Benutzer aufgehoben wird. Möchten Sie den Vorgang fortsetzen?",
"__comment": "UI-2138: Neues Dialogfeld: Benutzer löschen",
"__version": "3.22",
"deleteDialog": {
"title": "Löschen von {{ name }} aus dem System",
"headerAdmin": "Sie versuchen gerade, einen ADMIN zu löschen! Wenn man einen Admin löscht, werden sein Benutzer und seine Voicemailbox gelöscht, und seine Geräte sind ihm nicht länger zugewiesen. Außerdem wird dieser Admin dann nicht mehr in der Lage sein, diese UI zu verwalten. Möchten Sie den Vorgang wirklich fortsetzen?",
"headerUser": "Durch das Löschen eines Benutzers werden dieser Benutzer und seine Voicemailboxen gelöscht. Seine Geräte und Nummern sind ihm nicht länger zugewiesen. Möchten Sie den Vorgang fortsetzen?",
"deleteUser": "Löschen",
"deleteUserName": "„{{variable}}“ löschen",
"proceed": "Fortfahren",
"deleteDevices": "Die Geräte dieses Benutzers ebenfalls entfernen",
"deleteDevicesHelp": "Wenn Sie diese Option nicht aktivieren, verlieren diese Geräte ihre Zuweisung und tauchen in der Liste freier Geräte auf.",
"__comment": "UI-2467: Beim Löschen eines Benutzers in Smart PBX werden auch Konferenzen entfernt",
"__version": "4.0",
"deleteConferences": "Die Konferenzen dieses Benutzers ebenfalls entfernen",
"deleteConferencesHelp": "Wenn Sie diese Option deaktiviert lassen, werden Sie die Konferenznummer des Benutzers nirgends anders verwenden können, da sie weiterhin von dieser Konferenz belegt sein wird."
},
"__comment": "UI-2921: Neues Dialogfeld: Benutzer löschen",
"__version": "4.2",
"impersonate": "Identität annehmen",


+ 0
- 17
i18n/en-US.json View File

@ -764,23 +764,6 @@
"__version": "4.0",
"confirmMobileUnAssignment": "You are about to un-assign a Mobile device. Be aware the phone number associated with this device ({{variable}}) will also be un-assigned from this user. Are you sure?",
"__comment": "UI-2138: Delete User new Dialog",
"__version": "3.22",
"deleteDialog": {
"title": "Remove {{ name }} from the system",
"headerAdmin": "You're about to delete an ADMIN! Deleting an admin will delete his user, voicemail boxes and unassign his devices. It will also prevent them from managing this UI. Do you want to continue?",
"headerUser": "Deleting a user will delete this user and his Voicemail Box, and unassign the devices and numbers that were assigned to this user. Do you want to continue?",
"deleteUser": "Delete",
"deleteUserName": "Delete \"{{variable}}\"",
"proceed": "Proceed",
"deleteDevices": "Also remove this user's devices from the system",
"deleteDevicesHelp": "If you leave this option unchecked, we'll just unassign these devices and they will show up in the list of Spare Devices",
"__comment": "UI-2467: also remove conferences when deleting a user from smartpbx",
"__version": "4.0",
"deleteConferences": "Also remove this user's conferences from the system",
"deleteConferencesHelp": "If you leave this option unchecked, you won't be able to use the user's conference number anywhere else, as it will still be used by that conference."
},
"__comment": "UI-2921: Delete User new Dialog",
"__version": "4.2",
"impersonate": "Impersonate",


+ 0
- 13
i18n/ru-RU.json View File

@ -618,19 +618,6 @@
}
},
"confirmMobileUnAssignment": "Вы собираетесь открепить мобильное устройство. Для информации, номер телефона ассоциированный с устройством ({{variable}}) также будет откреплен от данного пользователя. Вы уверены?",
"deleteDialog": {
"title": "Удалить {{ name }} из системы",
"headerAdmin": "Вы собираетесь удалить АДМИНИСТРАТОРА! Удаление администратора также удалит его голосовой почтовый ящик и открепит устройства и номера ранее закрепленные за пользователем. Также в дальнейшем он не сможет управлять через данный пользовательский интерфейс. Хотите продолжить?",
"headerUser": "Удаление пользователя также удалит его голосовой почтовый ящик и открепит устройства и номера ранее закрепленные за пользователем. Хотите продолжить?",
"deleteUser": "Удалить",
"deleteUserName": "Удалить \"{{variable}}\"",
"proceed": "Выполняем",
"deleteDevices": "Также удалить устройства пользователя из системы",
"deleteDevicesHelp": "Если оставите эту опцию не выделенной, мы просто открепим его устройства и они будут отображаться в списке Доступных Устройств",
"deleteConferences": "Также удалить конференц-комнаты пользователя из системы",
"deleteConferencesHelp": "Если оставите эту опцию не выделенной, Вы не сможете использовать номер конференции пользователя где-либо еще, так как он будет использоваться данной конференцией."
}
},
"strategy": {


+ 14
- 249
submodules/users/users.js View File

@ -508,41 +508,6 @@ define(function(require) {
return result;
},
usersDeleteDialog: function(user, callback) {
var self = this,
dataTemplate = {
user: user
},
dialogTemplate = $(self.getTemplate({
name: 'deleteDialog',
data: dataTemplate,
submodule: 'users'
}));
monster.ui.tooltips(dialogTemplate);
dialogTemplate.find('#confirm_button').on('click', function() {
var removeDevices = dialogTemplate.find('#delete_devices').is(':checked'),
removeConferences = dialogTemplate.find('#delete_conferences').is(':checked');
self.usersDelete(user.id, removeDevices, removeConferences, function(data) {
popup.dialog('close').remove();
callback && callback(data);
});
});
dialogTemplate.find('#cancel_button').on('click', function() {
popup.dialog('close').remove();
});
var popup = monster.ui.dialog(dialogTemplate, {
title: '<i class="fa fa-question-circle monster-primary-color"></i>',
position: ['center', 20],
dialogClass: 'monster-alert'
});
},
usersBindEvents: function(template, parent, data) {
var self = this,
currentUser,
@ -920,17 +885,20 @@ define(function(require) {
template.on('click', '#delete_user', function() {
var dataUser = $(this).parents('.grid-row').data();
self.usersDeleteDialog(dataUser, function(data) {
monster.ui.toast({
type: 'success',
message: self.getTemplate({
name: '!' + self.i18n.active().users.toastrMessages.userDelete,
data: {
name: data.first_name + ' ' + data.last_name
}
})
});
self.usersRender();
monster.pub('common.deleteSmartUser.renderPopup', {
user: dataUser,
callback: function(data) {
monster.ui.toast({
type: 'success',
message: self.getTemplate({
name: '!' + self.i18n.active().users.toastrMessages.userDelete,
data: {
name: data.first_name + ' ' + data.last_name
}
})
});
self.usersRender();
}
});
});
@ -3644,209 +3612,6 @@ define(function(require) {
},
/* Utils */
usersDelete: function(userId, removeDevices, removeConferences, callback) {
var self = this;
monster.parallel({
devices: function(callback) {
self.usersListDeviceUser(userId, function(devices) {
callback(null, devices);
});
},
vmbox: function(callback) {
self.usersListVMBoxesUser(userId, function(data) {
callback(null, data);
});
},
callflows: function(callback) {
self.usersListCallflowsUser(userId, function(data) {
callback(null, data);
});
},
conferences: function(callback) {
self.usersListConferences(userId, function(data) {
callback(null, data);
});
}
}, function(error, results) {
var listFnDelete = [];
_.each(results.devices, function(device) {
listFnDelete.push(function(callback) {
if (removeDevices) {
self.usersDeleteDevice(device.id, function(data) {
callback(null, '');
});
} else {
self.usersUnassignDevice(device.id, function(data) {
callback(null, '');
});
}
});
});
listFnDelete.push(function(callback) {
self.usersRemoveBulkConferences(results.conferences, removeConferences, function() {
callback(null, '');
});
});
_.each(results.callflows, function(callflow) {
/*
Special case for users with mobile devices:
reassign mobile devices to their respective mobile callflow instead of just deleting the callflow
*/
if (callflow.type === 'mobile') {
listFnDelete.push(function(mainCallback) {
monster.parallel({
callflow: function(callback) {
self.usersGetCallflow(callflow.id, function(data) {
callback(null, data);
});
},
mobileDevice: function(callback) {
self.usersGetMobileDevice(callflow.numbers[0].slice(2), function(data) {
callback(null, data);
});
}
}, function(err, results) {
var fullCallflow = results.callflow,
mobileDeviceId = results.mobileDevice.id;
delete fullCallflow.owner_id;
$.extend(true, fullCallflow, {
flow: {
module: 'device',
data: {
id: mobileDeviceId
}
}
});
self.usersUpdateCallflow(fullCallflow, function(data) {
mainCallback(null, data);
});
});
});
} else {
listFnDelete.push(function(callback) {
self.usersDeleteCallflow(callflow.id, function(data) {
callback(null, '');
});
});
}
});
_.each(results.vmbox, function(vmbox) {
listFnDelete.push(function(callback) {
self.usersDeleteVMBox(vmbox.id, function(data) {
callback(null, '');
});
});
});
monster.parallel(listFnDelete, function(err, resultsDelete) {
self.usersDeleteUser(userId, function(data) {
callback && callback(data);
});
});
});
},
usersGetCallflow: function(callflowId, callback) {
var self = this;
self.callApi({
resource: 'callflow.get',
data: {
accountId: self.accountId,
callflowId: callflowId
},
success: function(data, status) {
callback(data.data);
}
});
},
usersGetMobileDevice: function(mdn, callback) {
var self = this;
self.callApi({
resource: 'device.list',
data: {
accountId: self.accountId,
data: {
filters: {
'filter_mobile.mdn': encodeURIComponent(mdn)
}
}
},
success: function(data, status) {
callback(data.data);
}
});
},
usersDeleteUser: function(userId, callback) {
var self = this;
self.callApi({
resource: 'user.delete',
data: {
userId: userId,
accountId: self.accountId,
data: {}
},
success: function(data) {
callback(data.data);
}
});
},
usersDeleteVMBox: function(vmboxId, callback) {
var self = this;
self.callApi({
resource: 'voicemail.delete',
data: {
voicemailId: vmboxId,
accountId: self.accountId,
data: {}
},
success: function(data) {
callback(data.data);
}
});
},
usersUnassignDevice: function(deviceId, callback) {
var self = this;
self.usersGetDevice(deviceId, function(deviceGet) {
delete deviceGet.owner_id;
self.usersUpdateDevice(deviceGet, function(updatedDevice) {
callback && callback(updatedDevice);
});
});
},
usersDeleteDevice: function(deviceId, callback) {
var self = this;
self.callApi({
resource: 'device.delete',
data: {
deviceId: deviceId,
accountId: self.accountId,
data: {}
},
success: function(data) {
callback(data.data);
}
});
},
usersDeleteCallflow: function(callflowId, callback) {
var self = this;


+ 0
- 5
submodules/users/users.scss View File

@ -759,11 +759,6 @@
margin-top: 10px;
}
/**** CSS for delete user dialog ****/
.delete-user-wrapper .dialog-text {
margin-top: 10px;
}
.monster-feature-popup-container {
.feature-popup-title {
display: flex;


+ 0
- 34
submodules/users/views/deleteDialog.html View File

@ -1,34 +0,0 @@
<div class="delete-user-wrapper">
<div class="alert-dialog">
<div class="dialog-content">
<div class="dialog-header">{{ replaceVar i18n.users.deleteDialog.deleteUserName user.name }}</div>
<div>
{{#monsterCheckbox i18n.users.deleteDialog.deleteDevices }}
<input id="delete_devices" type="checkbox"></input>
{{/monsterCheckbox}}
<i class="help-popover fa fa-question-circle fa-lg" data-original-title="{{ i18n.users.deleteDialog.deleteDevicesHelp }}" data-placement="left" data-toggle="tooltip"></i>
</div>
<div>
{{#monsterCheckbox i18n.users.deleteDialog.deleteConferences }}
<input id="delete_conferences" type="checkbox"></input>
{{/monsterCheckbox}}
<i class="help-popover fa fa-question-circle fa-lg" data-original-title="{{ i18n.users.deleteDialog.deleteConferencesHelp }}" data-placement="left" data-toggle="tooltip"></i>
</div>
<div class="dialog-text">
{{#compare user.priv_level "===" "admin"}}
{{ i18n.users.deleteDialog.headerAdmin }}
{{else}}
{{ i18n.users.deleteDialog.headerUser }}
{{/compare}}
</div>
</div>
<div class="alert-buttons-wrapper clearfix">
<button class="monster-button" id="cancel_button">{{ i18n.cancel }}</button>
<button class="monster-button-success" id="confirm_button">{{ i18n.users.deleteDialog.proceed }}</button>
</div>
</div>
</div>

Loading…
Cancel
Save