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",
"passwordPlaceholder": "Password (Min. 6 characters)",
"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": {
"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 }}.",
"__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",
"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",
"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],
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 */,
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.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', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
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 === '') {
response.unassignedNumbers[id] = number;
response.countSpare++;


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

@ -394,7 +394,9 @@ define(function(require){
numbers: $.map(numbers, function(val, key) {
if(val!=="0") {
var ret = {
number: val,
number: {
id: val
},
features: $.extend(true, {}, strategyData.numberFeatures)
};
@ -402,14 +404,15 @@ define(function(require){
_.each(accountNumbers[val].features, function(feature) {
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;
}
}),
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
spareLinkEnabled: (_.countBy(accountNumbers, function(number) {return number.used_by ? 'assigned' : 'spare';})['spare'] > 0)
},
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);
}
if ( dataTemplate.users.length == 0) {
if ( dataTemplate.users.length === 0) {
parent.find('.grid-row.title').css('display', 'none');
parent.find('.no-users-row').css('display', 'block');
} 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() {
var formData = monster.ui.getFormData('form_new_username'),
userToSave = $.extend(true, {}, currentUser, formData);
@ -1108,8 +1121,6 @@ define(function(require){
template
.find('.list-assigned-items')
.append($(monster.template(self, 'users-numbersItemRow', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
number: val
})));
@ -1139,9 +1150,10 @@ define(function(require){
number.viewFeatures = $.extend(true, {}, features);
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', {
isCnamEnabled: monster.util.isNumberFeatureEnabled('cnam'),
isE911Enabled: monster.util.isNumberFeatureEnabled('e911'),
number: number
}));
@ -2711,32 +2723,33 @@ define(function(require){
},
usersGetNumbersTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
self.usersGetNumbersData(userId, 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);
});
}, true);
},
usersGetDevicesTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
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);
});
},
usersGetExtensionsTemplate: function(userId, callback) {
var self = this;
var self = this,
template;
self.usersGetNumbersData(userId, function(results) {
self.usersFormatNumbersData(userId, results, function(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 */
if(!number.hasOwnProperty('used_by') || number.used_by === '') {
response.countSpare++;
@ -4468,6 +4484,25 @@ define(function(require){
usersRemoveOverlay: function() {
$('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">
<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>
</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="type grid-cell centered {{classStatus}}">
<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="features-block pull-right">
<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 class="features">
{{#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="features-block pull-right">
<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 class="features">
{{#compare number.state '===' 'port_in'}}


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

@ -1,31 +1,33 @@
{{#each numbers}}
<div class="number-element">
<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 }}
</button>
<span>{{formatPhoneNumber this.number}}</span>
<span>{{formatPhoneNumber this.number.id}}</span>
</div>
<div class="features-block pull-right">
<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 class="features">
{{#each this.features}}


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

@ -16,6 +16,9 @@
</form>
{{#monsterText}}
{{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}}
</div>


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

@ -9,24 +9,26 @@
<div class="features-block pull-right">
{{#compare this.used_by "!==" "mobile"}}
<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>
{{/compare}}
<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="features-block pull-right">
<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 class="features">
{{#compare number.state '===' 'port_in'}}


Loading…
Cancel
Save