Browse Source

Merge remote-tracking branch 'origin/master'

4.3
Joris Tirado 9 years ago
parent
commit
dbe4354bcd
13 changed files with 180 additions and 117 deletions
  1. +9
    -2
      i18n/en-US.json
  2. +2
    -1
      submodules/devices/devices.js
  3. +6
    -2
      submodules/groups/groups.js
  4. +7
    -4
      submodules/strategy/strategy.js
  5. +49
    -14
      submodules/users/users.js
  6. +1
    -1
      views/devices-layout.html
  7. +1
    -1
      views/devices-row.html
  8. +20
    -18
      views/groups-numbers.html
  9. +20
    -18
      views/groups-numbersItemRow.html
  10. +22
    -20
      views/strategy-numbers.html
  11. +3
    -0
      views/users-changePassword.html
  12. +20
    -18
      views/users-numbers.html
  13. +20
    -18
      views/users-numbersItemRow.html

+ 9
- 2
i18n/en-US.json View File

@ -427,7 +427,11 @@
"password": "Password", "password": "Password",
"passwordPlaceholder": "Password (Min. 6 characters)", "passwordPlaceholder": "Password (Min. 6 characters)",
"title": "Update Email and password", "title": "Update Email and password",
"username": "User's Email address"
"username": "User's Email address",
"resetPassword": {
"linkTitle": "here",
"text": "If you want the system to send an e-mail to this user with instructions on how to reset his password, click "
}
}, },
"dialogChangePin": { "dialogChangePin": {
"help": "You can use this popup to set a temporary PIN for a user that lost his PIN for example.", "help": "You can use this popup to set a temporary PIN for a user that lost his PIN for example.",
@ -525,7 +529,10 @@
"pinUpdated": "You successfully updated the PIN of {{ name }}.", "pinUpdated": "You successfully updated the PIN of {{ name }}.",
"__comment": "UI-1033: Now properly remove the Caller-ID Feature if we remove a number that was set as that Caller-ID Number", "__comment": "UI-1033: Now properly remove the Caller-ID Feature if we remove a number that was set as that Caller-ID Number",
"__version": "3.20", "__version": "3.20",
"callerIDDeleted": "The Caller-ID Number of this user was set to a number that was no longer assigned to him, so we disabled the Caller-ID Feature."
"callerIDDeleted": "The Caller-ID Number of this user was set to a number that was no longer assigned to him, so we disabled the Caller-ID Feature.",
"__comment": ": Now offer admin the option to send an email to reset the password of a user",
"__version": "4.0",
"successResetPassword": "Success! {{ name }} will be receiving an e-mail with instructions on how to reset his password shortly."
}, },
"uploadPicture": "Upload a Picture", "uploadPicture": "Upload a Picture",
"user": "User", "user": "User",


+ 2
- 1
submodules/devices/devices.js View File

@ -985,7 +985,8 @@ define(function(require){
friendlyType: self.i18n.active().devices.types[device.device_type], friendlyType: self.i18n.active().devices.types[device.device_type],
registered: false, registered: false,
classStatus: device.enabled ? 'unregistered' : 'disabled' /* Display a device in black if it's disabled, otherwise, until we know whether it's registered or not, we set the color to red */, classStatus: device.enabled ? 'unregistered' : 'disabled' /* Display a device in black if it's disabled, otherwise, until we know whether it's registered or not, we set the color to red */,
isRegistered: false
isRegistered: false,
sipUserName: device.username
} }
}); });


+ 6
- 2
submodules/groups/groups.js View File

