Browse Source

UI-294: New CRUD

4.3
Joris Tirado 12 years ago
parent
commit
6fda3c44df
4 changed files with 185 additions and 217 deletions
  1. +15
    -4
      i18n/en-US.json
  2. +15
    -4
      i18n/fr-FR.json
  3. +144
    -147
      submodules/users/users.js
  4. +11
    -62
      views/users-feature-faxing.html

+ 15
- 4
i18n/en-US.json View File

@ -400,10 +400,21 @@
"noConfNumbers": "You need to add a Main Conference Number (in the Main number section on the left of the SmartPBX) in order to enable the Personnals Conference Bridges"
},
"faxing": {
"title": "Fax to Email",
"dropdownLabel": "Personal Fax Number",
"headline": "Fax to Email",
"help": "This user will receive a fax at {{variable}} as an attachment."
"title": "Faxbox",
"headline": "Faxbox",
"text": "This user will receive faxes at {{variable}} as an attachment.",
"helpOne": "For users running Windows, here is a link to the ",
"helpTwo": "Cloud Printer Installer",
"form": {
"label": {
"callerId": "Faxbox number",
"linkToPrinter": "Link to printer"
}
},
"defaultSettings": {
"nameExtension": "'s Faxbox",
"headerExtension": " Fax Printer"
}
},
"vm_to_email": {
"deleteAfterNotify": "Delete messages from database after sending the notification.",


+ 15
- 4
i18n/fr-FR.json View File

@ -380,10 +380,21 @@
"noConfNumbers": "Vous devez ajouter un Numéro principal de Conférence (Voir \"Numéro principal\" dans le menu de gauche) avant de pouvoir configurer les Conférences personnelles des utilisateurs"
},
"faxing": {
"title": "Fax vers Email",
"dropdownLabel": "Numéro de Fax Perso",
"help": "Un fax sera envoyé à {{variable}} en tant que pièce jointe.",
"headline": "Fax vers Email"
"title": "Faxbox",
"headline": "Faxbox",
"text": "Cet utilisateur recevra les fax à l'adresse mail {{variable}} sous la forme d'une pièce jointe.",
"helpOne": "Pour les utilisateurs sur Windows, voici un lien pour ",
"helpTwo": "l'installeur de l'imprimante en ligne",
"form": {
"label": {
"callerId": "Numéro de Faxbox",
"linkToPrinter": "Lien de l'imprimante"
}
},
"defaultSettings": {
"nameExtension": "'s Faxbox",
"headerExtension": " Fax Printer"
}
},
"vm_to_email": {
"deleteAfterNotify": "Supprimer les messages vocaux de la base de données après l'envoi de la notification.",


+ 144
- 147
submodules/users/users.js View File

@ -1147,34 +1147,46 @@ define(function(require){
}
});
callback && callback(null, existingCallflow)
if ( existingCallflow ) {
self.callApi({
resource: 'callflow.get',
data: {
accountId: self.accountId,
callflowId: existingCallflow.id
},
success: function(data, status) {
callback && callback(null, data.data);
}
});
} else {
callback && callback(null, existingCallflow);
}
});
},
faxboxes: function(callback) {
}
},
function(err, results) {
results.user = currentUser;
if ( typeof results.callflows !== 'undefined' ) {
self.callApi({
resource: 'faxbox.list',
resource: 'faxbox.get',
data: {
accountId: self.accountId
accountId: self.accountId,
faxboxId: results.callflows.flow.data.faxbox_id
},
success: function(_data) {
var userFaxboxes = [];
_.each(_data.data, function(val){
if ( val.owner_id === currentUser.id ) {
userFaxboxes.push(val);
}
});
results.faxbox = _data.data;
results.faxbox.id = results.callflows.flow.data.faxbox_id;
callback && callback(null, userFaxboxes);
self.usersRenderFaxboxes(results);
},
error: function() {
self.usersRenderFaxboxes(results);
}
})
});
} else {
self.usersRenderFaxboxes(results);
}
},
function(err, results) {
results.user = currentUser;
console.log(results);
self.usersRenderFaxboxes(results);
// self.usersRenderFaxing(results);
}
);
});
@ -1347,23 +1359,27 @@ console.log(results);
},
usersFormatFaxingData: function(data) {
var listNumbers = [];
var tempList = [],
listNumbers = {};
_.each(data.numbers, function(value, number) {
listNumbers.push(number);
_.each(data.numbers, function(val, key){
tempList.push(key);
});
listNumbers.sort(function(a, b) {
tempList.sort(function(a, b) {
return a < b ? -1 : 1;
});
if(data.callflows) {
if(data.callflows.numbers.length > 0) {
// listNumbers.push(data.callflows.numbers[0]);
listNumbers.unshift(data.callflows.numbers[0]);
listNumbers[data.callflows.numbers[0]] = data.callflows.numbers[0]
}
}
_.each(tempList, function(val, key) {
listNumbers[val] = val;
});
data.extra = $.extend(true, {}, data.extra, {
listNumbers: listNumbers
});
@ -1424,80 +1440,19 @@ console.log(results);
});
},
usersFormatConferencingData: function(data) {
return data;
},
usersRenderFaxing: function(data) {
var self = this,
data = self.usersFormatFaxingData(data),
featureTemplate = $(monster.template(self, 'users-feature-faxing', data)),
switchFeature = featureTemplate.find('.switch').bootstrapSwitch();
featureTemplate.find('.cancel-link').on('click', function() {
popup.dialog('close').remove();
});
switchFeature.on('switch-change', function(e, data) {
data.value ? featureTemplate.find('.content').slideDown() : featureTemplate.find('.content').slideUp();
});
featureTemplate.find('.save').on('click', function() {
var newNumber = popup.find('.dropdown-numbers').val(),
args = {
openedTab: 'features',
callback: function() {
popup.dialog('close').remove();
}
};
if(switchFeature.bootstrapSwitch('status')) {
self.usersUpdateFaxing(data, newNumber, function(results) {
args.userId = results.callflow.owner_id;
self.usersRender(args);
});
}
else {
self.usersDeleteFaxing(data.callflows.owner_id, function() {
args.userId = data.callflows.owner_id;
self.usersRender(args);
});
}
});
monster.ui.prettyCheck.create(featureTemplate.find('.content'));
if(data.extra.listNumbers.length > 0) {
var popup = monster.ui.dialog(featureTemplate, {
title: data.user.extra.mapFeatures.faxing.title,
position: ['center', 20]
});
}
else {
monster.ui.alert('error', self.i18n.active().users.errorNumberFaxing);
}
},
usersRenderFaxboxes: function(data) {
var self = this,
data = self.usersFormatFaxingData(data),
featureTemplate = $(monster.template(self, 'users-feature-faxing', data)),
switchFeature = featureTemplate.find('.switch').bootstrapSwitch();
timezone.populateDropdown(featureTemplate.find('#fax_timezone'));
featureTemplate.find('#fax_timezone').chosen({search_contains: true, width: "78.48%"});
monster.ui.prettyCheck.create(featureTemplate.find('.content'));
if ( data.extra.listNumbers.length > 0 ) {
if ( !_.isEmpty(data.extra.listNumbers) ) {
var popup = monster.ui.dialog(featureTemplate, {
title: data.user.extra.mapFeatures.faxing.title,
position: ['center', 20]
@ -1522,45 +1477,19 @@ console.log(results);
popup.dialog('close').remove();
}
};
console.log(data);
if ( switchFeature.bootstrapSwitch('status') ) {
faxboxData.owner_id = !faxboxData.hasOwnProperty('owner_id') ? data.user.id : faxboxData.owner_id;
faxboxData.smtp_permission_list = faxboxData.smtp_permission_list.split(' ');
faxboxData.owner_id = faxboxData.hasOwnProperty('owner_id') ? faxboxData.owner_id : data.user.id;
if ( data.hasOwnProperty('faxbox') && data.faxbox.hasOwnProperty('id') ) {
self.callApi({
resource: 'faxbox.update',
data: {
accountId: self.accountId,
faxboxId: faxboxId,
data: faxboxData
},
success: function(_data, status) {
console.log(_data);
// self.usersUpdateFaxing(data, newNumber, function(results) {
// args.userId = results.callflows.owner_id;
if ( data.hasOwnProperty('faxbox') ) {
faxboxData.id = data.faxbox.id;
}
// self.usersRender(args);
// });
}
});
} else {
self.callApi({
resource: 'faxbox.create',
data: {
accountId: self.accountId,
data: faxboxData
},
success: function(_data, status) {
console.log(_data);
// self.usersUpdateFaxing(data, newNumber, function(results) {
// args.userId = results.callflows.owner_id;
self.usersUpdateFaxing(data, faxboxData, function(results) {
args.userId = results.callflow.owner_id;
// self.usersRender(args);
// });
}
})
}
self.usersRender(args);
});
} else {
self.usersDeleteFaxing(data.user.id, function() {
args.userId = data.user.id;
@ -3697,25 +3626,12 @@ console.log(_data);
);
},
usersUpdateFaxing: function(data, newNumber, globalCallback) {
usersUpdateFaxing: function(data, faxboxData, globalCallback) {
var self = this;
monster.parallel({
callflow: function(callback) {
var baseCallflow = {
type: 'faxing',
owner_id: data.user.id,
numbers: [ newNumber ],
flow: {
data: {
faxbox_id: data.faxbox.id
// owner_id: data.user.id
},
module: 'faxbox',
// module: 'receive_fax',
children: {}
}
};
var baseCallflow = {};
self.usersListCallflowsUser(data.user.id, function(callflows) {
_.each(callflows, function(callflow) {
@ -3726,7 +3642,8 @@ console.log(_data);
}
});
self.usersUpdateCallflowFaxing(baseCallflow, function(callflow) {
self.usersUpdateCallflowFaxing(data.user, faxboxData, baseCallflow, function(callflow) {
console.log(callflow);
callback && callback(null, callflow);
});
});
@ -3753,17 +3670,79 @@ console.log(_data);
);
},
usersUpdateCallflowFaxing: function(callflow, callback) {
var self = this;
usersUpdateCallflowFaxing: function(user, faxbox, callflow, callback) {
var self = this,
baseCallflow = {
type: 'faxing',
owner_id: faxbox.owner_id,
numbers: [ faxbox.caller_id ],
flow: {
module: 'faxbox',
children: {},
data: {
faxbox_id: faxbox.id
}
}
};
callflow = $.extend(true, {}, baseCallflow, callflow);
if(callflow.id) {
self.usersUpdateCallflow(callflow, function(callflow) {
callback && callback(callflow);
self.callApi({
resource: 'faxbox.update',
data:{
accountId: self.accountId,
faxboxId: faxbox.id,
data: faxbox
},
success: function(_data, status) {
self.usersUpdateCallflow(callflow, function(callflow) {
callback && callback(callflow);
});
},
error: function(_data, status) {
console.log(_data, status);
}
});
}
else {
self.usersCreateCallflow(callflow, function(callflow) {
callback && callback(callflow);
var defaultFaxbox = {
name: user.first_name.concat(' ', user.last_name, self.i18n.active().users.faxing.defaultSettings.nameExtension),
caller_name: user.first_name.concat(' ', user.last_name),
fax_header: monster.config.company.name.concat(self.i18n.active().users.faxing.defaultSettings.headerExtension),
fax_identity: monster.util.formatPhoneNumber(faxbox.caller_id),
smtp_permission_list: [],
retries: 3,
fax_timezone: user.timezone,
notifications: {
inbound: {
email: {
send_to: user.email
}
},
outbound: {
email: {
send_to: user.email
}
}
}
};
faxbox = $.extend(true, {}, defaultFaxbox, faxbox);
self.callApi({
resource: 'faxbox.create',
data: {
accountId: self.accountId,
data: faxbox
},
success: function(_data, status) {
callflow.flow.data.faxbox_id = _data.data.id;
self.usersCreateCallflow(callflow, function(callflow) {
callback && callback(callflow);
});
}
});
}
},
@ -3821,8 +3800,26 @@ console.log(_data);
_.each(callflows, function(callflow) {
if(callflow.type === 'faxing') {
listRequests.push(function(subCallback) {
self.usersDeleteCallflow(callflow.id, function(data) {
subCallback(null, data);
self.callApi({
resource: 'callflow.get',
data: {
accountId: self.accountId,
callflowId: callflow.id
},
success: function(data, status) {
self.callApi({
resource: 'faxbox.delete',
data: {
accountId: self.accountId,
faxboxId: data.data.flow.data.faxbox_id
},
success: function(_data, status) {
self.usersDeleteCallflow(callflow.id, function(results) {
subCallback(null, results);
});
}
});
}
});
});
}


+ 11
- 62
views/users-feature-faxing.html View File

@ -10,86 +10,35 @@
</div>
<div class="content{{#unless user.extra.mapFeatures.faxing.active}} disabled{{/unless}}">
<p>{{replaceVar i18n.users.faxing.text this.user.email }}</p>
<form class="form-horizontal" id="faxbox_form">
<div class="control-group">
<label for="name" class="control-label">Name</label>
<div class="controls">
<input type="text" name="name" id="name" value="{{faxbox.name}}" placeholder="Faxbox name">
</div>
</div>
<div class="control-group">
<label for="notifications_inbound_email" class="control-label">Notification inbound email</label>
<div class="controls">
<input type="email" name="notifications.inbound.email.send_to" id="notifications_inbound_email" value="{{faxbox.notifications.inbound.email.send_to}}">
</div>
</div>
<div class="control-group">
<label for="notifications.outbound.email.send_to" class="control-label">Notifications outbound email</label>
<div class="controls">
<input type="email" name="notifications.outbound.email.send_to" id="notifications_outbound_email" value="{{faxbox.notifications.outbound.email.send_to}}">
</div>
</div>
<div class="control-group">
<label for="caller_name" class="control-label">Caller name</label>
<div class="controls">
<input type="text" name="caller_name" id="caller_name" value="{{faxbox.caller_name}}">
</div>
</div>
<div class="control-group">
<label for="caller_id" class="control-label">Caller ID</label>
<label for="caller_id" class="control-label">{{ i18n.users.faxing.form.label.callerId }}</label>
<div class="controls">
<select name="caller_id" id="caller_id">
{{#each extra.listNumbers}}
<option value="{{this}}">{{formatPhoneNumber this}}</option>
<option value="{{@key}}"{{#compare @key '===' ../faxbox.caller_id }} selected="true"{{/compare}}>{{formatPhoneNumber @key}}</option>
{{/each}}
</select>
</div>
</div>
<div class="control-group">
<label for="fax_header" class="control-label">Fax header</label>
<div class="controls">
<input type="text" name="fax_header" id="fax_header" value="{{faxbox.fax_header}}">
</div>
</div>
<div class="control-group">
<label for="fax_identity" class="control-label">Fax identity</label>
<div class="controls">
<input type="text" name="fax_identity" id="fax_identity" value="{{faxbox.fax_identity}}">
</div>
</div>
<div class="control-group">
<label for="smtp_permission_list" class="control-label">SMTP permission list</label>
<div class="controls">
<input type="text" name="smtp_permission_list" id="smtp_permission_list" value="{{faxbox.smtp_permission_list}}">
</div>
</div>
<div class="control-group">
<label for="custom_smtp_email_address" class="control-label">Custom SMTP address</label>
<div class="controls">
<input type="email" name="custom_smtp_email_address" id="custom_smtp_email_address" value="{{faxbox.custom_smtp_email_address}}">
</div>
</div>
{{#if faxbox.cloud_connector_claim_url}}
<div class="control-group">
<label for="printer_link" class="control-label">Link to Google printer</label>
<label for="printer_link" class="control-label">{{ i18n.users.faxing.form.label.linkToPrinter }}</label>
<div class="controls">
<a id="printer_link" href="{{faxbox.cloud_connector_claim_url}}" target="_blank">{{faxbox.cloud_connector_claim_url}}</a>
</div>
</div>
{{/if}}
<div class="control-group">
<label for="retries" class="control-label">Retries</label>
<div class="controls">
<input type="text" name="retries" id="retries" value="{{faxbox.retries}}">
</div>
</form>
<div class="help-box gray-box">
<div class="wrapper-icon">
&nbsp;<i class="icon-info-sign2"></i>&nbsp;
</div>
<div class="control-group">
<label for="fax_timezone" class="control-label">Fax timezone</label>
<div class="controls">
<select id="fax_timezone" name="fax_timezone" data-original_value="{{faxbox.fax_timezone}}"></select>
</div>
<div class="text-wrapper">
<p>{{ i18n.users.faxing.helpOne }}<a href="https://tools.google.com/dlpage/cloudprintdriver" target="_blank">{{ i18n.users.faxing.helpTwo }}</a></p>
</div>
</form>
</div>
</div>
<div class="actions clearfix">


Loading…
Cancel
Save