(js) Fix dependency injections
parent
874e393948
commit
618d3d9cc0
|
@ -9,7 +9,7 @@
|
|||
xmlns:label="OGo:label"
|
||||
className="UIxPageFrame"
|
||||
title="title"
|
||||
const:jsFiles="Preferences.app.js, Common.js, Mailer.js, Preferences.js">
|
||||
const:jsFiles="Preferences.app.js, Common.js, Mailer.js, Contacts.js, Preferences.js">
|
||||
|
||||
<main class="view md-layout-fill" ui-view="preferences" layout="row"
|
||||
ng-controller="navController"><!-- preferences --> </main>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* JavaScript for SOGoContacts */
|
||||
/* JavaScript for Authentication */
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
@ -23,197 +23,196 @@
|
|||
})
|
||||
|
||||
// TODO: convert to a Factory recipe?
|
||||
.provider('Authentication', function(passwordPolicyConfig) {
|
||||
this.readCookie = function(name) {
|
||||
var foundCookie, prefix, pairs, i, currentPair, start;
|
||||
foundCookie = null;
|
||||
prefix = name + '=';
|
||||
pairs = document.cookie.split(';');
|
||||
for (i = 0; !foundCookie && i < pairs.length; i++) {
|
||||
currentPair = pairs[i];
|
||||
start = 0;
|
||||
while (currentPair.charAt(start) == ' ')
|
||||
start++;
|
||||
if (start > 0)
|
||||
currentPair = currentPair.substr(start);
|
||||
if (currentPair.indexOf(prefix) == 0)
|
||||
foundCookie = currentPair.substr(prefix.length);
|
||||
}
|
||||
.provider('Authentication', Authentication);
|
||||
|
||||
return foundCookie;
|
||||
};
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
function Authentication() {
|
||||
function readCookie(name) {
|
||||
var foundCookie, prefix, pairs, i, currentPair, start;
|
||||
foundCookie = null;
|
||||
prefix = name + '=';
|
||||
pairs = document.cookie.split(';');
|
||||
for (i = 0; !foundCookie && i < pairs.length; i++) {
|
||||
currentPair = pairs[i];
|
||||
start = 0;
|
||||
while (currentPair.charAt(start) == ' ')
|
||||
start++;
|
||||
if (start > 0)
|
||||
currentPair = currentPair.substr(start);
|
||||
if (currentPair.indexOf(prefix) == 0)
|
||||
foundCookie = currentPair.substr(prefix.length);
|
||||
}
|
||||
|
||||
this.readLoginCookie = function() {
|
||||
var loginValues = null,
|
||||
cookie = this.readCookie('0xHIGHFLYxSOGo'),
|
||||
value;
|
||||
if (cookie && cookie.length > 8) {
|
||||
value = decodeURIComponent(cookie.substr(8));
|
||||
loginValues = value.base64decode().split(':');
|
||||
}
|
||||
return foundCookie;
|
||||
}
|
||||
|
||||
return loginValues;
|
||||
};
|
||||
function readLoginCookie() {
|
||||
var loginValues = null,
|
||||
cookie = readCookie('0xHIGHFLYxSOGo'),
|
||||
value;
|
||||
if (cookie && cookie.length > 8) {
|
||||
value = decodeURIComponent(cookie.substr(8));
|
||||
loginValues = value.base64decode().split(':');
|
||||
}
|
||||
|
||||
this.redirectUrl = function(username, domain) {
|
||||
var userName, address, baseAddress, altBaseAddress, parts, hostpart, protocol, newAddress;
|
||||
return loginValues;
|
||||
}
|
||||
|
||||
userName = username;
|
||||
if (domain)
|
||||
userName += '@' + domain.value;
|
||||
address = '' + window.location.href;
|
||||
baseAddress = ApplicationBaseURL + '/' + encodeURIComponent(userName);
|
||||
if (baseAddress[0] == '/') {
|
||||
parts = address.split('/');
|
||||
hostpart = parts[2];
|
||||
protocol = parts[0];
|
||||
baseAddress = protocol + '//' + hostpart + baseAddress;
|
||||
}
|
||||
parts = baseAddress.split('/');
|
||||
parts.splice(0, 3);
|
||||
altBaseAddress = parts.join('/');
|
||||
newAddress;
|
||||
if ((address.startsWith(baseAddress)
|
||||
|| address.startsWith(altBaseAddress))
|
||||
&& !address.endsWith('/logoff')) {
|
||||
newAddress = address;
|
||||
} else {
|
||||
newAddress = baseAddress;
|
||||
}
|
||||
function redirectUrl(username, domain) {
|
||||
var userName, address, baseAddress, altBaseAddress, parts, hostpart, protocol, newAddress;
|
||||
|
||||
// if (/theme=mobile/.test(window.location.search)) {
|
||||
// newAddress = baseAddress + '/Contacts' + '?theme=mobile';
|
||||
// }
|
||||
// else {
|
||||
// newAddress = baseAddress + '/Contacts';
|
||||
// }
|
||||
userName = username;
|
||||
if (domain)
|
||||
userName += '@' + domain.value;
|
||||
address = '' + window.location.href;
|
||||
baseAddress = ApplicationBaseURL + '/' + encodeURIComponent(userName);
|
||||
if (baseAddress[0] == '/') {
|
||||
parts = address.split('/');
|
||||
hostpart = parts[2];
|
||||
protocol = parts[0];
|
||||
baseAddress = protocol + '//' + hostpart + baseAddress;
|
||||
}
|
||||
parts = baseAddress.split('/');
|
||||
parts.splice(0, 3);
|
||||
altBaseAddress = parts.join('/');
|
||||
newAddress;
|
||||
if ((address.startsWith(baseAddress)
|
||||
|| address.startsWith(altBaseAddress))
|
||||
&& !address.endsWith('/logoff')) {
|
||||
newAddress = address;
|
||||
} else {
|
||||
newAddress = baseAddress;
|
||||
}
|
||||
|
||||
return newAddress;
|
||||
};
|
||||
return newAddress;
|
||||
}
|
||||
|
||||
this.$get = ['$q', '$http', function($q, $http) {
|
||||
var _this = this, service;
|
||||
this.$get = getService;
|
||||
|
||||
service = {
|
||||
// login: function(username, password, domain, language, rememberLogin) {
|
||||
// var d = $q.defer();
|
||||
login: function(data) {
|
||||
var d = $q.defer(),
|
||||
username = data.username,
|
||||
password = data.password,
|
||||
domain = data.domain,
|
||||
language,
|
||||
rememberLogin = data.rememberLogin ? 1 : 0;
|
||||
getService.$inject = ['$q', '$http', 'passwordPolicyConfig']
|
||||
function getService($q, $http, passwordPolicyConfig) {
|
||||
var _this = this, service;
|
||||
|
||||
if (data.loginSuffix && !username.endsWith(data.loginSuffix)) {
|
||||
username += loginSuffix;
|
||||
domain = false;
|
||||
}
|
||||
if (data.language && data.language != 'WONoSelectionString') {
|
||||
language = data.language;
|
||||
}
|
||||
service = {
|
||||
login: function(data) {
|
||||
var d = $q.defer(),
|
||||
username = data.username,
|
||||
password = data.password,
|
||||
domain = data.domain,
|
||||
language,
|
||||
rememberLogin = data.rememberLogin ? 1 : 0;
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/connect',
|
||||
data: {
|
||||
userName: username,
|
||||
password: password,
|
||||
domain: domain,
|
||||
language: language,
|
||||
rememberLogin: rememberLogin
|
||||
}
|
||||
}).success(function(data, status) {
|
||||
// Make sure browser's cookies are enabled
|
||||
var loginCookie = _this.readLoginCookie();
|
||||
if (!loginCookie) {
|
||||
d.reject(l('cookiesNotEnabled'));
|
||||
}
|
||||
else {
|
||||
// Check password policy
|
||||
if (typeof data.expire != 'undefined' && typeof data.grace != 'undefined') {
|
||||
if (data.expire < 0 && data.grace > 0) {
|
||||
d.reject({grace: data.grace});
|
||||
//showPasswordDialog('grace', createPasswordGraceDialog, data['grace']);
|
||||
} else if (data.expire > 0 && data.grace == -1) {
|
||||
d.reject({expire: data.expire});
|
||||
//showPasswordDialog('expiration', createPasswordExpirationDialog, data['expire']);
|
||||
}
|
||||
else {
|
||||
d.resolve(_this.redirectUrl(username, domain));
|
||||
}
|
||||
}
|
||||
else {
|
||||
d.resolve(_this.redirectUrl(username, domain));
|
||||
}
|
||||
}
|
||||
}).error(function(data, status) {
|
||||
var msg, perr;
|
||||
if (data && data.LDAPPasswordPolicyError) {
|
||||
perr = data.LDAPPasswordPolicyError;
|
||||
if (perr == passwordPolicyConfig.PolicyNoError) {
|
||||
msg = l('Wrong username or password.');
|
||||
}
|
||||
else if (perr == passwordPolicyConfig.PolicyAccountLocked) {
|
||||
msg = l('Your account was locked due to too many failed attempts.');
|
||||
}
|
||||
else {
|
||||
msg = l('Login failed due to unhandled error case: ') + perr;
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg = l('Unhandled error response');
|
||||
}
|
||||
d.reject({error: msg});
|
||||
});
|
||||
return d.promise;
|
||||
}, // login: function(data) { ...
|
||||
|
||||
changePassword: function(newPassword) {
|
||||
var d = $q.defer(),
|
||||
loginCookie = _this.readLoginCookie();
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/changePassword',
|
||||
data: {
|
||||
userName: loginCookie[0],
|
||||
password: loginCookie[1],
|
||||
newPassword: newPassword }
|
||||
}).success(function(data, status) {
|
||||
d.resolve();
|
||||
}).error(function(data, status) {
|
||||
var error,
|
||||
perr = data["LDAPPasswordPolicyError"];
|
||||
|
||||
if (!perr) {
|
||||
perr = passwordPolicyConfig.PolicyPasswordSystemUnknown;
|
||||
error = _("Unhandled error response");
|
||||
}
|
||||
else if (perr == passwordPolicyConfig.PolicyNoError) {
|
||||
error = l("Password change failed");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordModNotAllowed) {
|
||||
error = l("Password change failed - Permission denied");
|
||||
} else if (perr == passwordPolicyConfig.PolicyInsufficientPasswordQuality) {
|
||||
error = l("Password change failed - Insufficient password quality");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordTooShort) {
|
||||
error = l("Password change failed - Password is too short");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordTooYoung) {
|
||||
error = l("Password change failed - Password is too young");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordInHistory) {
|
||||
error = l("Password change failed - Password is in history");
|
||||
} else {
|
||||
error = l("Unhandled policy error: %{0}").formatted(perr);
|
||||
perr = passwordPolicyConfig.PolicyPasswordUnknown;
|
||||
}
|
||||
|
||||
d.reject(error);
|
||||
});
|
||||
return d.promise;
|
||||
if (data.loginSuffix && !username.endsWith(data.loginSuffix)) {
|
||||
username += loginSuffix;
|
||||
domain = false;
|
||||
}
|
||||
};
|
||||
return service;
|
||||
}];
|
||||
});
|
||||
if (data.language && data.language != 'WONoSelectionString') {
|
||||
language = data.language;
|
||||
}
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/connect',
|
||||
data: {
|
||||
userName: username,
|
||||
password: password,
|
||||
domain: domain,
|
||||
language: language,
|
||||
rememberLogin: rememberLogin
|
||||
}
|
||||
}).success(function(data, status) {
|
||||
// Make sure browser's cookies are enabled
|
||||
var loginCookie = readLoginCookie();
|
||||
if (!loginCookie) {
|
||||
d.reject(l('cookiesNotEnabled'));
|
||||
}
|
||||
else {
|
||||
// Check password policy
|
||||
if (typeof data.expire != 'undefined' && typeof data.grace != 'undefined') {
|
||||
if (data.expire < 0 && data.grace > 0) {
|
||||
d.reject({grace: data.grace});
|
||||
//showPasswordDialog('grace', createPasswordGraceDialog, data['grace']);
|
||||
} else if (data.expire > 0 && data.grace == -1) {
|
||||
d.reject({expire: data.expire});
|
||||
//showPasswordDialog('expiration', createPasswordExpirationDialog, data['expire']);
|
||||
}
|
||||
else {
|
||||
d.resolve(redirectUrl(username, domain));
|
||||
}
|
||||
}
|
||||
else {
|
||||
d.resolve(redirectUrl(username, domain));
|
||||
}
|
||||
}
|
||||
}).error(function(data, status) {
|
||||
var msg, perr;
|
||||
if (data && data.LDAPPasswordPolicyError) {
|
||||
perr = data.LDAPPasswordPolicyError;
|
||||
if (perr == passwordPolicyConfig.PolicyNoError) {
|
||||
msg = l('Wrong username or password.');
|
||||
}
|
||||
else if (perr == passwordPolicyConfig.PolicyAccountLocked) {
|
||||
msg = l('Your account was locked due to too many failed attempts.');
|
||||
}
|
||||
else {
|
||||
msg = l('Login failed due to unhandled error case: ') + perr;
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg = l('Unhandled error response');
|
||||
}
|
||||
d.reject({error: msg});
|
||||
});
|
||||
return d.promise;
|
||||
}, // login: function(data) { ...
|
||||
|
||||
changePassword: function(newPassword) {
|
||||
var d = $q.defer(),
|
||||
loginCookie = _this.readLoginCookie();
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '/SOGo/so/changePassword',
|
||||
data: {
|
||||
userName: loginCookie[0],
|
||||
password: loginCookie[1],
|
||||
newPassword: newPassword }
|
||||
}).success(function(data, status) {
|
||||
d.resolve();
|
||||
}).error(function(data, status) {
|
||||
var error,
|
||||
perr = data["LDAPPasswordPolicyError"];
|
||||
|
||||
if (!perr) {
|
||||
perr = passwordPolicyConfig.PolicyPasswordSystemUnknown;
|
||||
error = _("Unhandled error response");
|
||||
}
|
||||
else if (perr == passwordPolicyConfig.PolicyNoError) {
|
||||
error = l("Password change failed");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordModNotAllowed) {
|
||||
error = l("Password change failed - Permission denied");
|
||||
} else if (perr == passwordPolicyConfig.PolicyInsufficientPasswordQuality) {
|
||||
error = l("Password change failed - Insufficient password quality");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordTooShort) {
|
||||
error = l("Password change failed - Password is too short");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordTooYoung) {
|
||||
error = l("Password change failed - Password is too young");
|
||||
} else if (perr == passwordPolicyConfig.PolicyPasswordInHistory) {
|
||||
error = l("Password change failed - Password is in history");
|
||||
} else {
|
||||
error = l("Unhandled policy error: %{0}").formatted(perr);
|
||||
perr = passwordPolicyConfig.PolicyPasswordUnknown;
|
||||
}
|
||||
|
||||
d.reject(error);
|
||||
});
|
||||
return d.promise;
|
||||
}
|
||||
};
|
||||
return service;
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
angular.module('SOGo.Common', ['ngMaterial', 'RecursionHelper'])
|
||||
angular.module('SOGo.Common', ['ngMaterial'])
|
||||
// md break-points values are hard-coded in angular-material/src/core/util/constant.js
|
||||
// $mdMedia has a built-in support for those values but can also evaluate others
|
||||
// For some reasons, angular-material's break-points don't match the specs
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
* @ngInject
|
||||
* @example:
|
||||
|
||||
<md-button sg-subscribe="contact" sg-subscribe-on-select="subscribeToFolder">Subscribe ..</md-button>
|
||||
<md-button sg-subscribe="contact" sg-subscribe-on-select="subscribeToFolder">Subscribe ..</md-button>
|
||||
*/
|
||||
sgSubscribe.$inject = ['User'];
|
||||
function sgSubscribe(User) {
|
||||
|
@ -28,66 +28,70 @@
|
|||
controllerAs: 'vm',
|
||||
link: link
|
||||
}
|
||||
sgSubscribeDialogController.$inject = ['$mdDialog'];
|
||||
function sgSubscribeDialogController($mdDialog) {
|
||||
var vm = this;
|
||||
vm.showDialog = function() {
|
||||
$mdDialog.show({
|
||||
templateUrl: '../Contacts/UIxContactsUserFolders',
|
||||
clickOutsideToClose: true,
|
||||
//scope: vm,
|
||||
//preserveScope: true,
|
||||
locals: {
|
||||
folderType: vm.folderType,
|
||||
onFolderSelect: vm.onFolderSelect
|
||||
//User: User
|
||||
},
|
||||
controller: sgSubscribeController,
|
||||
controllerAs: 'vm'
|
||||
});
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
sgSubscribeController.$inject = ['folderType', 'onFolderSelect', 'User'];
|
||||
function sgSubscribeController(folderType, onFolderSelect, User) {
|
||||
var vm = this;
|
||||
vm.selectedUser = null;
|
||||
|
||||
vm.searchTextOptions = {
|
||||
updateOn: 'default blur',
|
||||
debounce: {
|
||||
default: 300,
|
||||
blur: 0
|
||||
}
|
||||
};
|
||||
|
||||
vm.onChange = function() {
|
||||
User.$filter(vm.searchText).then(function(matches) {
|
||||
vm.users = matches;
|
||||
});
|
||||
};
|
||||
|
||||
vm.selectUser = function(i) {
|
||||
// Fetch folders of specific type for selected user
|
||||
vm.users[i].$folders(folderType).then(function() {
|
||||
vm.selectedUser = vm.users[i];
|
||||
});
|
||||
};
|
||||
|
||||
// Callback upon subscription to a folder
|
||||
vm.selectFolder = function(folder) {
|
||||
onFolderSelect({folderData: folder});
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
function link(scope, element, attrs, controller) {
|
||||
var inputEl = element.find('input');
|
||||
element.on('click', controller.showDialog);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
sgSubscribeDialogController.$inject = ['$mdDialog'];
|
||||
function sgSubscribeDialogController($mdDialog) {
|
||||
var vm = this;
|
||||
vm.showDialog = function() {
|
||||
$mdDialog.show({
|
||||
templateUrl: '../Contacts/UIxContactsUserFolders',
|
||||
clickOutsideToClose: true,
|
||||
locals: {
|
||||
folderType: vm.folderType,
|
||||
onFolderSelect: vm.onFolderSelect
|
||||
},
|
||||
controller: sgSubscribeController,
|
||||
controllerAs: 'vm'
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
sgSubscribeController.$inject = ['folderType', 'onFolderSelect', 'User'];
|
||||
function sgSubscribeController(folderType, onFolderSelect, User) {
|
||||
var vm = this;
|
||||
vm.selectedUser = null;
|
||||
|
||||
vm.searchTextOptions = {
|
||||
updateOn: 'default blur',
|
||||
debounce: {
|
||||
default: 300,
|
||||
blur: 0
|
||||
}
|
||||
};
|
||||
|
||||
vm.onChange = function() {
|
||||
User.$filter(vm.searchText).then(function(matches) {
|
||||
vm.users = matches;
|
||||
});
|
||||
};
|
||||
|
||||
vm.selectUser = function(i) {
|
||||
// Fetch folders of specific type for selected user
|
||||
vm.users[i].$folders(folderType).then(function() {
|
||||
vm.selectedUser = vm.users[i];
|
||||
});
|
||||
};
|
||||
|
||||
// Callback upon subscription to a folder
|
||||
vm.selectFolder = function(folder) {
|
||||
onFolderSelect({folderData: folder});
|
||||
};
|
||||
}
|
||||
|
||||
function link(scope, element, attrs, controller) {
|
||||
var inputEl = element.find('input');
|
||||
element.on('click', controller.showDialog);
|
||||
}
|
||||
|
||||
|
||||
angular
|
||||
.module('SOGo.Common')
|
||||
.directive('sgSubscribe', sgSubscribe);
|
||||
})();
|
||||
})();
|
||||
|
|
|
@ -37,9 +37,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateAddressbooks: ['AddressBook', function(AddressBook) {
|
||||
return AddressBook.$findAll(window.contactFolders);
|
||||
}]
|
||||
stateAddressbooks: stateAddressbooks
|
||||
}
|
||||
})
|
||||
.state('app.addressbook', {
|
||||
|
@ -51,9 +49,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateAddressbook: ['$stateParams', 'AddressBook', function($stateParams, AddressBook) {
|
||||
return AddressBook.$find($stateParams.addressbookId);
|
||||
}]
|
||||
stateAddressbook: stateAddressbook
|
||||
}
|
||||
})
|
||||
.state('app.addressbook.new', {
|
||||
|
@ -65,11 +61,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateCard: ['$stateParams', 'stateAddressbook', 'Card', function($stateParams, stateAddressbook, Card) {
|
||||
var tag = 'v' + $stateParams.contactType,
|
||||
card = new Card({ pid: $stateParams.addressbookId, tag: tag });
|
||||
return card;
|
||||
}]
|
||||
stateCard: stateNewCard
|
||||
}
|
||||
})
|
||||
.state('app.addressbook.card', {
|
||||
|
@ -81,9 +73,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateCard: ['$stateParams', 'stateAddressbook', function($stateParams, stateAddressbook) {
|
||||
return stateAddressbook.$getCard($stateParams.cardId);
|
||||
}]
|
||||
stateCard: stateCard
|
||||
}
|
||||
})
|
||||
.state('app.addressbook.card.view', {
|
||||
|
@ -109,4 +99,38 @@
|
|||
$urlRouterProvider.otherwise('/addressbooks/personal');
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateAddressbooks.$inject = ['AddressBook'];
|
||||
function stateAddressbooks(AddressBook) {
|
||||
return AddressBook.$findAll(window.contactFolders);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateAddressbook.$inject = ['$stateParams', 'AddressBook'];
|
||||
function stateAddressbook($stateParams, AddressBook) {
|
||||
return AddressBook.$find($stateParams.addressbookId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateNewCard.$inject = ['$stateParams', 'stateAddressbook', 'Card'];
|
||||
function stateNewCard($stateParams, stateAddressbook, Card) {
|
||||
var tag = 'v' + $stateParams.contactType,
|
||||
card = new Card({ pid: $stateParams.addressbookId, tag: tag });
|
||||
return card;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateCard.$inject = ['$stateParams', 'stateAddressbook'];
|
||||
function stateCard($stateParams, stateAddressbook) {
|
||||
return stateAddressbook.$getCard($stateParams.cardId);
|
||||
}
|
||||
|
||||
})();
|
||||
|
|
|
@ -37,18 +37,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateAccounts: ['$q', 'Account', function($q, Account) {
|
||||
var accounts = Account.$findAll(mailAccounts);
|
||||
var promises = [];
|
||||
// Fetch list of mailboxes for each account
|
||||
angular.forEach(accounts, function(account, i) {
|
||||
var mailboxes = account.$getMailboxes();
|
||||
promises.push(mailboxes.then(function(objects) {
|
||||
return account;
|
||||
}));
|
||||
});
|
||||
return $q.all(promises);
|
||||
}]
|
||||
stateAccounts: stateAccounts
|
||||
}
|
||||
})
|
||||
.state('mail.account', {
|
||||
|
@ -60,11 +49,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateAccount: ['$stateParams', 'stateAccounts', function($stateParams, stateAccounts) {
|
||||
return _.find(stateAccounts, function(account) {
|
||||
return account.id == $stateParams.accountId;
|
||||
});
|
||||
}]
|
||||
stateAccount: stateAccount
|
||||
}
|
||||
})
|
||||
.state('mail.account.mailbox', {
|
||||
|
@ -76,27 +61,8 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateMailbox: ['$stateParams', 'stateAccount', 'decodeUriFilter', function($stateParams, stateAccount, decodeUriFilter) {
|
||||
var mailboxId = decodeUriFilter($stateParams.mailboxId);
|
||||
// Recursive find function
|
||||
var _find = function(mailboxes) {
|
||||
var mailbox = _.find(mailboxes, function(o) {
|
||||
return o.path == mailboxId;
|
||||
});
|
||||
if (!mailbox) {
|
||||
angular.forEach(mailboxes, function(o) {
|
||||
if (!mailbox && o.children && o.children.length > 0) {
|
||||
mailbox = _find(o.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
return mailbox;
|
||||
};
|
||||
return _find(stateAccount.$mailboxes);
|
||||
}],
|
||||
stateMessages: ['stateMailbox', function(stateMailbox) {
|
||||
return stateMailbox.$filter();
|
||||
}]
|
||||
stateMailbox: stateMailbox,
|
||||
stateMessages: stateMessages
|
||||
}
|
||||
})
|
||||
.state('mail.account.mailbox.message', {
|
||||
|
@ -108,17 +74,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateMessage: ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages', function(encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) {
|
||||
var message = _.find(stateMessages, function(messageObject) {
|
||||
return messageObject.uid == $stateParams.messageId;
|
||||
});
|
||||
|
||||
if (message)
|
||||
return message.$reload();
|
||||
else
|
||||
// Message not found
|
||||
$state.go('mail.account.mailbox', { accountId: stateMailbox.$account.id, mailboxId: encodeUriFilter(stateMailbox.path) });
|
||||
}]
|
||||
stateMessage: stateMessage
|
||||
}
|
||||
})
|
||||
.state('mail.account.mailbox.message.edit', {
|
||||
|
@ -130,9 +86,7 @@
|
|||
}
|
||||
},
|
||||
resolve: {
|
||||
stateContent: ['stateMessage', function(stateMessage) {
|
||||
return stateMessage.$editableContent();
|
||||
}]
|
||||
stateContent: stateContent
|
||||
}
|
||||
})
|
||||
.state('mail.account.mailbox.message.action', {
|
||||
|
@ -172,6 +126,88 @@
|
|||
// });
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateAccounts.$inject = ['$q', 'Account'];
|
||||
function stateAccounts($q, Account) {
|
||||
var accounts = Account.$findAll(mailAccounts);
|
||||
var promises = [];
|
||||
// Fetch list of mailboxes for each account
|
||||
angular.forEach(accounts, function(account, i) {
|
||||
var mailboxes = account.$getMailboxes();
|
||||
promises.push(mailboxes.then(function(objects) {
|
||||
return account;
|
||||
}));
|
||||
});
|
||||
return $q.all(promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateAccount.$inject = ['$stateParams', 'stateAccounts'];
|
||||
function stateAccount($stateParams, stateAccounts) {
|
||||
return _.find(stateAccounts, function(account) {
|
||||
return account.id == $stateParams.accountId;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateMailbox.$inject = ['$stateParams', 'stateAccount', 'decodeUriFilter'];
|
||||
function stateMailbox($stateParams, stateAccount, decodeUriFilter) {
|
||||
var mailboxId = decodeUriFilter($stateParams.mailboxId);
|
||||
// Recursive find function
|
||||
var _find = function(mailboxes) {
|
||||
var mailbox = _.find(mailboxes, function(o) {
|
||||
return o.path == mailboxId;
|
||||
});
|
||||
if (!mailbox) {
|
||||
angular.forEach(mailboxes, function(o) {
|
||||
if (!mailbox && o.children && o.children.length > 0) {
|
||||
mailbox = _find(o.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
return mailbox;
|
||||
};
|
||||
return _find(stateAccount.$mailboxes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateMessages.$inject = ['stateMailbox'];
|
||||
function stateMessages(stateMailbox) {
|
||||
return stateMailbox.$filter();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateMessage.$inject = ['encodeUriFilter', '$stateParams', '$state', 'stateMailbox', 'stateMessages'];
|
||||
function stateMessage(encodeUriFilter, $stateParams, $state, stateMailbox, stateMessages) {
|
||||
var message = _.find(stateMessages, function(messageObject) {
|
||||
return messageObject.uid == $stateParams.messageId;
|
||||
});
|
||||
|
||||
if (message)
|
||||
return message.$reload();
|
||||
else
|
||||
// Message not found
|
||||
$state.go('mail.account.mailbox', { accountId: stateMailbox.$account.id, mailboxId: encodeUriFilter(stateMailbox.path) } );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
stateContent.$inject = ['stateMessage'];
|
||||
function stateContent(stateMessage) {
|
||||
return stateMessage.$editableContent();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
|
||||
/**
|
||||
* @name Preferences
|
||||
* @constructor
|
||||
|
@ -13,47 +13,48 @@
|
|||
this.defaults = {};
|
||||
this.settings = {};
|
||||
|
||||
this.mailboxes = Preferences.$Mailbox.$find({ id: 0 });
|
||||
|
||||
Preferences.$$resource.fetch("jsonDefaults").then(function(data) {
|
||||
Preferences.$timeout(function() {
|
||||
this.mailboxes = Preferences.$Mailbox.$find({ id: 0 });
|
||||
|
||||
// We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)
|
||||
var labels = _.object(_.map(data.SOGoMailLabelsColors, function(value, key) {
|
||||
if (key.charAt(0) == '$')
|
||||
return ['_' + key, value];
|
||||
return [key, value];
|
||||
}));
|
||||
Preferences.$$resource.fetch("jsonDefaults").then(function(data) {
|
||||
Preferences.$timeout(function() {
|
||||
|
||||
data.SOGoMailLabelsColors = labels;
|
||||
// We swap $key -> _$key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)
|
||||
var labels = _.object(_.map(data.SOGoMailLabelsColors, function(value, key) {
|
||||
if (key.charAt(0) == '$')
|
||||
return ['_' + key, value];
|
||||
return [key, value];
|
||||
}));
|
||||
|
||||
// We convert our list of autoReplyEmailAddresses/forwardAddress into a string.
|
||||
if (data.Vacation && data.Vacation.autoReplyEmailAddresses)
|
||||
data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(",");
|
||||
data.SOGoMailLabelsColors = labels;
|
||||
|
||||
if (data.Forward && data.Forward.forwardAddress)
|
||||
data.Forward.forwardAddress = data.Forward.forwardAddress.join(",");
|
||||
|
||||
angular.extend(_this.defaults, data);
|
||||
});
|
||||
});
|
||||
Preferences.$$resource.fetch("jsonSettings").then(function(data) {
|
||||
Preferences.$timeout(function() {
|
||||
// We convert our list of autoReplyEmailAddresses/forwardAddress into a string.
|
||||
if (data.Vacation && data.Vacation.autoReplyEmailAddresses)
|
||||
data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(",");
|
||||
|
||||
|
||||
// We convert our PreventInvitationsWhitelist hash into a array of user
|
||||
if (data.Calendar && data.Calendar.PreventInvitationsWhitelist)
|
||||
data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {
|
||||
return new Preferences.$User({uid: key, shortFormat: value});
|
||||
});
|
||||
else
|
||||
data.Calendar.PreventInvitationsWhitelist = [];
|
||||
|
||||
angular.extend(_this.settings, data);
|
||||
});
|
||||
});
|
||||
if (data.Forward && data.Forward.forwardAddress)
|
||||
data.Forward.forwardAddress = data.Forward.forwardAddress.join(",");
|
||||
|
||||
angular.extend(_this.defaults, data);
|
||||
});
|
||||
});
|
||||
|
||||
Preferences.$$resource.fetch("jsonSettings").then(function(data) {
|
||||
Preferences.$timeout(function() {
|
||||
|
||||
|
||||
// We convert our PreventInvitationsWhitelist hash into a array of user
|
||||
if (data.Calendar && data.Calendar.PreventInvitationsWhitelist)
|
||||
data.Calendar.PreventInvitationsWhitelist = _.map(data.Calendar.PreventInvitationsWhitelist, function(value, key) {
|
||||
return new Preferences.$User({uid: key, shortFormat: value});
|
||||
});
|
||||
else
|
||||
data.Calendar.PreventInvitationsWhitelist = [];
|
||||
|
||||
angular.extend(_this.settings, data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @memberof Preferences
|
||||
* @desc The factory we'll use to register with Angular
|
||||
|
@ -82,10 +83,10 @@
|
|||
* @memberof Preferences.prototype
|
||||
* @desc Save the preferences to the server.
|
||||
*/
|
||||
/*Preferences.prototype.$save = function() {
|
||||
Preferences.prototype.$save = function() {
|
||||
var _this = this;
|
||||
console.debug("save in model...");
|
||||
|
||||
|
||||
return Preferences.$$resource.save("Preferences",
|
||||
this.$omit(),
|
||||
undefined)
|
||||
|
@ -94,7 +95,7 @@
|
|||
//_this.$shadowData = _this.$omit(true);
|
||||
return data;
|
||||
});
|
||||
};*/
|
||||
};
|
||||
|
||||
/**
|
||||
* @function $omit
|
||||
|
@ -103,7 +104,7 @@
|
|||
* @param {Boolean} [deep] - make a deep copy if true
|
||||
* @return an object literal copy of the Preferences instance
|
||||
*/
|
||||
/*Preferences.prototype.$omit = function(deep) {
|
||||
Preferences.prototype.$omit = function(deep) {
|
||||
var preferences = {};
|
||||
angular.forEach(this, function(value, key) {
|
||||
if (key != 'constructor' && key[0] != '$') {
|
||||
|
@ -120,9 +121,9 @@
|
|||
return [key.substring(1), value];
|
||||
return [key, value];
|
||||
}));
|
||||
|
||||
|
||||
preferences.defaults.SOGoMailLabelsColors = labels;
|
||||
|
||||
|
||||
if (preferences.defaults.Vacation && preferences.defaults.Vacation.autoReplyEmailAddresses)
|
||||
preferences.defaults.Vacation.autoReplyEmailAddresses = preferences.defaults.Vacation.autoReplyEmailAddresses.split(",");
|
||||
|
||||
|
@ -137,8 +138,8 @@
|
|||
preferences.settings.Calendar.PreventInvitationsWhitelist = h;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return preferences;
|
||||
};*/
|
||||
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue