Browse Source

Add eavesdrop submodule

pull/4/head
Vladimir Barkasov 6 years ago
parent
commit
d1baadd52a
5 changed files with 184 additions and 2 deletions
  1. +2
    -1
      src/apps/callflows/app.js
  2. +0
    -0
      src/apps/callflows/submodules/eavesdrop/eavesdrop.css
  3. +133
    -0
      src/apps/callflows/submodules/eavesdrop/eavesdrop.js
  4. +48
    -0
      src/apps/callflows/submodules/eavesdrop/views/eavesdrop.html
  5. +1
    -1
      src/apps/callflows/submodules/groups/groups.js

+ 2
- 1
src/apps/callflows/app.js View File

@ -4,9 +4,11 @@ define(function(require) {
monster = require('monster');
var appSubmodules = [
'blacklist',
'callcenter',
'conference',
'device',
'directory',
'eavesdrop',
'faxbox',
'featurecodes',
'groups',
@ -19,7 +21,6 @@ define(function(require) {
'timeofday',
'user',
'vmbox',
'callcenter'
];
var appSubmodulesFullPath = _.map(appSubmodules, function(name) {


+ 0
- 0
src/apps/callflows/submodules/eavesdrop/eavesdrop.css View File


+ 133
- 0
src/apps/callflows/submodules/eavesdrop/eavesdrop.js View File

@ -0,0 +1,133 @@
define(function(require) {
var $ = require('jquery'),
_ = require('lodash'),
monster = require('monster');
var app = {
requests: {},
subscribe: {
'callflows.fetchActions': 'eavesdropDefineActions'
},
eavesdropDefineActions: function(args) {
var self = this,
callflow_nodes = args.actions;
$.extend(callflow_nodes, {
'eavesdrop[]': {
name: self.i18n.active().callflows.eavesdrop.name,
icon: 'headphones',
category: self.i18n.active().oldCallflows.advanced_cat,
module: 'eavesdrop',
tip: self.i18n.active().callflows.eavesdrop.tip,
data: {},
rules: [
{
type: 'quantity',
maxSize: '1'
}
],
isUsable: 'true',
weight: 48,
caption: function(node) {
return '';
},
edit: function(node, callback) {
self.eavesdropGetEndpoints(function(formattedData) {
var popup, popup_html;
popup_html = $(self.getTemplate({
name: 'eavesdrop',
data: {
fieldData: formattedData,
data: {
'selectedId': node.getMetadata('device_id') || node.getMetadata('user_id') || '',
'approvedId': node.getMetadata('approved_device_id') || node.getMetadata('approved_user_id') || node.getMetadata('approved_group_id') || ''
}
},
submodule: 'groups'
}));
monster.ui.tooltips(popup_html);
$('#add', popup_html).click(function() {
var setData = function(field, value) {
if (value === 'endpoint_empty') {
node.deleteMetadata('user_id');
node.deleteMetadata('device_id');
} else if (value === 'approved_empty') {
node.deleteMetadata('approved_user_id');
node.deleteMetadata('approved_group_id');
node.deleteMetadata('approved_device_id');
} else {
node.setMetadata(field, value);
}
};
var endpointField = $('#endpoint_selector option:selected').data('type') + '_id',
endpointVal = $('#endpoint_selector option:selected').val(),
approvedEndpointField = 'approved_' + $('#approved_endpoint_selector option:selected').data('type') + '_id',
approvedEndpointVal = $('#approved_endpoint_selector option:selected').val();
setData(endpointField, endpointVal);
setData(approvedEndpointField, approvedEndpointVal);
popup.dialog('close');
});
popup = monster.ui.dialog(popup_html, {
title: self.i18n.active().callflows.eavesdrop.title,
beforeClose: function() {
if (typeof callback === 'function') {
callback();
}
}
});
});
}
}
});
},
eavesdropGetEndpoints: function(callback) {
var self = this;
monster.parallel({
'group': function(callback) {
self.groupsGroupList(function(data) {
callback(null, data);
});
},
'user': function(callback) {
self.groupsRequestUserList({
success: function(data) {
callback(null, data);
}
});
},
'device': function(callback) {
self.groupsRequestDeviceList({
success: function(data) {
callback(null, data);
}
});
}
}, function(err, results) {
var data = self.eavesdropFormatEndpoints(results);
callback(data);
});
},
eavesdropFormatEndpoints: function(data) {
_.each(data.user, function(user) {
user.name = user.first_name + ' ' + user.last_name;
});
return data;
}
};
return app;
});

+ 48
- 0
src/apps/callflows/submodules/eavesdrop/views/eavesdrop.html View File

@ -0,0 +1,48 @@
<div class="dialog_popup callflows-port">
<form name="form" method="post" action="#">
<div class="form_content">
<div class="popup_field">
<label for="endpoint_selector">{{ i18n.callflows.eavesdrop.endpoint.label }}</label>
<div class="select_wrapper">
<select id="endpoint_selector">
<option value="endpoint_empty">{{ i18n.callflows.eavesdrop.none }}</option>
{{#select data.selectedId}}
{{#each fieldData}}
{{#compare @key "!==" "group"}}
<optgroup data-type="{{ @key }}" label="{{ @key }}">
{{#each this}}
<option data-type="{{@../key}}" id="{{ id }}" value="{{ id }}" {{#compare @root.data.selected_id "===" id}} selected{{/compare}}>{{ name }}</option>
{{/each}}
</optgroup>
{{/compare}}
{{/each}}
{{/select}}
</select>
</div>
<div class="clear"/>
</div>
<div class="popup_field">
<label for="endpoint_selector">{{ i18n.callflows.eavesdrop.approvedEndpoint.label }}</label>
<div class="select_wrapper">
<select id="approved_endpoint_selector">
<option value="approved_empty">{{ i18n.callflows.eavesdrop.default }}</option>
{{#select data.approvedId}}
{{#each fieldData}}
<optgroup data-type="{{ @key }}" label="{{ @key }}">
{{#each this}}
<option data-type="{{@../key}}" id="{{ id }}" value="{{ id }}" {{#compare @root.data.selected_id "===" id}} selected{{/compare}}>{{ name }}</option>
{{/each}}
</optgroup>
{{/each}}
{{/select}}
</select>
</div>
<div class="clear"/>
</div>
</div>
</form>
<div class="buttons-center">
<button id="add" class="monster-button monster-button-primary">{{ i18n.save }}</button>
</div>
</div>

+ 1
- 1
src/apps/callflows/submodules/groups/groups.js View File

@ -385,7 +385,7 @@ define(function(require) {
/*'eavesdrop[]': {
name: self.i18n.active().callflows.eavesdrop.name,
icon: 'headset',
icon: 'headphones',
category: self.i18n.active().oldCallflows.advanced_cat,
module: 'eavesdrop',
tip: self.i18n.active().callflows.eavesdrop.tip,


Loading…
Cancel
Save