From 441b59501d33132827223103a49b7d6e723ad457 Mon Sep 17 00:00:00 2001 From: Joris Tirado Date: Mon, 20 Feb 2017 11:06:34 -0800 Subject: [PATCH] UI-2617: Fix ESLint erros/warnings --- submodules/users/users.js | 1944 +++++++++++++++++-------------------- 1 file changed, 915 insertions(+), 1029 deletions(-) diff --git a/submodules/users/users.js b/submodules/users/users.js index d679e9d..5425532 100644 --- a/submodules/users/users.js +++ b/submodules/users/users.js @@ -1,7 +1,6 @@ -define(function(require){ +define(function(require) { var $ = require('jquery'), _ = require('underscore'), - chosen = require('chosen'), monster = require('monster'), timezone = require('monster-timezone'), toastr = require('toastr'); @@ -54,7 +53,7 @@ define(function(require){ container: 'body' } }); - template.find('[data-toggle="popover"]').popover({ container: 'body'}); + template.find('[data-toggle="popover"]').popover({ container: 'body' }); self.usersBindEvents(template, parent, dataTemplate); @@ -64,13 +63,13 @@ define(function(require){ self.usersCheckWalkthrough(); - if(_userId) { + if (_userId) { var cells = parent.find('.grid-row[data-id=' + _userId + '] .grid-cell'); 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 { @@ -78,8 +77,8 @@ define(function(require){ parent.find('.no-users-row').css('display', 'none'); } - if(_userId && _openedTab) { - template.find('.grid-row[data-id="'+ _userId +'"] .grid-cell[data-type="' + _openedTab + '"]').click(); + if (_userId && _openedTab) { + template.find('.grid-row[data-id="' + _userId + '"] .grid-cell[data-type="' + _openedTab + '"]').click(); } callback && callback(); @@ -100,7 +99,7 @@ define(function(require){ var self = this, flag = self.uiFlags.user.get('showUsersWalkthrough'); - if(flag !== false) { + if (flag !== false) { callback && callback(); } }, @@ -118,7 +117,7 @@ define(function(require){ var self = this, mainTemplate = $('#voip_container'), rowFirstUser = mainTemplate.find('.grid-row:not(.title):first'), - steps = [ + steps = [ { element: mainTemplate.find('.add-user')[0], intro: self.i18n.active().users.walkthrough.steps['1'], @@ -226,57 +225,56 @@ define(function(require){ } }; - if(!('extra' in dataUser)) { + if (!('extra' in dataUser)) { dataUser.extra = formattedUser; } dataUser.extra.countFeatures = 0; _.each(dataUser.features, function(v) { - if(v in dataUser.extra.mapFeatures) { + if (v in dataUser.extra.mapFeatures) { dataUser.extra.countFeatures++; dataUser.extra.mapFeatures[v].active = true; } }); - if(dataUser.extra.countFeatures > 0) { + if (dataUser.extra.countFeatures > 0) { dataUser.extra.hasFeatures = true; } - if(_mainDirectory) { + if (_mainDirectory) { dataUser.extra.mainDirectoryId = _mainDirectory.id; - if('directories' in dataUser && _mainDirectory.id in dataUser.directories) { + if ('directories' in dataUser && _mainDirectory.id in dataUser.directories) { dataUser.extra.includeInDirectory = true; - } - else { + } else { dataUser.extra.includeInDirectory = false; } } - if(_mainCallflow) { + if (_mainCallflow) { dataUser.extra.mainCallflowId = _mainCallflow.id; - if('flow' in _mainCallflow) { + if ('flow' in _mainCallflow) { var flow = _mainCallflow.flow, module = 'user'; - if(dataUser.features.indexOf('find_me_follow_me') >= 0) { + if (dataUser.features.indexOf('find_me_follow_me') >= 0) { module = 'ring_group'; dataUser.extra.groupTimeout = true; } - while(flow.module != module && '_' in flow.children) { - flow = flow.children['_']; + while (flow.module !== module && '_' in flow.children) { + flow = flow.children._; } dataUser.extra.ringingTimeout = flow.data.timeout; } } - if(_vmbox) { + if (_vmbox) { dataUser.extra.vmbox = _vmbox; } - if(!_.isEmpty(_vmbox) && !_.isEmpty(_vmboxes)) { + if (!_.isEmpty(_vmbox) && !_.isEmpty(_vmboxes)) { var i = _vmboxes.indexOf(_vmbox.mailbox); _vmboxes.splice(i, 1); @@ -300,7 +298,7 @@ define(function(require){ }; _.each(dataUser.extra.listExtensions, function(extension) { - if(dataUser.hasOwnProperty('presence_id') && dataUser.presence_id === extension) { + if (dataUser.hasOwnProperty('presence_id') && dataUser.presence_id === extension) { hasValidPresenceID = true; } @@ -308,12 +306,12 @@ define(function(require){ }); // Sort it from lower number to greater number - dataUser.extra.presenceIdOptions.sort(function(a,b) { + dataUser.extra.presenceIdOptions.sort(function(a, b) { return a.key > b.key ? 1 : -1; }); // If they don't have a valid Presence ID, then we add the "Unset" option - if(!hasValidPresenceID) { + if (!hasValidPresenceID) { dataUser.extra.presenceIdOptions.unshift({ key: 'unset', value: self.i18n.active().users.editionForm.noPresenceID }); } @@ -333,43 +331,41 @@ define(function(require){ }); _.each(data.callflows, function(callflow) { - if(callflow.type !== 'faxing') { + if (callflow.type !== 'faxing') { var userId = callflow.owner_id; _.each(callflow.numbers, function(number) { - if(number && number.length < 7) { + if (number && number.length < 7) { dataTemplate.existingExtensions.push(number); } }); - if(userId in mapUsers) { + if (userId in mapUsers) { var user = mapUsers[userId]; //User can only have one phoneNumber and one extension displayed with this code _.each(callflow.numbers, function(number) { - if(number.length < 7) { + if (number.length < 7) { user.extra.listExtensions.push(number); - } - else { + } else { user.extra.listCallerId.push(number); user.extra.listNumbers.push(number); - if(user.extra.phoneNumber === '') { + if (user.extra.phoneNumber === '') { user.extra.phoneNumber = number; - } - else { + } else { user.extra.additionalNumbers++; } } }); - // The additional extensions show how many more extensions than 1 a user has. + // The additional extensions show how many more extensions than 1 a user has. // So if the user has at least 1 extension, then we count how many he has minus the one we already display, otherwise we display 0. user.extra.additionalExtensions = user.extra.listExtensions.length >= 1 ? user.extra.listExtensions.length - 1 : 0; // If the main extension hasn't been defined because the presence_id isn't set, just pick the first extension - if(user.extra.extension === '' && user.extra.listExtensions.length > 0) { + if (user.extra.extension === '' && user.extra.listExtensions.length > 0) { user.extra.extension = user.extra.listExtensions[0]; } } @@ -381,11 +377,11 @@ define(function(require){ _.each(data.devices, function(device) { var userId = device.owner_id; - if(userId in mapUsers) { - var isRegistered = _.find(data.deviceStatus, function(status){ return (status.device_id === device.id && status.registered === true); }) ? true : false; + if (userId in mapUsers) { + var isRegistered = _.find(data.deviceStatus, function(status) { return (status.device_id === device.id && status.registered === true); }) ? true : false; - if(mapUsers[userId].extra.devices.length >= 2) { - if(mapUsers[userId].extra.additionalDevices === 0) { + if (mapUsers[userId].extra.devices.length >= 2) { + if (mapUsers[userId].extra.additionalDevices === 0) { mapUsers[userId].extra.additionalDevices = { count: 0, tooltip: '' @@ -393,17 +389,17 @@ define(function(require){ } mapUsers[userId].extra.additionalDevices.count++; - mapUsers[userId].extra.additionalDevices.tooltip += '' - + device.name + ' (' + device.device_type.replace('_', ' ') + ')
'; + mapUsers[userId].extra.additionalDevices.tooltip += '' + + device.name + ' (' + device.device_type.replace('_', ' ') + ')
'; } var deviceDataToTemplate = { - id: device.id, - name: device.name + ' (' + device.device_type.replace('_', ' ') + ')', - type: device.device_type, - registered: isRegistered, - icon: self.deviceIcons[device.device_type] - }; + id: device.id, + name: device.name + ' (' + device.device_type.replace('_', ' ') + ')', + type: device.device_type, + registered: isRegistered, + icon: self.deviceIcons[device.device_type] + }; if (device.device_type === 'mobile') { deviceDataToTemplate.mobile = device.mobile; @@ -457,7 +453,6 @@ define(function(require){ usersBindEvents: function(template, parent, data) { var self = this, - currentNumberSearch = '', currentUser, currentCallflow, existingExtensions = data.existingExtensions, @@ -466,29 +461,25 @@ define(function(require){ extraSpareNumbers, unassignedDevices, toastrMessages = self.i18n.active().users.toastrMessages, - mainDirectoryId, - mainCallflowId, listUsers = data, renderFindMeFollowMeFeature = function(featureCallback) { monster.parallel({ - userDevices: function(callback) { - self.usersListDeviceUser(currentUser.id, function(devices) { - callback(null, devices); - }); - }, - userCallflow: function(callback) { - self.usersGetMainCallflow(currentUser.id, function(callflow) { - callback(null, callflow); - }); - } + userDevices: function(callback) { + self.usersListDeviceUser(currentUser.id, function(devices) { + callback(null, devices); + }); }, - function(error, results) { - self.usersRenderFindMeFollowMe($.extend(true, results, { currentUser: currentUser, saveCallback: featureCallback })); + userCallflow: function(callback) { + self.usersGetMainCallflow(currentUser.id, function(callflow) { + callback(null, callflow); + }); } - ); + }, function(error, results) { + self.usersRenderFindMeFollowMe($.extend(true, results, { currentUser: currentUser, saveCallback: featureCallback })); + }); }; - setTimeout(function() { template.find('.search-query').focus() }); + setTimeout(function() { template.find('.search-query').focus(); }); template.find('.grid-row:not(.title) .grid-cell').on('click', function() { var cell = $(this), @@ -496,11 +487,11 @@ define(function(require){ row = cell.parents('.grid-row'), userId = row.data('id'); - template.find('.edit-user').slideUp("400", function() { + template.find('.edit-user').slideUp('400', function() { $(this).empty(); }); - if(cell.hasClass('active')) { + if (cell.hasClass('active')) { template.find('.grid-cell').removeClass('active'); template.find('.grid-row').removeClass('active'); @@ -515,8 +506,7 @@ define(function(require){ 'z-index': '0', 'border-top-color': '#a6a7a9' }); - } - else { + } else { template.find('.grid-cell').removeClass('active'); template.find('.grid-row').removeClass('active'); cell.toggleClass('active'); @@ -534,22 +524,13 @@ define(function(require){ }); self.usersGetTemplate(type, userId, listUsers, function(template, data) { - if(type === 'name') { + if (type === 'name') { currentUser = data; - template.find('#user_timezone').chosen({search_contains: true, width: "220px"}); + template.find('#user_timezone').chosen({ search_contains: true, width: '220px' }); data.extra.differentEmail ? template.find('.email-group').show() : template.find('.email-group').hide(); - - if(data.extra.mainDirectoryId) { - mainDirectoryId = data.extra.mainDirectoryId; - } - - if(data.extra.mainCallflowId) { - mainCallflowId = data.extra.mainCallflowId; - } - } - else if(type === 'numbers') { + } else if (type === 'numbers') { extensionsToSave = []; extraSpareNumbers = []; currentCallflow = data.callflow; @@ -560,8 +541,7 @@ define(function(require){ _.each(data.extensions, function(number) { extensionsToSave.push(number); }); - } - else if(type === 'extensions') { + } else if (type === 'extensions') { existingExtensions = data.allExtensions; currentCallflow = data.callflow; currentUser = data.user; @@ -570,11 +550,9 @@ define(function(require){ _.each(data.assignedNumbers, function(v) { numbersToSave.push(v.phoneNumber); }); - } - else if(type === 'features') { + } else if (type === 'features') { currentUser = data; - } - else if (type === 'devices') { + } else if (type === 'devices') { setTimeout(function() { template.find('.search-query').focus(); }); currentUser = userId; unassignedDevices = {}; @@ -600,90 +578,88 @@ define(function(require){ row.data('search').toLowerCase().indexOf(searchString) < 0 ? row.hide() : row.show(); }); - if(rows.size() > 0) { + if (rows.size() > 0) { rows.is(':visible') ? emptySearch.hide() : emptySearch.show(); } }); template.find('.users-header .add-user').on('click', function() { monster.parallel({ - callflows: function(callback) { - self.usersListCallflows(function(callflows) { - callback(null, callflows); - }); - }, - vmboxes: function(callback) { - self.usersListVMBoxes(function(vmboxes) { - callback(null, vmboxes); - }); - } + callflows: function(callback) { + self.usersListCallflows(function(callflows) { + callback(null, callflows); + }); }, - function(err, results) { - var originalData = self.usersFormatAddUser(results), - userTemplate = $(monster.template(self, 'users-creation', originalData)); + vmboxes: function(callback) { + self.usersListVMBoxes(function(vmboxes) { + callback(null, vmboxes); + }); + } + }, function(err, results) { + var originalData = self.usersFormatAddUser(results), + userTemplate = $(monster.template(self, 'users-creation', originalData)); - monster.ui.mask(userTemplate.find('#extension'), 'extension'); + monster.ui.mask(userTemplate.find('#extension'), 'extension'); - monster.ui.validate(userTemplate.find('#form_user_creation'), { - rules: { - 'callflow.extension': { - checkList: originalData.listExtensions - }, - 'vmbox.number': { - checkList: originalData.listVMBoxes - }, - 'user.password': { - minlength: 6 - } + monster.ui.validate(userTemplate.find('#form_user_creation'), { + rules: { + 'callflow.extension': { + checkList: originalData.listExtensions }, - messages: { - 'user.first_name': { - required: self.i18n.active().validation.required - }, - 'user.last_name': { - required: self.i18n.active().validation.required - }, - 'callflow.extension': { - required: self.i18n.active().validation.required - } + 'vmbox.number': { + checkList: originalData.listVMBoxes + }, + 'user.password': { + minlength: 6 } - }); + }, + messages: { + 'user.first_name': { + required: self.i18n.active().validation.required + }, + 'user.last_name': { + required: self.i18n.active().validation.required + }, + 'callflow.extension': { + required: self.i18n.active().validation.required + } + } + }); - monster.ui.showPasswordStrength(userTemplate.find('#password')); + monster.ui.showPasswordStrength(userTemplate.find('#password')); - userTemplate.find('#create_user').on('click', function() { - if(monster.ui.valid(userTemplate.find('#form_user_creation'))) { - var $this = $(this), - dataForm = monster.ui.getFormData('form_user_creation'), - formattedData = self.usersFormatCreationData(dataForm); + userTemplate.find('#create_user').on('click', function() { + if (monster.ui.valid(userTemplate.find('#form_user_creation'))) { + var $this = $(this), + dataForm = monster.ui.getFormData('form_user_creation'), + formattedData = self.usersFormatCreationData(dataForm); - $this - .prop('disabled', true); + $this + .prop('disabled', true); - self.usersCreate(formattedData, function(data) { - popup.dialog('close').remove(); + self.usersCreate(formattedData, function(data) { + popup.dialog('close').remove(); - self.usersRender({ userId: data.user.id }); - }, function() { - $this - .prop('disabled', false); - }); - } - }); + self.usersRender({ userId: data.user.id }); + }, function() { + $this + .prop('disabled', false); + }); + } + }); - userTemplate.find('#notification_email').on('change', function() { - userTemplate.find('.email-group').toggleClass('hidden'); - }); + userTemplate.find('#notification_email').on('change', function() { + userTemplate.find('.email-group').toggleClass('hidden'); + }); - var popup = monster.ui.dialog(userTemplate, { - title: self.i18n.active().users.dialogCreationUser.title - }); - } - ); + var popup = monster.ui.dialog(userTemplate, { + title: self.i18n.active().users.dialogCreationUser.title + }); + }); }); template.on('click', '.cancel-link', function() { - template.find('.edit-user').slideUp("400", function() { + template.find('.edit-user').slideUp('400', function() { $(this).empty(); template.find('.grid-cell.active').css({ 'position': 'inline-block', @@ -719,7 +695,7 @@ define(function(require){ extensionsList.push(number); }); - if(numbers.length > 0) { + if (numbers.length > 0) { var updateCallflow = function() { self.usersUpdateCallflowNumbers(userId, (currentCallflow || {}).id, numbers, function(callflowData) { toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); @@ -728,16 +704,15 @@ define(function(require){ }); }; - if(self.usersHasProperPresenceId(extensionsList, currentUser)) { + if (self.usersHasProperPresenceId(extensionsList, currentUser)) { updateCallflow(); - } - else { + } else { var oldPresenceId = currentUser.presence_id; self.usersUpdatePresenceIDPopup(extensionsList, currentUser, function(user) { // Update the user and the vmbox with the new presence_id / main number self.usersUpdateUser(user, function() { - self.usersSmartUpdateVMBox({ - user: user, + self.usersSmartUpdateVMBox({ + user: user, callback: function() { updateCallflow(); }, @@ -747,8 +722,7 @@ define(function(require){ }); }); } - } - else { + } else { monster.ui.alert('warning', self.i18n.active().users.noNumberCallflow); } }); @@ -777,7 +751,7 @@ define(function(require){ phoneRow.slideUp(function() { phoneRow.remove(); - if(!template.find('.list-assigned-items .item-row').is(':visible')) { + if (!template.find('.list-assigned-items .item-row').is(':visible')) { emptyRow.slideDown(); } }); @@ -787,7 +761,7 @@ define(function(require){ var extension = $(this).siblings('input').val(), index = existingExtensions.indexOf(extension); - if(index > -1) { + if (index > -1) { existingExtensions.splice(index, 1); } @@ -804,7 +778,7 @@ define(function(require){ }); template.on('change', '#notification_email', function() { - if ( template.find('.email-border').hasClass('open') ) { + if (template.find('.email-border').hasClass('open')) { template.find('.email-border').removeClass('open', 400); template.find('.email-group').slideUp(); } else { @@ -814,58 +788,56 @@ define(function(require){ }); template.on('click', '.save-user', function() { - var formData = monster.ui.getFormData('form-'+currentUser.id), - form = template.find('#form-'+currentUser.id); + var formData = monster.ui.getFormData('form-' + currentUser.id), + form = template.find('#form-' + currentUser.id); monster.util.checkVersion(currentUser, function() { - if(monster.ui.valid(form)) { + if (monster.ui.valid(form)) { currentUser.extra.vmbox.timezone = formData.timezone; var userToSave = $.extend(true, {}, currentUser, formData), oldPresenceId = currentUser.presence_id; monster.parallel({ - vmbox: function(callback) { - self.usersSmartUpdateVMBox({ - user: userToSave, - callback: function(vmbox) { - callback(null, vmbox); - }, - oldPresenceId: oldPresenceId - }); - }, - user: function(callback) { - self.usersUpdateUser(userToSave, function(userData) { - callback(null, userData.data); - }); - }, - callflow: function(callback) { - if(userToSave.extra.ringingTimeout && userToSave.features.indexOf('find_me_follow_me') < 0) { - self.usersGetMainCallflow(userToSave.id, function(mainCallflow) { - if('flow' in mainCallflow) { - var flow = mainCallflow.flow; - while(flow.module != 'user' && '_' in flow.children) { - flow = flow.children['_']; - } - flow.data.timeout = parseInt(userToSave.extra.ringingTimeout); - self.usersUpdateCallflow(mainCallflow, function(updatedCallflow) { - callback(null, updatedCallflow); - }); - } else { - callback(null, null); + vmbox: function(callback) { + self.usersSmartUpdateVMBox({ + user: userToSave, + callback: function(vmbox) { + callback(null, vmbox); + }, + oldPresenceId: oldPresenceId + }); + }, + user: function(callback) { + self.usersUpdateUser(userToSave, function(userData) { + callback(null, userData.data); + }); + }, + callflow: function(callback) { + if (userToSave.extra.ringingTimeout && userToSave.features.indexOf('find_me_follow_me') < 0) { + self.usersGetMainCallflow(userToSave.id, function(mainCallflow) { + if ('flow' in mainCallflow) { + var flow = mainCallflow.flow; + while (flow.module !== 'user' && '_' in flow.children) { + flow = flow.children._; } - }); - } else { - callback(null, null); - } + flow.data.timeout = parseInt(userToSave.extra.ringingTimeout); + self.usersUpdateCallflow(mainCallflow, function(updatedCallflow) { + callback(null, updatedCallflow); + }); + } else { + callback(null, null); + } + }); + } else { + callback(null, null); } - }, - function(error, results) { - toastr.success(monster.template(self, '!' + toastrMessages.userUpdated, { name: results.user.first_name + ' ' + results.user.last_name })); - - self.usersRender({ userId: results.user.id }); } - ); + }, function(error, results) { + toastr.success(monster.template(self, '!' + toastrMessages.userUpdated, { name: results.user.first_name + ' ' + results.user.last_name })); + + self.usersRender({ userId: results.user.id }); + }); } }); }); @@ -880,7 +852,7 @@ define(function(require){ rules: { 'pin': { number: true, - minlength:4, + minlength: 4, min: 0 } } @@ -890,7 +862,7 @@ define(function(require){ var formData = monster.ui.getFormData('form_new_pin'), vmboxData = $.extend(true, currentUser.extra.vmbox, formData); - if(monster.ui.valid(form)) { + if (monster.ui.valid(form)) { self.usersUpdateVMBox(vmboxData, function(data) { popup.dialog('close').remove(); @@ -939,8 +911,8 @@ define(function(require){ var formData = monster.ui.getFormData('form_new_username'), userToSave = $.extend(true, {}, currentUser, formData); - if(monster.ui.valid(form)) { - if(!currentUser.extra.differentEmail) { + if (monster.ui.valid(form)) { + if (!currentUser.extra.differentEmail) { userToSave.email = userToSave.username; } @@ -948,7 +920,7 @@ define(function(require){ currentUser.username = userData.data.username; template.find('#username').html(userData.data.username); - if(!currentUser.extra.differentEmail) { + if (!currentUser.extra.differentEmail) { template.find('#email').val(userData.data.email); currentUser.email = userData.username; } @@ -983,8 +955,7 @@ define(function(require){ /* Events for Devices in Users */ template.on('click', '.create-device', function() { var $this = $(this), - type = $this.data('type'), - userId = $this.parents('.grid-row').data('id'); + type = $this.data('type'); monster.pub('voip.devices.renderAdd', { type: type, @@ -999,11 +970,11 @@ define(function(require){ }); template.on('click', '.spare-devices:not(.disabled)', function() { - var currentlySelected = $.map(template.find('.device-list.list-assigned-items .item-row'), function(val) { return $(val).data('id') }); + var currentlySelected = $.map(template.find('.device-list.list-assigned-items .item-row'), function(val) { return $(val).data('id'); }); self.usersGetDevicesData(function(devicesData) { var spareDevices = {}; _.each(devicesData, function(device) { - if( (!('owner_id' in device) || device.owner_id === '' || device.owner_id === currentUser) && currentlySelected.indexOf(device.id) === -1 ) { + if ((!('owner_id' in device) || device.owner_id === '' || device.owner_id === currentUser) && currentlySelected.indexOf(device.id) === -1) { spareDevices[device.id] = device; } }); @@ -1019,7 +990,7 @@ define(function(require){ listAssigned.find('.empty-row').hide(); listAssigned.append(rowDevice); - if(device.owner_id) { + if (device.owner_id) { delete unassignedDevices[device.id]; } }); @@ -1030,16 +1001,16 @@ define(function(require){ template.on('click', '.save-devices', function() { var dataDevices = { - new: [], - old: [] + newDevices: [], + oldDevices: [] }, name = $(this).parents('.grid-row').find('.grid-cell.name').text(), userId = $(this).parents('.grid-row').data('id'); template.find('.detail-devices .list-assigned-items .item-row:not(.assigned)').each(function(k, row) { - dataDevices.new.push($(row).data('id')); + dataDevices.newDevice.push($(row).data('id')); }); - dataDevices.old = _.keys(unassignedDevices); + dataDevices.oldDevice = _.keys(unassignedDevices); self.usersUpdateDevices(dataDevices, userId, function() { toastr.success(monster.template(self, '!' + toastrMessages.devicesUpdated, { name: name })); @@ -1052,31 +1023,30 @@ define(function(require){ id = row.data('id'), userId = $(this).parents('.grid-row').data('id'); - monster.pub('voip.devices.editDevice', { - data: { id: id }, - callbackSave: function(device) { - row.find('.edit-device').html(device.name); - }, - callbackDelete: function(device) { - self.usersRender({ userId: userId, openedTab: 'devices' }); - } + monster.pub('voip.devices.editDevice', { + data: { id: id }, + callbackSave: function(device) { + row.find('.edit-device').html(device.name); + }, + callbackDelete: function(device) { + self.usersRender({ userId: userId, openedTab: 'devices' }); } - ); + }); }); template.on('click', '.detail-devices .list-assigned-items .remove-device', function() { var row = $(this).parents('.item-row'), userId = template.find('.grid-row.active').data('id'), deviceId = row.data('id'), - userData = _.find(data.users, function(user, idx) { return user.id === userId; }), - deviceData = _.find(userData.extra.devices, function(device, idx) { return device.id === deviceId; }), - removeDevice = function () { - if(row.hasClass('assigned')) { + userData = _.find(data.users, function(user) { return user.id === userId; }), + deviceData = _.find(userData.extra.devices, function(device) { return device.id === deviceId; }), + removeDevice = function() { + if (row.hasClass('assigned')) { unassignedDevices[row.data('id')] = true; } row.remove(); var rows = template.find('.detail-devices .list-assigned-items .item-row'); - if(rows.is(':visible') === false) { + if (rows.is(':visible') === false) { template.find('.detail-devices .list-assigned-items .empty-row').show(); } }; @@ -1089,8 +1059,7 @@ define(function(require){ ), removeDevice ); - } - else { + } else { removeDevice(); } }); @@ -1106,7 +1075,7 @@ define(function(require){ row.slideUp(function() { row.remove(); - if ( !template.find('.list-assigned-items .item-row').is(':visible') ) { + if (!template.find('.list-assigned-items .item-row').is(':visible')) { template.find('.list-assigned-items .empty-row').slideDown(); } @@ -1118,45 +1087,44 @@ define(function(require){ template.on('click', '.actions .spare-link:not(.disabled)', function(e) { e.preventDefault(); - var $this = $(this), - args = { - accountName: monster.apps['auth'].currentAccount.name, - accountId: self.accountId, - ignoreNumbers: $.map(template.find('.item-row'), function(row) { - return $(row).data('id'); - }), - extraNumbers: extraSpareNumbers, - callback: function(numberList, remainingQuantity) { - template.find('.empty-row').hide(); - - _.each(numberList, function(val, idx) { - template - .find('.list-assigned-items') - .append($(monster.template(self, 'users-numbersItemRow', { - number: val - }))); - - var numberDiv = template.find('[data-id="'+val.phoneNumber+'"]'), - args = { - target: numberDiv.find('.edit-features'), - numberData: val, - afterUpdate: function(features) { - monster.ui.paintNumberFeaturesIcon(features, numberDiv.find('.features')); - } - }; + var args = { + accountName: monster.apps.auth.currentAccount.name, + accountId: self.accountId, + ignoreNumbers: $.map(template.find('.item-row'), function(row) { + return $(row).data('id'); + }), + extraNumbers: extraSpareNumbers, + callback: function(numberList, remainingQuantity) { + template.find('.empty-row').hide(); + + _.each(numberList, function(val) { + template + .find('.list-assigned-items') + .append($(monster.template(self, 'users-numbersItemRow', { + number: val + }))); + + var numberDiv = template.find('[data-id="' + val.phoneNumber + '"]'), + args = { + target: numberDiv.find('.edit-features'), + numberData: val, + afterUpdate: function(features) { + monster.ui.paintNumberFeaturesIcon(features, numberDiv.find('.features')); + } + }; - monster.pub('common.numberFeaturesMenu.render', args); + monster.pub('common.numberFeaturesMenu.render', args); - extraSpareNumbers = _.without(extraSpareNumbers, val.phoneNumber); - }); + extraSpareNumbers = _.without(extraSpareNumbers, val.phoneNumber); + }); - monster.ui.tooltips(template); + monster.ui.tooltips(template); - if(remainingQuantity == 0) { - template.find('.spare-link').addClass('disabled'); - } + if (remainingQuantity === 0) { + template.find('.spare-link').addClass('disabled'); } - }; + } + }; monster.pub('common.numbers.dialogSpare', args); }); @@ -1168,7 +1136,7 @@ define(function(require){ searchType: $(this).data('type'), callbacks: { success: function(numbers) { - _.each(numbers, function(number, k) { + _.each(numbers, function(number) { number.phoneNumber = number.id; var rowTemplate = $(monster.template(self, 'users-numbersItemRow', { @@ -1210,7 +1178,7 @@ define(function(require){ } }); - if(dataNumbers.length > 0) { + if (dataNumbers.length > 0) { self.usersUpdateCallflowNumbers(userId, (currentCallflow || {}).id, dataNumbers, function(callflowData) { var afterUpdate = function() { toastr.success(monster.template(self, '!' + toastrMessages.numbersUpdated, { name: name })); @@ -1219,7 +1187,7 @@ define(function(require){ }; // If the User has the External Caller ID Number setup to a number that is no longer assigned to this user, then remove the Caller-ID Feature - if(currentUser.caller_id.hasOwnProperty('external') + if (currentUser.caller_id.hasOwnProperty('external') && currentUser.caller_id.external.hasOwnProperty('number') && callflowData.numbers.indexOf(currentUser.caller_id.external.number) < 0) { delete currentUser.caller_id.external.number; @@ -1229,13 +1197,11 @@ define(function(require){ toastr.info(toastrMessages.callerIDDeleted); }); - } - else { + } else { afterUpdate(); } }); - } - else { + } else { monster.ui.alert('warning', self.i18n.active().users.noNumberCallflow); } }); @@ -1245,15 +1211,15 @@ define(function(require){ }); template.on('click', '.feature[data-feature="call_forward"]', function() { - if(currentUser.features.indexOf('find_me_follow_me') < 0) { + if (currentUser.features.indexOf('find_me_follow_me') < 0) { var featureUser = $.extend(true, {}, currentUser); self.usersGetMainCallflow(featureUser.id, function(mainCallflow) { - if(mainCallflow && 'flow' in mainCallflow) { + if (mainCallflow && 'flow' in mainCallflow) { var flow = mainCallflow.flow; - while(flow.module != 'user' && '_' in flow.children) { - flow = flow.children['_']; + while (flow.module !== 'user' && '_' in flow.children) { + flow = flow.children._; } - if(flow.data.timeout < 30) { + if (flow.data.timeout < 30) { featureUser.extra.timeoutTooShort = true; } } @@ -1274,7 +1240,7 @@ define(function(require){ template.on('click', '.feature[data-feature="call_recording"]', function() { self.usersGetMainCallflow(currentUser.id, function(callflow) { - if(callflow) { + if (callflow) { self.usersRenderCallRecording({ userCallflow: callflow, currentUser: currentUser @@ -1292,14 +1258,13 @@ define(function(require){ template.on('click', '.feature[data-feature="vm_to_email"]', function() { self.usersListVMBoxesUser(currentUser.id, function(vmboxes) { currentUser.extra.deleteAfterNotify = true; - if(vmboxes.length > 0) { + if (vmboxes.length > 0) { self.usersGetVMBox(vmboxes[0].id, function(data) { currentUser.extra.deleteAfterNotify = data.delete_after_notify; self.usersRenderVMToEmail(currentUser); }); - } - else { + } else { self.usersRenderVMToEmail(currentUser); } }); @@ -1313,108 +1278,104 @@ define(function(require){ conference: dataConf.conference }; - if(_.isEmpty(data.listConferences)) { + if (_.isEmpty(data.listConferences)) { monster.ui.alert('error', self.i18n.active().users.conferencing.noConfNumbers); - } - else { + } else { self.usersRenderConferencing(data); } }); }); template.on('click', '.feature[data-feature="faxing"]', function() { - if(!monster.util.isTrial()) { + if (!monster.util.isTrial()) { monster.parallel({ - numbers: function(callback) { - self.usersListNumbers(function(listNumbers) { - var spareNumbers = {}; - - _.each(listNumbers.numbers, function(number, key) { - if(!number.hasOwnProperty('used_by') || number.used_by === '') { - spareNumbers[key] = number; - } - }); + numbers: function(callback) { + self.usersListNumbers(function(listNumbers) { + var spareNumbers = {}; - callback && callback(null, spareNumbers); + _.each(listNumbers.numbers, function(number, key) { + if (!number.hasOwnProperty('used_by') || number.used_by === '') { + spareNumbers[key] = number; + } }); - }, - callflows: function(callback) { - self.usersListCallflowsUser(currentUser.id, function(callflows) { - var existingCallflow; - _.each(callflows, function(callflow) { - if(callflow.type === 'faxing') { - existingCallflow = callflow; + callback && callback(null, spareNumbers); + }); + }, + callflows: function(callback) { + self.usersListCallflowsUser(currentUser.id, function(callflows) { + var existingCallflow; - return false; - } - }); + _.each(callflows, function(callflow) { + if (callflow.type === 'faxing') { + existingCallflow = callflow; - 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); - } - }); - }, - account: function(callback) { - self.callApi({ - resource: 'account.get', - data: { - accountId: self.accountId - }, - success: function(data, status) { - callback(null, data.data); + return false; } }); - } + + 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); + } + }); }, - function(err, results) { - results.user = currentUser; + account: function(callback) { + self.callApi({ + resource: 'account.get', + data: { + accountId: self.accountId + }, + success: function(data, status) { + callback(null, data.data); + } + }); + } + }, function(err, results) { + results.user = currentUser; - if ( typeof results.callflows !== 'undefined' ) { - // Compatibility with old version - var faxboxId = results.callflows.flow.data.hasOwnProperty('faxbox_id') ? results.callflows.flow.data.faxbox_id : results.callflows.flow.data.id; + if (typeof results.callflows !== 'undefined') { + // Compatibility with old version + var faxboxId = results.callflows.flow.data.hasOwnProperty('faxbox_id') ? results.callflows.flow.data.faxbox_id : results.callflows.flow.data.id; - self.callApi({ - resource: 'faxbox.get', - data: { - accountId: self.accountId, - faxboxId: faxboxId - }, - success: function(_data) { - results.faxbox = _data.data; + self.callApi({ + resource: 'faxbox.get', + data: { + accountId: self.accountId, + faxboxId: faxboxId + }, + success: function(_data) { + results.faxbox = _data.data; - results.faxbox.id = faxboxId; + results.faxbox.id = faxboxId; - self.usersRenderFaxboxes(results); - }, - error: function() { - self.usersRenderFaxboxes(results); - } - }); - } else { - self.usersRenderFaxboxes(results); - } + self.usersRenderFaxboxes(results); + }, + error: function() { + self.usersRenderFaxboxes(results); + } + }); + } else { + self.usersRenderFaxboxes(results); } - ); - } - else { + }); + } else { monster.ui.alert('warning', self.i18n.active().users.faxing.trialError); } }); $('body').on('click', '#users_container_overlay', function() { - template.find('.edit-user').slideUp("400", function() { + template.find('.edit-user').slideUp('400', function() { $(this).empty(); }); @@ -1432,7 +1393,6 @@ define(function(require){ template.find('.grid-cell.active').removeClass('active'); template.find('.grid-row.active').removeClass('active'); - }); }, @@ -1452,10 +1412,9 @@ define(function(require){ template.find('.save-presence-id').on('click', function() { var newPresenceID = template.find('.presence-id-option.active').data('number'); - if(newPresenceID !== 'none') { + if (newPresenceID !== 'none') { user.presence_id = newPresenceID + ''; - } - else { + } else { delete user.presence_id; } @@ -1478,22 +1437,20 @@ define(function(require){ usersHasProperPresenceId: function(listNumbers, user) { var self = this; - if(user.presence_id) { + if (user.presence_id) { var found = false, formattedPresenceID = '' + user.presence_id; _.each(listNumbers, function(number) { - if(number === formattedPresenceID) { + if (number === formattedPresenceID) { found = true; } }); return found; - } - else if(listNumbers.length) { + } else if (listNumbers.length) { return false; - } - else { + } else { return true; } }, @@ -1504,7 +1461,7 @@ define(function(require){ sendToSameEmail: true, nextExtension: '', listExtensions: {}, - listVMBoxes:{}, + listVMBoxes: {} }, arrayExtensions = [], arrayVMBoxes = [], @@ -1512,7 +1469,7 @@ define(function(require){ _.each(data.callflows, function(callflow) { _.each(callflow.numbers, function(number) { - if(number.length < 7) { + if (number.length < 7) { formattedData.listExtensions[number] = callflow; arrayExtensions.push(number); } @@ -1524,7 +1481,7 @@ define(function(require){ arrayVMBoxes.push(vmbox.mailbox); }); - // We concat both arrays because we want to create users with the same number for the extension # and the vmbox, + // We concat both arrays because we want to create users with the same number for the extension # and the vmbox, // If for some reason a vmbox number exist without an extension, we still don't want to let them set their extension number to that number. allNumbers = arrayExtensions.concat(arrayVMBoxes); formattedData.nextExtension = parseInt(monster.util.getNextExtension(allNumbers)) + ''; @@ -1536,7 +1493,7 @@ define(function(require){ var tempList = [], listNumbers = {}; - _.each(data.numbers, function(val, key){ + _.each(data.numbers, function(val, key) { tempList.push(key); }); @@ -1544,9 +1501,9 @@ define(function(require){ return a < b ? -1 : 1; }); - if(data.callflows) { - if(data.callflows.numbers.length > 0) { - listNumbers[data.callflows.numbers[0]] = data.callflows.numbers[0] + if (data.callflows) { + if (data.callflows.numbers.length > 0) { + listNumbers[data.callflows.numbers[0]] = data.callflows.numbers[0]; } } @@ -1587,17 +1544,16 @@ define(function(require){ } }; - if(monster.ui.valid(featureForm)) { + if (monster.ui.valid(featureForm)) { data.conference = monster.ui.getFormData('conferencing_form'); - if(switchFeature.prop('checked')) { + if (switchFeature.prop('checked')) { self.usersUpdateConferencing(data, function(data) { args.userId = data.user.id; self.usersRender(args); }); - } - else { + } else { self.usersDeleteConferencing(data.user.id, function() { args.userId = data.user.id; @@ -1621,7 +1577,6 @@ define(function(require){ var self = this, data = self.usersFormatFaxingData(data), featureTemplate = $(monster.template(self, 'users-feature-faxing', data)), - numberMirror = featureTemplate.find('.number-mirror'), switchFeature = featureTemplate.find('.switch-state'), popup = monster.ui.dialog(featureTemplate, { title: data.user.extra.mapFeatures.faxing.title, @@ -1636,15 +1591,14 @@ define(function(require){ container: featureTemplate.find('.number-select'), inputName: 'caller_id', number: data.hasOwnProperty('faxbox') ? data.faxbox.caller_id : undefined, - removeCallback: function () { + removeCallback: function() { featureTemplate .find('.number-mirror') .text(self.i18n.active().users.faxing.emailToFax.default); }, - globalAddNumberCallback: function (number, addNumberToControl) { - var found = false, - // Number can come back from the buy common control, as an object, or from the spare selector, as a string - foundNumber = _.isObject(number) ? _.keys(number)[0] : number; + globalAddNumberCallback: function(number, addNumberToControl) { + // Number can come back from the buy common control, as an object, or from the spare selector, as a string + var foundNumber = _.isObject(number) ? _.keys(number)[0] : number; addNumberToControl && addNumberToControl(foundNumber); @@ -1676,15 +1630,14 @@ define(function(require){ } }; - if ( switchFeature.prop('checked')) { + if (switchFeature.prop('checked')) { if (newNumber !== '') { self.usersUpdateFaxing(data, newNumber, function(results) { args.userId = results.callflow.owner_id; self.usersRender(args); }); - } - else { + } else { monster.ui.alert('error', self.i18n.active().users.faxing.toastr.error.numberMissing); } } else { @@ -1715,12 +1668,11 @@ define(function(require){ }); requirePin.on('change', function() { - if(requirePin.is(':checked')) { + if (requirePin.is(':checked')) { featureTemplate.find('#pin') .removeAttr('disabled', 'disabled') .focus(); - } - else { + } else { featureTemplate.find('#pin') .val('') .attr('disabled', 'disabled'); @@ -1728,18 +1680,19 @@ define(function(require){ }); featureTemplate.find('.save').on('click', function() { - if(monster.ui.valid(featureForm)) { + if (monster.ui.valid(featureForm)) { var formData = monster.ui.getFormData('hotdesk_form'), - args = { - openedTab: 'features', - callback: function() { - popup.dialog('close').remove(); - } - }; + args = { + openedTab: 'features', + callback: function() { + popup.dialog('close').remove(); + } + }, + userToSave; formData.enabled = switchFeature.prop('checked'); - - if(formData.require_pin === false) { delete formData.pin; } + + if (formData.require_pin === false) { delete formData.pin; } delete currentUser.hotdesk; userToSave = $.extend(true, {}, currentUser, { hotdesk: formData }); @@ -1800,14 +1753,13 @@ define(function(require){ listFnParallel.push(function(callback) { self.usersGetVMBox(vm.id, function(data) { /* Only update vms if the deleteAfterNotify value is different than before */ - if(data.delete_after_notify !== val) { + if (data.delete_after_notify !== val) { data.delete_after_notify = val; self.usersUpdateVMBox(data, function(data) { callback(null, data); }); - } - else { + } else { callback(null, data); } }); @@ -1823,8 +1775,8 @@ define(function(require){ userToSave.vm_to_email_enabled = enabled; /* Only update the email and the checkboxes if the setting is enabled */ - if(enabled === true) { - if(monster.ui.valid(featureForm)) { + if (enabled === true) { + if (monster.ui.valid(featureForm)) { userToSave.email = formData.email; /* Update VMBoxes, then update user and finally close the popup */ @@ -1832,8 +1784,7 @@ define(function(require){ updateUser(userToSave); }); } - } - else { + } else { updateUser(userToSave); } }); @@ -1859,10 +1810,9 @@ define(function(require){ featureTemplate.find('.save').on('click', function() { var switchCallerId = featureTemplate.find('.switch-state'), - userData = currentUser, userToSave = $.extend(true, {}, { caller_id: { - external: {}, + external: {} } }, currentUser), args = { @@ -1876,11 +1826,8 @@ define(function(require){ var callerIdValue = featureTemplate.find('.caller-id-select').val(); userToSave.caller_id.external.number = callerIdValue; - } - else { - if(userToSave.caller_id.hasOwnProperty('external')) { - delete userToSave.caller_id.external.number; - } + } else if (userToSave.caller_id.hasOwnProperty('external')) { + delete userToSave.caller_id.external.number; } self.usersUpdateUser(userToSave, function(data) { @@ -1890,13 +1837,12 @@ define(function(require){ }); }); - if(currentUser.extra.listCallerId.length > 0){ + if (currentUser.extra.listCallerId.length > 0) { var popup = monster.ui.dialog(featureTemplate, { title: currentUser.extra.mapFeatures.caller_id.title, position: ['center', 20] }); - } - else { + } else { monster.ui.alert('error', self.i18n.active().users.errorCallerId); } }, @@ -1910,11 +1856,10 @@ define(function(require){ //cfmode is on if call_forward.enabled = true //cfmode is failover if call_forward.enabled = false & call_forward.failover = true //cfmode is off if call_forward.enabled = false & call_forward.failover = false - if(user.hasOwnProperty('call_forward') && user.call_forward.hasOwnProperty('enabled')) { - if(user.call_forward.enabled === true) { + if (user.hasOwnProperty('call_forward') && user.call_forward.hasOwnProperty('enabled')) { + if (user.call_forward.enabled === true) { cfMode = 'on'; - } - else if(user.call_forward.enabled === false) { + } else if (user.call_forward.enabled === false) { cfMode = user.call_forward.hasOwnProperty('failover') && user.call_forward.failover === true ? 'failover' : 'off'; } } @@ -1940,7 +1885,7 @@ define(function(require){ monster.ui.mask(featureTemplate.find('#number'), 'phoneNumber'); - if(currentUser.hasOwnProperty('call_forward') && currentUser.call_forward.require_keypress) { + if (currentUser.hasOwnProperty('call_forward') && currentUser.call_forward.require_keypress) { timeoutWarningBox.hide(); } @@ -1969,20 +1914,18 @@ define(function(require){ }); featureTemplate.find('.save').on('click', function() { - if(monster.ui.valid(featureForm)) { + if (monster.ui.valid(featureForm)) { var formData = monster.ui.getFormData('call_forward_form'); formData.require_keypress = !formData.require_keypress; var selectedType = featureTemplate.find('.feature-select-mode button.selected').data('value'); - if(selectedType === 'off') { + if (selectedType === 'off') { formData.enabled = false; formData.failover = false; - } - else if(selectedType === 'failover') { + } else if (selectedType === 'failover') { formData.enabled = false; formData.failover = true; - } - else { + } else { formData.enabled = true; formData.failover = true; } @@ -1992,7 +1935,7 @@ define(function(require){ var userToSave = $.extend(true, {}, currentUser, { call_forward: formData }); - if(timeoutWarningBox.is(':visible')) { + if (timeoutWarningBox.is(':visible')) { args.openedTab = 'name'; } @@ -2015,15 +1958,15 @@ define(function(require){ position: ['center', 20] }); - popup.find(".monster-button").blur(); + popup.find('.monster-button').blur(); }, usersRenderFindMeFollowMe: function(params) { var self = this; - if(!params.userCallflow) { + if (!params.userCallflow) { monster.ui.alert('error', self.i18n.active().users.find_me_follow_me.noNumber); - } else if(!params.userDevices || params.userDevices.length === 0) { + } else if (!params.userDevices || params.userDevices.length === 0) { monster.ui.alert('error', self.i18n.active().users.find_me_follow_me.noDevice); } else { var currentUser = params.currentUser, @@ -2039,9 +1982,11 @@ define(function(require){ }, userDevices = {}; - var nodeSearch = userCallflow.flow; - while(nodeSearch.hasOwnProperty('module') && ['ring_group', 'user'].indexOf(nodeSearch.module) < 0) { - nodeSearch = nodeSearch.children['_']; + var nodeSearch = userCallflow.flow, + endpoints; + + while (nodeSearch.hasOwnProperty('module') && ['ring_group', 'user'].indexOf(nodeSearch.module) < 0) { + nodeSearch = nodeSearch.children._; } endpoints = nodeSearch.module === 'ring_group' ? nodeSearch.data.endpoints : []; @@ -2050,7 +1995,7 @@ define(function(require){ }); endpoints = $.map(endpoints, function(endpoint) { - if(userDevices[endpoint.id]) { + if (userDevices[endpoint.id]) { var device = userDevices[endpoint.id]; delete userDevices[endpoint.id]; return { @@ -2060,7 +2005,7 @@ define(function(require){ name: device.name, icon: self.deviceIcons[device.device_type], disabled: false - } + }; } }); @@ -2072,7 +2017,7 @@ define(function(require){ name: device.name, icon: self.deviceIcons[device.device_type], disabled: true - }) + }); }); monster.pub('common.ringingDurationControl.render', { @@ -2092,38 +2037,37 @@ define(function(require){ featureTemplate.find('.save').on('click', function() { var enabled = switchFeature.prop('checked'); - monster.pub('common.ringingDurationControl.getEndpoints', { + monster.pub('common.ringingDurationControl.getEndpoints', { container: featureForm, callback: function(endpoints) { - currentUser.smartpbx = currentUser.smartpbx || {}; currentUser.smartpbx.find_me_follow_me = currentUser.smartpbx.find_me_follow_me || {}; currentUser.smartpbx.find_me_follow_me.enabled = (enabled && endpoints.length > 0); var callflowNode = {}; - if(enabled && endpoints.length > 0) { + if (enabled && endpoints.length > 0) { callflowNode.module = 'ring_group'; callflowNode.data = { - strategy: "simultaneous", + strategy: 'simultaneous', timeout: 20, endpoints: [] - } + }; _.each(endpoints, function(endpoint) { callflowNode.data.endpoints.push({ id: endpoint.id, - endpoint_type: "device", + endpoint_type: 'device', delay: endpoint.delay, timeout: endpoint.timeout }); - if((endpoint.delay+endpoint.timeout) > callflowNode.data.timeout) { - callflowNode.data.timeout = (endpoint.delay+endpoint.timeout); + if ((endpoint.delay + endpoint.timeout) > callflowNode.data.timeout) { + callflowNode.data.timeout = (endpoint.delay + endpoint.timeout); } }); } else { - callflowNode.module='user'; + callflowNode.module = 'user'; callflowNode.data = { can_call_self: false, id: currentUser.id, @@ -2133,33 +2077,31 @@ define(function(require){ // In next 5 lines, look for user/group node, and replace it with the new data; var flow = userCallflow.flow; - while(flow.hasOwnProperty('module') && ['ring_group', 'user'].indexOf(flow.module) < 0) { - flow = flow.children['_']; + while (flow.hasOwnProperty('module') && ['ring_group', 'user'].indexOf(flow.module) < 0) { + flow = flow.children._; } flow.module = callflowNode.module; flow.data = callflowNode.data; monster.parallel({ - callflow: function(callbackParallel) { - self.usersUpdateCallflow(userCallflow, function(data) { - callbackParallel && callbackParallel(null, data.data); - }); - }, - user: function(callbackParallel) { - self.usersUpdateUser(currentUser, function(data) { - callbackParallel && callbackParallel(null, data.data); - }); - } + callflow: function(callbackParallel) { + self.usersUpdateCallflow(userCallflow, function(data) { + callbackParallel && callbackParallel(null, data.data); + }); }, - function(err, results) { - args.userId = results.user.id; - if(typeof params.saveCallback === 'function') { - params.saveCallback(args); - } else { - self.usersRender(args); - } + user: function(callbackParallel) { + self.usersUpdateUser(currentUser, function(data) { + callbackParallel && callbackParallel(null, data.data); + }); } - ); + }, function(err, results) { + args.userId = results.user.id; + if (typeof params.saveCallback === 'function') { + params.saveCallback(args); + } else { + self.usersRender(args); + } + }); } }); }); @@ -2174,14 +2116,13 @@ define(function(require){ usersRenderCallRecording: function(params) { var self = this, templateData = $.extend(true, { - user: params.currentUser - }, - (params.currentUser.extra.mapFeatures.call_recording.active ? { - url: params.userCallflow.flow.data.url, - format: params.userCallflow.flow.data.format, - timeLimit: params.userCallflow.flow.data.time_limit - } : {}) - ), + user: params.currentUser + }, + (params.currentUser.extra.mapFeatures.call_recording.active ? { + url: params.userCallflow.flow.data.url, + format: params.userCallflow.flow.data.format, + timeLimit: params.userCallflow.flow.data.time_limit + } : {})), featureTemplate = $(monster.template(self, 'users-feature-call_recording', templateData)), switchFeature = featureTemplate.find('.switch-state'), featureForm = featureTemplate.find('#call_recording_form'), @@ -2204,68 +2145,71 @@ define(function(require){ }); featureTemplate.find('.save').on('click', function() { - if(monster.ui.valid(featureForm)) { + if (monster.ui.valid(featureForm)) { var formData = monster.ui.getFormData('call_recording_form'), enabled = switchFeature.prop('checked'); - if(!('smartpbx' in params.currentUser)) { params.currentUser.smartpbx = {}; } - if(!('call_recording' in params.currentUser.smartpbx)) { + if (!('smartpbx' in params.currentUser)) { params.currentUser.smartpbx = {}; } + if (!('call_recording' in params.currentUser.smartpbx)) { params.currentUser.smartpbx.call_recording = { enabled: false }; } - if(params.currentUser.smartpbx.call_recording.enabled || enabled) { + if (params.currentUser.smartpbx.call_recording.enabled || enabled) { params.currentUser.smartpbx.call_recording.enabled = enabled; var newCallflow = $.extend(true, {}, params.userCallflow); - if(enabled) { - if(newCallflow.flow.module === 'record_call') { - newCallflow.flow.data = $.extend(true, { action: "start" }, formData); + if (enabled) { + if (newCallflow.flow.module === 'record_call') { + newCallflow.flow.data = $.extend(true, { action: 'start' }, formData); } else { newCallflow.flow = { children: { - "_": $.extend(true, {}, params.userCallflow.flow) + _: $.extend(true, {}, params.userCallflow.flow) }, - module: "record_call", - data: $.extend(true, { action: "start" }, formData) - } + module: 'record_call', + data: $.extend(true, { action: 'start' }, formData) + }; + var flow = newCallflow.flow; - while(flow.children && '_' in flow.children) { - if(flow.children['_'].module === 'record_call' && flow.children['_'].data.action === 'stop') { + while (flow.children && '_' in flow.children) { + if (flow.children._.module === 'record_call' && flow.children._.data.action === 'stop') { break; // If there is already a Stop Record Call - } else if(flow.children['_'].module === 'voicemail') { - var voicemailNode = $.extend(true, {}, flow.children['_']); - flow.children['_'] = { + } else if (flow.children._.module === 'voicemail') { + var voicemailNode = $.extend(true, {}, flow.children._); + flow.children._ = { module: 'record_call', - data: { action: "stop" }, + data: { action: 'stop' }, children: { '_': voicemailNode } - } + }; + break; } else { - flow = flow.children['_']; + flow = flow.children._; } } } } else { - newCallflow.flow = $.extend(true, {}, params.userCallflow.flow.children["_"]); + newCallflow.flow = $.extend(true, {}, params.userCallflow.flow.children._); var flow = newCallflow.flow; - while(flow.children && '_' in flow.children) { - if(flow.children['_'].module === 'record_call') { - flow.children = flow.children['_'].children; + while (flow.children && '_' in flow.children) { + if (flow.children._.module === 'record_call') { + flow.children = flow.children._.children; break; } else { - flow = flow.children['_']; + flow = flow.children._; } } } self.usersUpdateCallflow(newCallflow, function(updatedCallflow) { self.usersUpdateUser(params.currentUser, function(updatedUser) { popup.dialog('close').remove(); - self.usersRender({ - userId: params.currentUser.id, - openedTab: 'features' - }); - }); + + self.usersRender({ + userId: params.currentUser.id, + openedTab: 'features' + }); + }); }); } else { popup.dialog('close').remove(); @@ -2286,7 +2230,7 @@ define(function(require){ usersRenderMusicOnHold: function(currentUser) { var self = this, silenceMediaId = 'silence_stream://300000', - mediaToUpload = undefined; + mediaToUpload; self.usersListMedias(function(medias) { var templateData = { @@ -2304,9 +2248,9 @@ define(function(require){ featureTemplate.find('.upload-div').slideUp(function() { featureTemplate.find('.upload-toggle').removeClass('active'); }); - if(newMedia) { + if (newMedia) { var mediaSelect = featureTemplate.find('.media-dropdown'); - mediaSelect.append(''); + mediaSelect.append(''); mediaSelect.val(newMedia.id); } }; @@ -2321,7 +2265,7 @@ define(function(require){ mediaToUpload = results[0]; }, error: function(errors) { - if(errors.hasOwnProperty('size') && errors.size.length > 0) { + if (errors.hasOwnProperty('size') && errors.size.length > 0) { monster.ui.alert(self.i18n.active().users.music_on_hold.fileTooBigAlert); } featureTemplate.find('.upload-div input').val(''); @@ -2338,7 +2282,7 @@ define(function(require){ }); featureTemplate.find('.upload-toggle').on('click', function() { - if($(this).hasClass('active')) { + if ($(this).hasClass('active')) { featureTemplate.find('.upload-div').stop(true, true).slideUp(); } else { featureTemplate.find('.upload-div').stop(true, true).slideDown(); @@ -2350,7 +2294,7 @@ define(function(require){ }); featureTemplate.find('.upload-submit').on('click', function() { - if(mediaToUpload) { + if (mediaToUpload) { self.callApi({ resource: 'media.create', data: { @@ -2358,7 +2302,7 @@ define(function(require){ data: { streamable: true, name: mediaToUpload.name, - media_source: "upload", + media_source: 'upload', description: mediaToUpload.name } }, @@ -2397,12 +2341,12 @@ define(function(require){ var selectedMedia = featureTemplate.find('.media-dropdown option:selected').val(), enabled = switchFeature.prop('checked'); - if(!('music_on_hold' in currentUser)) { + if (!('music_on_hold' in currentUser)) { currentUser.music_on_hold = {}; } - if('media_id' in currentUser.music_on_hold || enabled) { - if(enabled) { + if ('media_id' in currentUser.music_on_hold || enabled) { + if (enabled) { currentUser.music_on_hold = { media_id: selectedMedia }; @@ -2446,58 +2390,55 @@ define(function(require){ userData = $.extend(true, userData, newCallerIDs); /* If the user has been removed from the directory */ - if(userData.extra) { - if(userData.extra.includeInDirectory === false) { - if('directories' in userData && userData.extra.mainDirectoryId && userData.extra.mainDirectoryId in userData.directories) { + if (userData.extra) { + if (userData.extra.includeInDirectory === false) { + if ('directories' in userData && userData.extra.mainDirectoryId && userData.extra.mainDirectoryId in userData.directories) { delete userData.directories[userData.extra.mainDirectoryId]; } - } - else { + } else { userData.directories = userData.directories || {}; - if(userData.extra.mainCallflowId) { + if (userData.extra.mainCallflowId) { userData.directories[userData.extra.mainDirectoryId] = userData.extra.mainCallflowId; } } - if('differentEmail' in userData.extra && userData.extra.differentEmail) { - if ( 'email' in userData.extra ) { - userData.email = userData.extra.email + if ('differentEmail' in userData.extra && userData.extra.differentEmail) { + if ('email' in userData.extra) { + userData.email = userData.extra.email; } } else { userData.email = userData.username; } - if('language' in userData.extra) { - if(userData.extra.language !== 'auto') { + if ('language' in userData.extra) { + if (userData.extra.language !== 'auto') { userData.language = userData.extra.language; - } - else { + } else { delete userData.language; } } } - if(userData.hasOwnProperty('call_forward')) { - if(userData.call_forward.number === '') { + if (userData.hasOwnProperty('call_forward')) { + if (userData.call_forward.number === '') { delete userData.call_forward.number; } } // if presence_id doesn't have a proper value, delete it and remove the internal callerId - if(!userData.hasOwnProperty('presence_id') || userData.presence_id === 'unset' || !userData.presence_id) { + if (!userData.hasOwnProperty('presence_id') || userData.presence_id === 'unset' || !userData.presence_id) { delete userData.presence_id; - if(userData.caller_id.hasOwnProperty('internal')) { + if (userData.caller_id.hasOwnProperty('internal')) { delete userData.caller_id.internal.number; } - } - else { + } else { // Always set the Internal Caller-ID Number to the Main Extension/Presence ID userData.caller_id.internal.number = userData.presence_id + ''; } - if(userData.timezone === 'inherit') { + if (userData.timezone === 'inherit') { delete userData.timezone; } @@ -2510,22 +2451,17 @@ define(function(require){ }, usersGetTemplate: function(type, userId, listUsers, callbackAfterData) { - var self = this, - template; + var self = this; - if(type === 'name') { + if (type === 'name') { self.usersGetNameTemplate(userId, listUsers, callbackAfterData); - } - else if(type === 'numbers') { + } else if (type === 'numbers') { self.usersGetNumbersTemplate(userId, callbackAfterData); - } - else if(type === 'extensions') { + } else if (type === 'extensions') { self.usersGetExtensionsTemplate(userId, callbackAfterData); - } - else if(type === 'features') { + } else if (type === 'features') { self.usersGetFeaturesTemplate(userId, listUsers, callbackAfterData); - } - else if(type === 'devices') { + } else if (type === 'devices') { self.usersGetDevicesTemplate(userId, callbackAfterData); } }, @@ -2535,14 +2471,13 @@ define(function(require){ self.usersGetUser(userId, function(userData) { _.each(listUsers.users, function(user) { - if(user.id === userData.id) { + if (user.id === userData.id) { userData = $.extend(true, userData, user); } }); - var dataTemplate = self.usersFormatUserData(userData); - - template = $(monster.template(self, 'users-features', dataTemplate)); + var dataTemplate = self.usersFormatUserData(userData), + template = $(monster.template(self, 'users-features', dataTemplate)); callback && callback(template, dataTemplate); }); @@ -2551,92 +2486,88 @@ define(function(require){ var self = this; monster.parallel({ - mainCallflow: function(callback) { - self.usersGetMainCallflow(userId, function(mainCallflow) { - callback(null, mainCallflow); - }); - }, - mainDirectory: function(callback) { - self.usersGetMainDirectory(function(mainDirectory) { - callback(null, mainDirectory); - }); - }, - user: function(callback) { - self.usersGetUser(userId, function(userData) { - callback(null, userData); - }); - }, - vmboxes: function(callback) { - self.usersListVMBoxes(function(vmboxes) { - var firstVmboxId, - results = { - listExisting: [], - userVM: {} - }; - - _.each(vmboxes, function(vmbox) { - results.listExisting.push(vmbox.mailbox); - - if(vmbox.owner_id === userId && !firstVmboxId) { - firstVmboxId = vmbox.id; - } - }); + mainCallflow: function(callback) { + self.usersGetMainCallflow(userId, function(mainCallflow) { + callback(null, mainCallflow); + }); + }, + mainDirectory: function(callback) { + self.usersGetMainDirectory(function(mainDirectory) { + callback(null, mainDirectory); + }); + }, + user: function(callback) { + self.usersGetUser(userId, function(userData) { + callback(null, userData); + }); + }, + vmboxes: function(callback) { + self.usersListVMBoxes(function(vmboxes) { + var firstVmboxId, + results = { + listExisting: [], + userVM: {} + }; - if(firstVmboxId) { - self.usersGetVMBox(firstVmboxId, function(vmbox) { - results.userVM = vmbox; + _.each(vmboxes, function(vmbox) { + results.listExisting.push(vmbox.mailbox); - callback(null, results); - }); - } - else { - callback(null, results); + if (vmbox.owner_id === userId && !firstVmboxId) { + firstVmboxId = vmbox.id; } }); - } - }, - function(error, results) { - var userData = results.user; - _.each(listUsers.users, function(user) { - if(user.id === results.user.id) { - userData = $.extend(true, user, userData); + if (firstVmboxId) { + self.usersGetVMBox(firstVmboxId, function(vmbox) { + results.userVM = vmbox; - return false; + callback(null, results); + }); + } else { + callback(null, results); } }); + } + }, function(error, results) { + var userData = results.user; - var dataTemplate = self.usersFormatUserData(userData, results.mainDirectory, results.mainCallflow, results.vmboxes.userVM, results.vmboxes.listExisting); + _.each(listUsers.users, function(user) { + if (user.id === results.user.id) { + userData = $.extend(true, user, userData); + return false; + } + }); + + var dataTemplate = self.usersFormatUserData(userData, results.mainDirectory, results.mainCallflow, results.vmboxes.userVM, results.vmboxes.listExisting), template = $(monster.template(self, 'users-name', dataTemplate)); - monster.ui.validate(template.find('form.user-fields'), { - rules: { - 'extra.ringingTimeout': { - digits: true - } + monster.ui.validate(template.find('form.user-fields'), { + rules: { + 'extra.ringingTimeout': { + digits: true + } + }, + messages: { + 'first_name': { + required: self.i18n.active().validation.required }, - messages: { - 'first_name': { - required: self.i18n.active().validation.required - }, - 'last_name': { - required: self.i18n.active().validation.required - } + 'last_name': { + required: self.i18n.active().validation.required } - }); + } + }); - timezone.populateDropdown(template.find('#user_timezone'), dataTemplate.timezone||'inherit', {inherit: self.i18n.active().defaultTimezone}); + timezone.populateDropdown(template.find('#user_timezone'), dataTemplate.timezone || 'inherit', {inherit: self.i18n.active().defaultTimezone}); - monster.ui.tooltips(template, { - options: { - container: 'body' - } - }); + monster.ui.tooltips(template, { + options: { + container: 'body' + } + }); - callbackAfterFormat && callbackAfterFormat(template, dataTemplate); - } - ); + callbackAfterFormat && callbackAfterFormat(template, dataTemplate); + }); }, usersGetDevicesData: function(callback) { @@ -2674,14 +2605,14 @@ define(function(require){ $.each(callflows, function(k, callflowLoop) { /* Find Smart PBX Callflow of this user */ - if(callflowLoop.owner_id === userId && callflowLoop.type === 'mainUserCallflow') { + if (callflowLoop.owner_id === userId && callflowLoop.type === 'mainUserCallflow') { callflowId = callflowLoop.id; return false; } }); - if(callflowId) { + if (callflowId) { self.callApi({ resource: 'callflow.get', data: { @@ -2694,8 +2625,7 @@ define(function(require){ callbackParallel && callbackParallel(null, response); } }); - } - else { + } else { callbackParallel && callbackParallel(null, response); } }); @@ -2705,11 +2635,11 @@ define(function(require){ callbackParallel && callbackParallel(null, listNumbers); }); } - } + }; if (loadNumbersView) { parallelRequests.devices = function(callbackParallel) { - self.usersListDeviceUser(userId, function (listDevices) { + self.usersListDeviceUser(userId, function(listDevices) { callbackParallel && callbackParallel(null, listDevices); }); }; @@ -2778,10 +2708,9 @@ define(function(require){ }; _.each(data, function(device) { - if(device.owner_id === userId) { + if (device.owner_id === userId) { formattedData.assignedDevices[device.id] = device; - } - else if(device.owner_id === '' || !('owner_id' in device)) { + } else if (device.owner_id === '' || !('owner_id' in device)) { formattedData.countSpare++; formattedData.unassignedDevices[device.id] = device; } @@ -2805,7 +2734,7 @@ define(function(require){ }; if (data.hasOwnProperty('devices') && data.devices.length) { - _.each(data.devices, function(device, idx) { + _.each(data.devices, function(device) { if (device.device_type === 'mobile') { data.numbers.numbers[device.mobile.mdn] = { assigned_to: response.user.id, @@ -2819,33 +2748,31 @@ define(function(require){ }); } - if('numbers' in data.numbers) { + if ('numbers' in data.numbers) { _.each(data.numbers.numbers, function(number, k) { /* TODO: Once locality is enabled, we need to remove it */ number.localityEnabled = 'locality' in number ? true : false; /* Adding to spare numbers */ - if(!number.hasOwnProperty('used_by') || number.used_by === '') { + if (!number.hasOwnProperty('used_by') || number.used_by === '') { response.countSpare++; response.unassignedNumbers[k] = number; - } - else if (number.used_by === 'mobile') { + } else if (number.used_by === 'mobile') { response.assignedNumbers.push(number); } }); } - if(response.callflow) { + if (response.callflow) { /* If a number is in a callflow and is returned by the phone_numbers, add it to the assigned numbers */ _.each(response.callflow.numbers, function(number) { - if(number in data.numbers.numbers) { + if (number in data.numbers.numbers) { var numberElement = data.numbers.numbers[number]; numberElement.phoneNumber = number; numberElement.isLocal = numberElement.features.indexOf('local') > -1; response.assignedNumbers.push(numberElement); - } - else { + } else { response.extensions.push(number); } }); @@ -2859,7 +2786,7 @@ define(function(require){ _.each(data.callflow.list, function(callflow) { _.each(callflow.numbers, function(number) { /* If it's a valid extension number (ie: a number that's not in the number database) */ - if(!(number in data.numbers.numbers) && !(_.isNaN(parseInt(number)))) { + if (!(number in data.numbers.numbers) && !(_.isNaN(parseInt(number)))) { response.allExtensions.push(number); } }); @@ -2871,7 +2798,7 @@ define(function(require){ parsedB = parseInt(b), result = -1; - if(parsedA > 0 && parsedB > 0) { + if (parsedA > 0 && parsedB > 0) { result = parsedA > parsedB; } @@ -2885,7 +2812,7 @@ define(function(require){ callback && callback(response); }, - usersFormatCreationData: function(data, callback) { + usersFormatCreationData: function(data) { var self = this, fullName = data.user.first_name + ' ' + data.user.last_name, callerIdName = fullName.substring(0, 15), @@ -2937,117 +2864,110 @@ define(function(require){ var self = this; monster.parallel({ - devices: function(callback) { - self.usersListDeviceUser(userId, function(devices) { - callback(null, devices); - }); - }, - vmbox: function(callback) { - self.usersListVMBoxesUser(userId, function(data) { - callback(null, data); - }); - }, - callflows: function(callback) { - self.usersListCallflowsUser(userId, function(data) { - callback(null, data); - }); - }, - conferences: function(callback) { - self.usersListConferences(userId, function(data) { - callback(null, data); - }); - } + devices: function(callback) { + self.usersListDeviceUser(userId, function(devices) { + callback(null, devices); + }); }, - function(error, results) { - var listFnDelete = []; - - _.each(results.devices, function(device) { - listFnDelete.push(function(callback) { - if(removeDevices) { - self.usersDeleteDevice(device.id, function(data) { - callback(null, ''); - }); - } - else { - self.usersUnassignDevice(device.id, function(data) { - callback(null, ''); - }); - } - }); + vmbox: function(callback) { + self.usersListVMBoxesUser(userId, function(data) { + callback(null, data); + }); + }, + callflows: function(callback) { + self.usersListCallflowsUser(userId, function(data) { + callback(null, data); }); + }, + conferences: function(callback) { + self.usersListConferences(userId, function(data) { + callback(null, data); + }); + } + }, function(error, results) { + var listFnDelete = []; + _.each(results.devices, function(device) { listFnDelete.push(function(callback) { - self.usersRemoveBulkConferences(results.conferences, removeConferences, function() { - callback(null, ''); - }); + if (removeDevices) { + self.usersDeleteDevice(device.id, function(data) { + callback(null, ''); + }); + } else { + self.usersUnassignDevice(device.id, function(data) { + callback(null, ''); + }); + } }); + }); - _.each(results.callflows, function(callflow) { - - /* - Special case for users with mobile devices: - reassign mobile devices to their respective mobile callflow instead of just deleting the callflow - */ - if (callflow.type === 'mobile') { - listFnDelete.push(function(mainCallback) { - monster.parallel({ - callflow: function(callback) { - self.usersGetCallflow(callflow.id, function(data) { - callback(null, data); - }); - }, - mobileDevice: function(callback) { - self.usersGetMobileDevice(callflow.numbers[0].slice(2), function(data) { - callback(null, data); - }); - } - }, - function(err, results) { - var fullCallflow = results.callflow, - mobileDeviceId = results.mobileDevice.id; + listFnDelete.push(function(callback) { + self.usersRemoveBulkConferences(results.conferences, removeConferences, function() { + callback(null, ''); + }); + }); - delete fullCallflow.owner_id; + _.each(results.callflows, function(callflow) { + /* + Special case for users with mobile devices: + reassign mobile devices to their respective mobile callflow instead of just deleting the callflow + */ + if (callflow.type === 'mobile') { + listFnDelete.push(function(mainCallback) { + monster.parallel({ + callflow: function(callback) { + self.usersGetCallflow(callflow.id, function(data) { + callback(null, data); + }); + }, + mobileDevice: function(callback) { + self.usersGetMobileDevice(callflow.numbers[0].slice(2), function(data) { + callback(null, data); + }); + } + }, function(err, results) { + var fullCallflow = results.callflow, + mobileDeviceId = results.mobileDevice.id; - $.extend(true, fullCallflow, { - flow: { - module: 'device', - data: { - id: mobileDeviceId - } - } - }); + delete fullCallflow.owner_id; - self.usersUpdateCallflow(fullCallflow, function(data) { - mainCallback(null, data); - }); + $.extend(true, fullCallflow, { + flow: { + module: 'device', + data: { + id: mobileDeviceId + } } - ); - }); - } - else { - listFnDelete.push(function(callback) { - self.usersDeleteCallflow(callflow.id, function(data) { - callback(null, ''); }); - }); - } - }); - _.each(results.vmbox, function(vmbox) { + self.usersUpdateCallflow(fullCallflow, function(data) { + mainCallback(null, data); + }); + }); + }); + } else { listFnDelete.push(function(callback) { - self.usersDeleteVMBox(vmbox.id, function(data) { + self.usersDeleteCallflow(callflow.id, function(data) { callback(null, ''); }); }); - }); + } + }); - monster.parallel(listFnDelete, function(err, resultsDelete) { - self.usersDeleteUser(userId, function(data) { - callback && callback(data); + _.each(results.vmbox, function(vmbox) { + listFnDelete.push(function(callback) { + self.usersDeleteVMBox(vmbox.id, function(data) { + callback(null, ''); }); }); - } - ); + }); + + monster.parallel(listFnDelete, function(err, resultsDelete) { + self.usersDeleteUser(userId, function(data) { + callback && callback(data); + }); + }); + }); }, usersGetCallflow: function(callflowId, callback) { @@ -3177,15 +3097,14 @@ define(function(require){ data.callflow.owner_id = userId; data.callflow.type = 'mainUserCallflow'; data.callflow.flow.data.id = userId; - data.callflow.flow.children['_'].data.id = _dataVM.id; + data.callflow.flow.children._.data.id = _dataVM.id; self.usersCreateCallflow(data.callflow, function(_dataCF) { - if(data.extra.includeInDirectory) { + if (data.extra.includeInDirectory) { self.usersAddUserToMainDirectory(_dataUser.data, _dataCF.id, function(dataDirectory) { success(data); }); - } - else { + } else { success(data); } }); @@ -3239,7 +3158,7 @@ define(function(require){ user: user, needVMUpdate: false, callback: function(_dataVM) { - callflow.flow.children['_'].data.id = _dataVM.id; + callflow.flow.children._.data.id = _dataVM.id; self.usersCreateCallflow(callflow, function(_dataCF) { @@ -3250,12 +3169,11 @@ define(function(require){ globalHandler && globalHandler(errorPayload, { generateError: true }); }; - if(errorPayload.error === '400' && errorPayload.hasOwnProperty('data') && errorPayload.data.hasOwnProperty('numbers') && errorPayload.data.numbers.hasOwnProperty('unique')) { + if (errorPayload.error === '400' && errorPayload.hasOwnProperty('data') && errorPayload.data.hasOwnProperty('numbers') && errorPayload.data.numbers.hasOwnProperty('unique')) { self.usersHasKazooUICallflow(callflow, function(existingCallflow) { self.usersMigrateKazooUIUser(callflow, existingCallflow, callback); }, errorCallback); - } - else { + } else { errorCallback(); } }, @@ -3277,10 +3195,10 @@ define(function(require){ value: number }, success: function(results) { - if(results.data.length > 0) { + if (results.data.length > 0) { _.each(results.data, function(callflow) { - _.each(callflow.numbers, function(n) { - if(n === number && found === false) { + _.each(callflow.numbers, function(num) { + if (num === number && found === false) { found = true; self.callApi({ @@ -3292,16 +3210,15 @@ define(function(require){ success: function(callflow) { callback && callback(callflow.data); } - }) + }); } }); }); - if(found === false) { + if (found === false) { callback && callback({}); } - } - else { + } else { callback && callback({}); } } @@ -3318,16 +3235,15 @@ define(function(require){ _.each(callflow.numbers, function(number) { parallelRequests[number] = function(callback) { self.usersGetCallflowFromNumber(number, function(callflow) { - if(!(callflow.hasOwnProperty('ui_metadata') && callflow.ui_metadata.hasOwnProperty('ui') && callflow.ui_metadata.ui === 'monster-ui')) { + if (!(callflow.hasOwnProperty('ui_metadata') && callflow.ui_metadata.hasOwnProperty('ui') && callflow.ui_metadata.ui === 'monster-ui')) { // If we already found a callflow - if(typeof kazooUICallflow !== 'undefined') { + if (typeof kazooUICallflow !== 'undefined') { // If it's not the same Callflow that we found before, we increment the # of callflows found, which will trigger an error later // If it's the same as before we do nothing - if(callflow.id !== kazooUICallflow.id) { + if (callflow.id !== kazooUICallflow.id) { kazooUICallflowFound++; } - } - else { + } else { kazooUICallflowFound++; kazooUICallflow = callflow; } @@ -3335,21 +3251,18 @@ define(function(require){ callback && callback(null, {}); }); - } + }; }); - monster.parallel(parallelRequests, function(err, results) { // If we didn't find a single non-Monster-UI Callflow, then we trigger the error - if(kazooUICallflowFound === 0) { + if (kazooUICallflowFound === 0) { error && error(); - } // If we had more than 1 Kazoo UI callflow, show an error saying the migration is impossible - else if(kazooUICallflowFound > 1) { + } else if (kazooUICallflowFound > 1) { monster.ui.alert(self.i18n.active().users.migration.tooManyCallflows); - } // Else, we have found 1 callflow from Kazoo-UI, migration is possible, we continue with the success callback - else { + } else { success && success(kazooUICallflow); } }); @@ -3371,12 +3284,12 @@ define(function(require){ // Make sure the User knows what's going to happen monster.ui.confirm(self.i18n.active().users.migration.confirmMigration, function() { // First update the existing callflow with its new fake numbers - self.usersUpdateCallflow(existingCallflow, function(oldCallflow) { + self.usersUpdateCallflow(existingCallflow, function() { // Now that the numbers have been changed, we can create the new Monster UI Callflow self.usersCreateCallflow(callflowToCreate, function(newCallflow) { // Once all this is done, continue normally to the SmartPBX normal update callback && callback(newCallflow); - }) + }); }); }); }, @@ -3401,17 +3314,16 @@ define(function(require){ var indexMain = -1; _.each(listCallflows, function(callflow, index) { - if(callflow.owner_id === userId && callflow.type === 'mainUserCallflow' || !('type' in callflow)) { + if (callflow.owner_id === userId && callflow.type === 'mainUserCallflow' || !('type' in callflow)) { indexMain = index; return false; } }); - if(indexMain === -1) { + if (indexMain === -1) { //toastr.error(self.i18n.active().users.noUserCallflow); callback(null); - } - else { + } else { self.callApi({ resource: 'callflow.get', data: { @@ -3429,7 +3341,7 @@ define(function(require){ }); }, - usersSearchMobileCallflowsByNumber: function (userId, phoneNumber, callback) { + usersSearchMobileCallflowsByNumber: function(userId, phoneNumber, callback) { var self = this; self.callApi({ @@ -3453,19 +3365,18 @@ define(function(require){ var indexMain = -1; _.each(listDirectories, function(directory, index) { - if(directory.name === 'SmartPBX Directory') { + if (directory.name === 'SmartPBX Directory') { indexMain = index; return false; } }); - if(indexMain === -1) { + if (indexMain === -1) { self.usersCreateMainDirectory(function(data) { callback(data); }); - } - else { + } else { callback(listDirectories[indexMain]); } }); @@ -3682,31 +3593,28 @@ define(function(require){ }; monster.parallel({ - confNumbers: function(callback) { - self.usersListConfNumbers(function(numbers) { - callback && callback(null, numbers); - }); - }, - listConferences: function(callback) { - self.usersListConferences(userId, function(conferences) { - if(conferences.length > 0) { - self.usersGetConference(conferences[0].id, function(conference) { - callback && callback(null, conference); - }); - } - else { - callback && callback(null, {}); - } - }); - } + confNumbers: function(callback) { + self.usersListConfNumbers(function(numbers) { + callback && callback(null, numbers); + }); }, - function(err, results) { - dataResponse.conference = results.listConferences; - dataResponse.listConfNumbers = results.confNumbers; - - globalCallback && globalCallback(dataResponse); + listConferences: function(callback) { + self.usersListConferences(userId, function(conferences) { + if (conferences.length > 0) { + self.usersGetConference(conferences[0].id, function(conference) { + callback && callback(null, conference); + }); + } else { + callback && callback(null, {}); + } + }); } - ); + }, function(err, results) { + dataResponse.conference = results.listConferences; + dataResponse.listConfNumbers = results.confNumbers; + + globalCallback && globalCallback(dataResponse); + }); }, usersListConfNumbers: function(callback) { @@ -3725,8 +3633,8 @@ define(function(require){ var numbers = []; _.each(data.data, function(conf) { - if(conf.name === 'MainConference') { - if(conf.numbers.length > 0 && conf.numbers[0] !== 'undefinedconf') { + if (conf.name === 'MainConference') { + if (conf.numbers.length > 0 && conf.numbers[0] !== 'undefinedconf') { numbers = numbers.concat(conf.numbers); } } @@ -3897,68 +3805,66 @@ define(function(require){ var self = this; monster.parallel({ - users: function(callback) { - self.callApi({ - resource: 'user.list', - data: { - accountId: self.accountId, - filters: { - paginate: 'false' - } - }, - success: function(dataUsers) { - callback(null, dataUsers.data); - } - }); - }, - callflows: function(callback) { - self.usersListCallflows(function(callflows) { - callback(null, callflows); - }); - }, - devices: function(callback) { - self.usersGetDevicesData(function(devices) { - callback(null, devices); - }); - }, - deviceStatus: function(callback) { - self.callApi({ - resource: 'device.getStatus', - data: { - accountId: self.accountId, - filters: { - paginate: 'false' - } - }, - success: function(data, status) { - callback(null, data.data); + users: function(callback) { + self.callApi({ + resource: 'user.list', + data: { + accountId: self.accountId, + filters: { + paginate: 'false' } - }); - } + }, + success: function(dataUsers) { + callback(null, dataUsers.data); + } + }); }, - function(err, results) { - callback && callback(results); + callflows: function(callback) { + self.usersListCallflows(function(callflows) { + callback(null, callflows); + }); + }, + devices: function(callback) { + self.usersGetDevicesData(function(devices) { + callback(null, devices); + }); + }, + deviceStatus: function(callback) { + self.callApi({ + resource: 'device.getStatus', + data: { + accountId: self.accountId, + filters: { + paginate: 'false' + } + }, + success: function(data, status) { + callback(null, data.data); + } + }); } - ); + }, function(err, results) { + callback && callback(results); + }); }, usersUpdateDevices: function(data, userId, callbackAfterUpdate) { var self = this, updateDevices = function(userCallflow) { var listFnParallel = [], - updateDeviceRequest = function (newDataDevice, callback) { - self.usersUpdateDevice(newDataDevice, function (updatedDataDevice) { + updateDeviceRequest = function(newDataDevice, callback) { + self.usersUpdateDevice(newDataDevice, function(updatedDataDevice) { callback(null, updatedDataDevice); }); - } + }; - _.each(data.new, function(deviceId) { + _.each(data.newDevices, function(deviceId) { listFnParallel.push(function(callback) { self.usersGetDevice(deviceId, function(data) { data.owner_id = userId; - if (data.device_type === "mobile") { - self.usersSearchMobileCallflowsByNumber(userId, data.mobile.mdn, function (listCallflowData) { + if (data.device_type === 'mobile') { + self.usersSearchMobileCallflowsByNumber(userId, data.mobile.mdn, function(listCallflowData) { self.callApi({ resource: 'callflow.get', data: { @@ -3978,8 +3884,7 @@ define(function(require){ } } }); - } - else { + } else { $.extend(true, callflowData, { owner_id: userId, flow: { @@ -3991,27 +3896,26 @@ define(function(require){ }); } - self.usersUpdateCallflow(callflowData, function () { + self.usersUpdateCallflow(callflowData, function() { updateDeviceRequest(data, callback); }); } }); }); - } - else { + } else { updateDeviceRequest(data, callback); } }); }); }); - _.each(data.old, function(deviceId) { + _.each(data.oldDevices, function(deviceId) { listFnParallel.push(function(callback) { self.usersGetDevice(deviceId, function(data) { delete data.owner_id; if (data.device_type === 'mobile') { - self.usersSearchMobileCallflowsByNumber(userId, data.mobile.mdn, function (listCallflowData) { + self.usersSearchMobileCallflowsByNumber(userId, data.mobile.mdn, function(listCallflowData) { self.callApi({ resource: 'callflow.get', data: { @@ -4031,38 +3935,39 @@ define(function(require){ } }); - self.usersUpdateCallflow(callflowData, function () { + self.usersUpdateCallflow(callflowData, function() { updateDeviceRequest(data, callback); }); } }); }); - } - else { + } else { updateDeviceRequest(data, callback); } }); }); }); - if(data.old.length > 0 && userCallflow && userCallflow.flow.module === 'ring_group') { + if (data.oldDevices.length > 0 && userCallflow && userCallflow.flow.module === 'ring_group') { var endpointsCount = userCallflow.flow.data.endpoints.length; - userCallflow.flow.data.endpoints =_.filter(userCallflow.flow.data.endpoints, function(endpoint) { - return (data.old.indexOf(endpoint.id) < 0); + + userCallflow.flow.data.endpoints = _.filter(userCallflow.flow.data.endpoints, function(endpoint) { + return (data.oldDevices.indexOf(endpoint.id) < 0); }); - if(userCallflow.flow.data.endpoints.length < endpointsCount) { - if(userCallflow.flow.data.endpoints.length === 0) { + + if (userCallflow.flow.data.endpoints.length < endpointsCount) { + if (userCallflow.flow.data.endpoints.length === 0) { userCallflow.flow.module = 'user'; userCallflow.flow.data = { can_call_self: false, id: userId, - timeout: "20" - } + timeout: '20' + }; listFnParallel.push(function(callback) { self.usersGetUser(userId, function(user) { user.smartpbx.find_me_follow_me.enabled = false; self.usersUpdateUser(user, function(data) { - callback(null, data) + callback(null, data); }); }); }); @@ -4081,15 +3986,15 @@ define(function(require){ }; self.usersGetMainCallflow(userId, function(callflow) { - updateDevices(callflow) + updateDevices(callflow); }); }, usersUpdateCallflowNumbers: function(userId, callflowId, numbers, callback) { var self = this; - if(numbers.length > 0) { - if(callflowId) { + if (numbers.length > 0) { + if (callflowId) { self.callApi({ resource: 'callflow.get', data: { @@ -4104,19 +4009,16 @@ define(function(require){ }); } }); - } - else { - if(numbers[0].length < 7) { + } else { + if (numbers[0].length < 7) { self.usersMigrateFromExtensions(userId, numbers, function(data) { callback && callback(data); }); - } - else { + } else { toastr.error(self.i18n.active().users.needExtensionFirst); } } - } - else { + } else { toastr.error(self.i18n.active().users.noNumberCallflow); } }, @@ -4185,13 +4087,13 @@ define(function(require){ userExtension = args.userExtension; self.usersListVMBoxesUser(user.id, function(vmboxes) { - if(vmboxes.length > 0) { - if(needVMUpdate) { + if (vmboxes.length > 0) { + if (needVMUpdate) { self.usersGetVMBox(vmboxes[0].id, function(vmbox) { vmbox.name = user.first_name + ' ' + user.last_name + '\'s VMBox'; // We only want to update the vmbox number if it was already synced with the presenceId (and if the presenceId was not already set) // This allows us to support old clients who have mailbox number != than their extension number - if(oldPresenceId === vmbox.mailbox) { + if (oldPresenceId === vmbox.mailbox) { // If it's synced, then we update the vmbox number as long as the main extension is set to something different than 'unset' in which case we don't update the vmbox number value vmbox.mailbox = (user.presence_id && user.presence_id !== 'unset') ? user.presence_id + '' : vmbox.mailbox; } @@ -4200,12 +4102,10 @@ define(function(require){ callback && callback(vmboxSaved); }); }); - } - else { + } else { callback && callback(vmboxes[0]); } - } - else { + } else { var vmbox = { owner_id: user.id, mailbox: user.presence_id || userExtension || user.extra.vmbox.mailbox, @@ -4223,100 +4123,93 @@ define(function(require){ var self = this; monster.parallel({ - conference: function(callback) { - var baseConference = { - name: data.user.first_name + ' ' + data.user.last_name + ' SmartPBX Conference', - owner_id: data.user.id, - play_name_on_join: true, - member: { - join_muted: false - }, - conference_numbers: [] - }; + conference: function(callback) { + var baseConference = { + name: data.user.first_name + ' ' + data.user.last_name + ' SmartPBX Conference', + owner_id: data.user.id, + play_name_on_join: true, + member: { + join_muted: false + }, + conference_numbers: [] + }; - monster.util.dataFlags.add({ source: 'smartpbx'}, baseConference); + monster.util.dataFlags.add({ source: 'smartpbx' }, baseConference); - baseConference = $.extend(true, {}, baseConference, data.conference); + baseConference = $.extend(true, {}, baseConference, data.conference); - self.usersListConferences(data.user.id, function(conferences) { - var conferenceToSave = baseConference; - if(conferences.length > 0) { - conferenceToSave = $.extend(true, {}, conferences[0], baseConference); + self.usersListConferences(data.user.id, function(conferences) { + var conferenceToSave = baseConference; + if (conferences.length > 0) { + conferenceToSave = $.extend(true, {}, conferences[0], baseConference); - self.usersUpdateConference(conferenceToSave, function(conference) { - callback && callback(null, conference); - }); - } - else { - self.usersCreateConference(conferenceToSave, function(conference) { - callback && callback(null, conference); - }); - } - }); - }, - user: function(callback) { - if(data.user.smartpbx && data.user.smartpbx.conferencing && data.user.smartpbx.conferencing.enabled === true) { - callback && callback(null, data.user); + self.usersUpdateConference(conferenceToSave, function(conference) { + callback && callback(null, conference); + }); + } else { + self.usersCreateConference(conferenceToSave, function(conference) { + callback && callback(null, conference); + }); } - else { - data.user.smartpbx = data.user.smartpbx || {}; - data.user.smartpbx.conferencing = data.user.smartpbx.conferencing || {}; + }); + }, + user: function(callback) { + if (data.user.smartpbx && data.user.smartpbx.conferencing && data.user.smartpbx.conferencing.enabled === true) { + callback && callback(null, data.user); + } else { + data.user.smartpbx = data.user.smartpbx || {}; + data.user.smartpbx.conferencing = data.user.smartpbx.conferencing || {}; - data.user.smartpbx.conferencing.enabled = true; + data.user.smartpbx.conferencing.enabled = true; - self.usersUpdateUser(data.user, function(user) { - callback && callback(null, user.data); - }); - } + self.usersUpdateUser(data.user, function(user) { + callback && callback(null, user.data); + }); } - }, - function(err, results) { - globalCallback && globalCallback(results); } - ); + }, function(err, results) { + globalCallback && globalCallback(results); + }); }, usersUpdateFaxing: function(data, newNumber, globalCallback) { var self = this; monster.parallel({ - callflow: function(callback) { - var baseCallflow = {}; + callflow: function(callback) { + var baseCallflow = {}; - self.usersListCallflowsUser(data.user.id, function(callflows) { - _.each(callflows, function(callflow) { - if(callflow.type === 'faxing') { - baseCallflow.id = callflow.id; + self.usersListCallflowsUser(data.user.id, function(callflows) { + _.each(callflows, function(callflow) { + if (callflow.type === 'faxing') { + baseCallflow.id = callflow.id; - return false; - } - }); + return false; + } + }); - self.usersUpdateCallflowFaxing(data, newNumber, baseCallflow, function(callflow) { - callback && callback(null, callflow); - }); + self.usersUpdateCallflowFaxing(data, newNumber, baseCallflow, function(callflow) { + callback && callback(null, callflow); }); - }, - user: function(callback) { - if(data.user.smartpbx && data.user.smartpbx.faxing && data.user.smartpbx.faxing.enabled === true) { - callback && callback(null, data.user); - } - else { - data.user.smartpbx = data.user.smartpbx || {}; - data.user.smartpbx.faxing = data.user.smartpbx.faxing || {}; + }); + }, + user: function(callback) { + if (data.user.smartpbx && data.user.smartpbx.faxing && data.user.smartpbx.faxing.enabled === true) { + callback && callback(null, data.user); + } else { + data.user.smartpbx = data.user.smartpbx || {}; + data.user.smartpbx.faxing = data.user.smartpbx.faxing || {}; - data.user.smartpbx.faxing.enabled = true; + data.user.smartpbx.faxing.enabled = true; - self.usersUpdateUser(data.user, function(user) { - callback && callback(null, user.data); - }); - } + self.usersUpdateUser(data.user, function(user) { + callback && callback(null, user.data); + }); } - }, - function(err, results) { - globalCallback && globalCallback(results); } - ); + }, function(err, results) { + globalCallback && globalCallback(results); + }); }, usersUpdateCallflowFaxing: function(data, newNumber, callflow, callback) { @@ -4342,12 +4235,12 @@ define(function(require){ callflow = $.extend(true, {}, baseCallflow, callflow); - if( callflow.hasOwnProperty('id') ) { + if (callflow.hasOwnProperty('id')) { faxbox = $.extend(true, {}, faxbox, number); self.callApi({ resource: 'faxbox.update', - data:{ + data: { accountId: self.accountId, faxboxId: faxbox.id, data: faxbox @@ -4393,12 +4286,11 @@ define(function(require){ _.each(conferences, function(conference) { listRequests.push(function(subCallback) { - if(forceDelete) { + if (forceDelete) { self.usersDeleteConference(conference.id, function(data) { subCallback(null, data); }); - } - else { + } else { self.usersUnassignConference(conference.id, function(data) { subCallback(null, data); }); @@ -4415,100 +4307,94 @@ define(function(require){ var self = this; monster.parallel({ - conferences: function(callback) { - self.usersListConferences(userId, function(conferences) { - self.usersRemoveBulkConferences(conferences, true, function(results) { - callback && callback(null, results); - }); + conferences: function(callback) { + self.usersListConferences(userId, function(conferences) { + self.usersRemoveBulkConferences(conferences, true, function(results) { + callback && callback(null, results); }); - }, - user: function(callback) { - self.usersGetUser(userId, function(user) { - //user.conferencing_enabled = false; - user.smartpbx = user.smartpbx || {}; - user.smartpbx.conferencing = user.smartpbx.conferencing || {}; + }); + }, + user: function(callback) { + self.usersGetUser(userId, function(user) { + //user.conferencing_enabled = false; + user.smartpbx = user.smartpbx || {}; + user.smartpbx.conferencing = user.smartpbx.conferencing || {}; - user.smartpbx.conferencing.enabled = false; + user.smartpbx.conferencing.enabled = false; - self.usersUpdateUser(user, function(user) { - callback(null, user); - }); + self.usersUpdateUser(user, function(user) { + callback(null, user); }); - - } - }, - function(err, results) { - globalCallback && globalCallback(results); + }); } - ); + }, function(err, results) { + globalCallback && globalCallback(results); + }); }, usersDeleteFaxing: function(userId, globalCallback) { var self = this; monster.parallel({ - callflows: function(callback) { - self.usersListCallflowsUser(userId, function(callflows) { - var listRequests = []; + callflows: function(callback) { + self.usersListCallflowsUser(userId, function(callflows) { + var listRequests = []; - _.each(callflows, function(callflow) { - if(callflow.type === 'faxing') { - listRequests.push(function(subCallback) { - 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 || data.data.flow.data.id, - generateError: false - }, - success: function(_data, status) { - self.usersDeleteCallflow(callflow.id, function(results) { - subCallback(null, results); - }); - }, - error: function(_data, error) { - self.usersDeleteCallflow(callflow.id, function(results) { - subCallback(null, results); - }); - } - }); - } - }); + _.each(callflows, function(callflow) { + if (callflow.type === 'faxing') { + listRequests.push(function(subCallback) { + 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 || data.data.flow.data.id, + generateError: false + }, + success: function(_data, status) { + self.usersDeleteCallflow(callflow.id, function(results) { + subCallback(null, results); + }); + }, + error: function(_data, error) { + self.usersDeleteCallflow(callflow.id, function(results) { + subCallback(null, results); + }); + } + }); + } }); - } - }); + }); + } + }); - monster.parallel(listRequests, function(err, results) { - callback && callback(results); - }); + monster.parallel(listRequests, function(err, results) { + callback && callback(results); }); - }, - user: function(callback) { - self.usersGetUser(userId, function(user) { - //user.faxing_enabled = false; - user.smartpbx = user.smartpbx || {}; - user.smartpbx.faxing = user.smartpbx.faxing || {}; + }); + }, + user: function(callback) { + self.usersGetUser(userId, function(user) { + //user.faxing_enabled = false; + user.smartpbx = user.smartpbx || {}; + user.smartpbx.faxing = user.smartpbx.faxing || {}; - user.smartpbx.faxing.enabled = false; + user.smartpbx.faxing.enabled = false; - self.usersUpdateUser(user, function(user) { - callback(null, user); - }); + self.usersUpdateUser(user, function(user) { + callback(null, user); }); - - } - }, - function(err, results) { - globalCallback && globalCallback(results); + }); } - ); + }, function(err, results) { + globalCallback && globalCallback(results); + }); }, usersSortExtensions: function(a, b) { @@ -4516,7 +4402,7 @@ define(function(require){ parsedB = parseInt(b), result = -1; - if(parsedA > 0 && parsedB > 0) { + if (parsedA > 0 && parsedB > 0) { result = parsedA > parsedB; }