Browse Source

Add eavesdrop feature code

pull/4/head
Vladimir Barkasov 6 years ago
parent
commit
04dbe2b427
4 changed files with 224 additions and 1 deletions
  1. +15
    -0
      src/apps/callflows/i18n/en-US.json
  2. +12
    -0
      src/apps/callflows/submodules/featurecodes/featurecodes.css
  3. +123
    -1
      src/apps/callflows/submodules/featurecodes/featurecodes.js
  4. +74
    -0
      src/apps/callflows/submodules/featurecodes/views/eavesdrop.html

+ 15
- 0
src/apps/callflows/i18n/en-US.json View File

@ -928,6 +928,21 @@
"check_voicemail": "Check Voicemail",
"miscellaneous_cat": "Miscellaneous",
"direct_to_voicemail": "Direct to Voicemail",
"eavesdrop": "Eavesdrop",
"eavesdropPopup": {
"title": "Eavesdrop",
"eavesdropTarget": {
"label": "List of eavesdrop targets",
"tooltip": "If you set \"None\" then anybody can be eavesdropped."
},
"approvedEndpoint": {
"label": "Approved Endpoint",
"tooltip": "One of the approved device, approved user or approved group must be defined to access feature code."
},
"none": "None",
"default": "Default",
"successUpdate": "You successfully updated settings of the Eavesdrop Feature Code"
},
"intercom": "Intercom",
"privacy": "Privacy",
"park_and_retrieve": "Park and Retrieve",


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

@ -45,4 +45,16 @@
#parking_settings_popup label.monster-invalid {
margin-top: 0;
}
#eavesdrop_settings_popup label.monster-invalid {
position: static;
margin: 0;
display: block;
float: none;
color: #FF3D24;
}
#eavesdrop_settings_popup .form_content select {
min-width: 165px;
}

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

@ -664,7 +664,25 @@ define(function(require) {
build_regex: function(number) {
return number;
}
}
},
'eavesdrop': {
name: self.i18n.active().callflows.featureCodes.eavesdrop,
icon: 'phone',
category: self.i18n.active().callflows.featureCodes.miscellaneous_cat,
module: 'eavesdrop',
number_type: 'numbers',
data: {},
enabled: false,
hasStar: true,
editConfiguration: function() {
self.featureCodesEditEavesdrop(this);
},
default_number: '*',
number: this.default_number,
build_regex: function(number) {
return '^\\*' + number + '([0-9]+)$';
}
}
/*'call_forward[action=on_busy_enable]': {
name: 'Enable Call-Forward on Busy',
icon: 'phone',
@ -987,6 +1005,110 @@ define(function(require) {
});
},
featureCodesEditEavesdrop: function(featureCode) {
var self = this;
self.featureCodeGet(featureCode.id, function(callflowData) {
var featureCodeData = callflowData.featurecode;
self.featureCodesEavesdropGetEndpoints(function(endpoints) {
var getApprovedId = function(data) {
if (data.hasOwnProperty('approved_device_id')) {
return data.approved_device_id;
}
if (data.hasOwnProperty('approved_group_id')) {
return data.approved_group_id;
}
if (data.hasOwnProperty('approved_user_id')) {
return data.approved_user_id;
}
return '';
};
var popup,
template = $(self.getTemplate({
name: 'eavesdrop',
submodule: 'featurecodes',
data: {
fieldData: endpoints,
data: {
'targetId': featureCodeData.group_id === 'undefined' ? 'empty' : featureCodeData.group_id,
'approvedId': getApprovedId(featureCodeData)
}
}
}));
monster.ui.tooltips(template);
template.find('#save').on('click', function(e) {
e.preventDefault();
var $target = $('#endpoint');
var $approvedEndpointSelected = $('#approved-endpoint option:selected');
var approvedEndpointField = 'approved_' + $approvedEndpointSelected.data('type') + '_id';
var approvedEndpointVal = $approvedEndpointSelected.val();
var data = {};
data.group_id = $target.val() === 'empty' ? 'undefined' : $target.val();
data[approvedEndpointField] = approvedEndpointVal;
var newCallflowData = $.extend(true, {
flow: callflowData.flow,
patterns: callflowData.patterns,
numbers: callflowData.numbers,
featurecode: {
name: callflowData.featurecode.name,
number: callflowData.featurecode.number
}
}, {
featurecode: data
});
self.featureCodeUpdate(callflowData.id, newCallflowData, function() {
monster.ui.toast({
type: 'success',
message: self.i18n.active().callflows.featureCodes.eavesdropPopup.successUpdate
});
popup.dialog('close');
});
});
popup = monster.ui.dialog(template, {
title: self.i18n.active().callflows.featureCodes.eavesdropPopup.title
});
});
});
},
featureCodesEavesdropGetEndpoints: 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) {
_.each(results.user, function(user) {
user.name = user.first_name + ' ' + user.last_name;
});
callback(results);
});
},
featureCodesNormalizeData: function(data, formData) {
var self = this,
dataToUpdate = $.extend(true, {}, data);


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

@ -0,0 +1,74 @@
<div id="eavesdrop_settings_popup" class="dialog_popup callflows-port">
<form id="form_eavesdrop" name="form" class="form-horizontal" method="post" action="#">
<div class="form_content">
<div class="popup_field">
<label for="endpoint">
{{ i18n.callflows.featureCodes.eavesdropPopup.eavesdropTarget.label }}
<i class="help-popover fa fa-question-circle"
data-original-title="{{ i18n.callflows.featureCodes.eavesdropPopup.eavesdropTarget.tooltip}}"
data-placement="right"
data-toggle="tooltip"></i>
</label>
<div class="select_wrapper">
<select id="endpoint" name="group_id">
{{#select data.targetId}}
<option value="empty">{{ i18n.callflows.featureCodes.eavesdropPopup.none }}</option>
{{#each fieldData}}
{{#compare @key "===" "group"}}
{{#each this}}
<option
data-type="{{@../key}}"
id="{{ id }}"
value="{{ id }}"
{{#compare @root.data.selected_id "===" id}} selected{{/compare}}
>
{{ name }}
</option>
{{/each}}
{{/compare}}
{{/each}}
{{/select}}
</select>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
<div class="popup_field">
<label for="approved-endpoint">
{{ i18n.callflows.featureCodes.eavesdropPopup.approvedEndpoint.label }}
<i class="help-popover fa fa-question-circle"
data-original-title="{{ i18n.callflows.featureCodes.eavesdropPopup.approvedEndpoint.tooltip}}"
data-placement="right"
data-toggle="tooltip"></i>
</label>
<div class="select_wrapper">
<select id="approved-endpoint" name="approved-endpoint">
{{#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 class="clear"/>
</div>
<div class="clear"></div>
</div>
</div>
</form>
<div class="buttons-center">
<button id="save" class="monster-button monster-button-primary">{{ i18n.save }}</button>
</div>
</div>

Loading…
Cancel
Save