@ -1191,9 +1191,10 @@ define(function(require){
number.viewFeatures = $.extend(true, {}, features); number.viewFeatures = $.extend(true, {}, features);
number.phoneNumber = number.id; number.phoneNumber = number.id;
monster.util.populateBooleansNumberFeatures(number);
number.extra.hasFeatures = number.extra.hasE911 || number.extra.hasPrepend || number.extra.hasCnam;
var rowTemplate = $(monster.template(self, 'groups-numbersItemRow', { var rowTemplate = $(monster.template(self, 'groups-numbersItemRow', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
number: number number: number
})); }));
@ -1493,6 +1494,9 @@ define(function(require){
} }
}); });
monster.util.populateBooleansNumberFeatures(number);
number.extra.hasFeatures = number.extra.hasE911 || number.extra.hasPrepend || number.extra.hasCnam;
if(!number.hasOwnProperty('used_by') || number.used_by === '') { if(!number.hasOwnProperty('used_by') || number.used_by === '') {
response.unassignedNumbers[id] = number; response.unassignedNumbers[id] = number;
response.countSpare++; response.countSpare++;


+ 7
- 4
submodules/strategy/strategy.js View File

@ -394,7 +394,9 @@ define(function(require){
numbers: $.map(numbers, function(val, key) { numbers: $.map(numbers, function(val, key) {
if(val!=="0") { if(val!=="0") {
var ret = { var ret = {
number: val,
number: {
id: val
},
features: $.extend(true, {}, strategyData.numberFeatures) features: $.extend(true, {}, strategyData.numberFeatures)
}; };
@ -402,14 +404,15 @@ define(function(require){
_.each(accountNumbers[val].features, function(feature) { _.each(accountNumbers[val].features, function(feature) {
ret.features[feature].active = 'active'; ret.features[feature].active = 'active';
}); });
ret.isLocal = accountNumbers[val].features.indexOf('local') > -1;
ret.number = $.extend(true, accountNumbers[val], ret.number);
} }
monster.util.populateBooleansNumberFeatures(ret.number);
ret.number.extra.hasFeatures = ret.number.extra.hasE911 || ret.number.extra.hasPrepend || ret.number.extra.hasCnam;
return ret; return ret;
} }
}), }),
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
spareLinkEnabled: (_.countBy(accountNumbers, function(number) {return number.used_by ? 'assigned' : 'spare';})['spare'] > 0) spareLinkEnabled: (_.countBy(accountNumbers, function(number) {return number.used_by ? 'assigned' : 'spare';})['spare'] > 0)
}, },
template = $(monster.template(self, 'strategy-'+templateName, templateData)); template = $(monster.template(self, 'strategy-'+templateName, templateData));


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

@ -70,7 +70,7 @@ define(function(require){
monster.ui.highlight(cells); monster.ui.highlight(cells);
} }
if ( dataTemplate.users.length == 0) {
if ( dataTemplate.users.length === 0) {
parent.find('.grid-row.title').css('display', 'none'); parent.find('.grid-row.title').css('display', 'none');
parent.find('.no-users-row').css('display', 'block'); parent.find('.no-users-row').css('display', 'block');
} else { } else {
@ -908,6 +908,19 @@ define(function(require){
} }
}); });
passwordTemplate.find('.reset-password').on('click', function() {
var dataReset = {
username: currentUser.username,
account_name: monster.apps.auth.currentAccount.name
};
self.usersResetPassword(dataReset, function() {
popup.dialog('close').remove();
toastr.success(monster.template(self, '!' + toastrMessages.successResetPassword, { name: dataReset.username }));
});
});
passwordTemplate.find('.save-new-username').on('click', function() { passwordTemplate.find('.save-new-username').on('click', function() {
var formData = monster.ui.getFormData('form_new_username'), var formData = monster.ui.getFormData('form_new_username'),
userToSave = $.extend(true, {}, currentUser, formData); userToSave = $.extend(true, {}, currentUser, formData);
@ -1108,8 +1121,6 @@ define(function(require){
template template
.find('.list-assigned-items') .find('.list-assigned-items')
.append($(monster.template(self, 'users-numbersItemRow', { .append($(monster.template(self, 'users-numbersItemRow', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
number: val number: val
}))); })));
@ -1139,9 +1150,10 @@ define(function(require){
number.viewFeatures = $.extend(true, {}, features); number.viewFeatures = $.extend(true, {}, features);
number.phoneNumber = number.id; number.phoneNumber = number.id;
monster.util.populateBooleansNumberFeatures(number);
number.extra.hasFeatures = number.extra.hasE911 || number.extra.hasPrepend || number.extra.hasCnam;
var rowTemplate = $(monster.template(self, 'users-numbersItemRow', { var rowTemplate = $(monster.template(self, 'users-numbersItemRow', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
number: number number: number
})); }));
@ -2711,32 +2723,33 @@ define(function(require){
}, },
usersGetNumbersTemplate: function(userId, callback) { usersGetNumbersTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
self.usersGetNumbersData(userId, function(results) { self.usersGetNumbersData(userId, function(results) {
self.usersFormatNumbersData(userId, results, function(results) { self.usersFormatNumbersData(userId, results, function(results) {
template = $(monster.template(self, 'users-numbers', $.extend(true, {}, results, {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911')
})));
template = $(monster.template(self, 'users-numbers', results));
callback && callback(template, results); callback && callback(template, results);
}); });
}, true); }, true);
}, },
usersGetDevicesTemplate: function(userId, callback) { usersGetDevicesTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
self.usersGetDevicesData(function(results) { self.usersGetDevicesData(function(results) {
var results = self.usersFormatDevicesData(userId, results);
var formattedResults = self.usersFormatDevicesData(userId, results);
template = $(monster.template(self, 'users-devices', results));
template = $(monster.template(self, 'users-devices', formattedResults));
callback && callback(template, results); callback && callback(template, results);
}); });
}, },
usersGetExtensionsTemplate: function(userId, callback) { usersGetExtensionsTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
self.usersGetNumbersData(userId, function(results) { self.usersGetNumbersData(userId, function(results) {
self.usersFormatNumbersData(userId, results, function(results) { self.usersFormatNumbersData(userId, results, function(results) {
template = $(monster.template(self, 'users-extensions', results)); template = $(monster.template(self, 'users-extensions', results));
@ -2809,6 +2822,9 @@ define(function(require){
} }
}); });
monster.util.populateBooleansNumberFeatures(number);
number.extra.hasFeatures = number.extra.hasE911 || number.extra.hasPrepend || number.extra.hasCnam;
/* Adding to spare numbers */ /* Adding to spare numbers */
if(!number.hasOwnProperty('used_by') || number.used_by === '') { if(!number.hasOwnProperty('used_by') || number.used_by === '') {
response.countSpare++; response.countSpare++;
@ -4468,6 +4484,25 @@ define(function(require){
usersRemoveOverlay: function() { usersRemoveOverlay: function() {
$('body').find('#users_container_overlay').remove(); $('body').find('#users_container_overlay').remove();
},
usersResetPassword: function(data, callback) {
var self = this,
dataPassword = {
username: data.username,
account_name: data.account_name,
ui_url: window.location.href.split('#')[0]
};
self.callApi({
resource: 'auth.recovery',
data: {
data: dataPassword
},
success: function(data) {
callback && callback(data.data);
}
});
} }
}; };


+ 1
- 1
views/devices-layout.html View File

@ -24,7 +24,7 @@
<span class="search-box pull-right"> <span class="search-box pull-right">
<i class="fa fa-search"></i> <i class="fa fa-search"></i>
<input type="text" class="search-query" placeholder="{{ i18n.search }}..."></input>
<input type="text" class="search-query" placeholder="{{ i18n.search }}"></input>
</span> </span>
</div> </div>


+ 1
- 1
views/devices-row.html View File

@ -1,4 +1,4 @@
<div class="grid-row" data-id="{{id}}" data-search="{{userName}} {{friendlyType}} {{type}} {{name}} {{macAddress}}" data-assigned="{{isAssigned}}" data-registered="{{isRegistered}}">
<div class="grid-row" data-id="{{id}}" data-search="{{userName}} {{friendlyType}} {{type}} {{name}} {{macAddress}} {{sipUserName}}" data-assigned="{{isAssigned}}" data-registered="{{isRegistered}}">
<div class="devices-cells"> <div class="devices-cells">
<div class="type grid-cell centered {{classStatus}}"> <div class="type grid-cell centered {{classStatus}}">
<div class="first-line"> <div class="first-line">


+ 20
- 18
views/groups-numbers.html View File

@ -8,24 +8,26 @@
<div class="item-row" data-id="{{@key}}" data-search="{{formatPhoneNumber @key}} {{@key}} {{locality.city}} {{locality.country}}"> <div class="item-row" data-id="{{@key}}" data-search="{{formatPhoneNumber @key}} {{@key}} {{locality.city}} {{locality.country}}">
<div class="features-block pull-right"> <div class="features-block pull-right">
<div class="edit-features"> <div class="edit-features">
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#unless isLocal}}
{{#if ../isCnamEnabled}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if ../isE911Enabled}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{/unless}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
</ul>
</li>
</ul>
</div>
{{#if this.extra.hasFeatures}}
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#if this.extra.hasCnam}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if this.extra.hasE911}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{#if this.extra.hasPrepend}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
{{/if}}
</ul>
</li>
</ul>
</div>
{{/if}}
</div> </div>
<div class="features"> <div class="features">
{{#compare this.state '===' 'port_in'}} {{#compare this.state '===' 'port_in'}}


+ 20
- 18
views/groups-numbersItemRow.html View File

@ -1,24 +1,26 @@
<div class="item-row" data-id="{{number.phoneNumber}}"> <div class="item-row" data-id="{{number.phoneNumber}}">
<div class="features-block pull-right"> <div class="features-block pull-right">
<div class="edit-features"> <div class="edit-features">
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#unless number.isLocal}}
{{#if isCnamEnabled}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ i18n.callerId }}</a></li>
{{/if}}
{{#if isE911Enabled}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ i18n.e911 }}</a></li>
{{/if}}
{{/unless}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ i18n.numberPrepend }}</a></li>
</ul>
</li>
</ul>
</div>
{{#if number.extra.hasFeatures}}
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#if number.extra.hasCnam}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if number.extra.hasE911}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{#if number.extra.hasPrepend}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
{{/if}}
</ul>
</li>
</ul>
</div>
{{/if}}
</div> </div>
<div class="features"> <div class="features">
{{#compare number.state '===' 'port_in'}} {{#compare number.state '===' 'port_in'}}


+ 22
- 20
views/strategy-numbers.html View File

@ -1,31 +1,33 @@
{{#each numbers}} {{#each numbers}}
<div class="number-element"> <div class="number-element">
<div class="number"> <div class="number">
<button type="button" class="monster-button monster-button-danger remove-number" data-number="{{this.number}}" data-e911="{{this.features.e911.active}}">
<button type="button" class="monster-button monster-button-danger remove-number" data-number="{{this.number.id}}" data-e911="{{this.features.e911.active}}">
{{ @root.i18n.unassign }} {{ @root.i18n.unassign }}
</button> </button>
<span>{{formatPhoneNumber this.number}}</span>
<span>{{formatPhoneNumber this.number.id}}</span>
</div> </div>
<div class="features-block pull-right"> <div class="features-block pull-right">
<div class="edit-features"> <div class="edit-features">
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#unless isLocal}}
{{#if ../isCnamEnabled}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if ../isE911Enabled}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{/unless}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
</ul>
</li>
</ul>
</div>
{{#if this.number.extra.hasFeatures}}
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#if this.number.extra.hasCnam}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if this.number.extra.hasE911}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{#if this.number.extra.hasPrepend}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
{{/if}}
</ul>
</li>
</ul>
</div>
{{/if}}
</div> </div>
<div class="features"> <div class="features">
{{#each this.features}} {{#each this.features}}


+ 3
- 0
views/users-changePassword.html View File

@ -16,6 +16,9 @@
</form> </form>
{{#monsterText}} {{#monsterText}}
{{i18n.users.dialogChangePassword.help}} {{i18n.users.dialogChangePassword.help}}
<br/><br/>
{{i18n.users.dialogChangePassword.resetPassword.text}}
<a class="monster-link blue reset-password" href="javascript:void(0)">{{i18n.users.dialogChangePassword.resetPassword.linkTitle}}</a>.
{{/monsterText}} {{/monsterText}}
</div> </div>


+ 20
- 18
views/users-numbers.html View File

@ -9,24 +9,26 @@
<div class="features-block pull-right"> <div class="features-block pull-right">
{{#compare this.used_by "!==" "mobile"}} {{#compare this.used_by "!==" "mobile"}}
<div class="edit-features"> <div class="edit-features">
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#unless this.isLocal}}
{{#if ../isCnamEnabled}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if ../isE911Enabled}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{/unless}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
</ul>
</li>
</ul>
</div>
{{#if this.extra.hasFeatures}}
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#if this.extra.hasCnam}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if this.extra.hasE911}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{#if this.extra.hasPrepend}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
{{/if}}
</ul>
</li>
</ul>
</div>
{{/if}}
</div> </div>
{{/compare}} {{/compare}}
<div class="features"> <div class="features">


+ 20
- 18
views/users-numbersItemRow.html View File

@ -1,24 +1,26 @@
<div class="item-row" data-id="{{number.phoneNumber}}"> <div class="item-row" data-id="{{number.phoneNumber}}">
<div class="features-block pull-right"> <div class="features-block pull-right">
<div class="edit-features"> <div class="edit-features">
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#unless number.isLocal}}
{{#if isCnamEnabled}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ i18n.callerId }}</a></li>
{{/if}}
{{#if isE911Enabled}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ i18n.e911 }}</a></li>
{{/if}}
{{/unless}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ i18n.numberPrepend }}</a></li>
</ul>
</li>
</ul>
</div>
{{#if number.extra.hasFeatures}}
<div class="navbar">
<ul class="nav pull-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i></a>
<ul class="dropdown-menu">
{{#if number.extra.hasCnam}}
<li><a class="callerId-number" href="#"><i class="fa fa-user"></i>{{ @root.i18n.callerId }}</a></li>
{{/if}}
{{#if number.extra.hasE911}}
<li><a class="e911-number" href="#"><i class="fa fa-ambulance"></i>{{ @root.i18n.e911 }}</a></li>
{{/if}}
{{#if number.extra.hasPrepend}}
<li><a class="prepend-number" href="#"><i class="fa fa-file-text-o"></i>{{ @root.i18n.numberPrepend }}</a></li>
{{/if}}
</ul>
</li>
</ul>
</div>
{{/if}}
</div> </div>
<div class="features"> <div class="features">
{{#compare number.state '===' 'port_in'}} {{#compare number.state '===' 'port_in'}}


Loading…
Cancel
Save