sogo/UI/WebServerResources/js/Preferences/Preferences.service.js

150 lines
5.1 KiB
JavaScript
Raw Normal View History

/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
'use strict';
2015-05-06 18:12:27 +02:00
/**
* @name Preferences
* @constructor
*/
function Preferences() {
var _this = this;
this.defaults = {};
this.settings = {};
2015-05-06 18:12:27 +02:00
this.mailboxes = Preferences.$Mailbox.$find({ id: 0 });
this.defaultsPromise = Preferences.$$resource.fetch("jsonDefaults").then(function(data) {
2015-05-06 18:12:27 +02:00
// 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];
}));
data.SOGoMailLabelsColors = labels;
// We convert our list of autoReplyEmailAddresses/forwardAddress into a string.
if (data.Vacation && data.Vacation.autoReplyEmailAddresses)
data.Vacation.autoReplyEmailAddresses = data.Vacation.autoReplyEmailAddresses.join(",");
if (data.Forward && data.Forward.forwardAddress)
data.Forward.forwardAddress = data.Forward.forwardAddress.join(",");
angular.extend(_this.defaults, data);
return _this.defaults;
2015-05-06 18:12:27 +02:00
});
this.settingsPromise = Preferences.$$resource.fetch("jsonSettings").then(function(data) {
2015-05-06 18:12:27 +02:00
// 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) {
var match = /^(.+)\s<(\S+)>$/.exec(value);
return new Preferences.$User({uid: key, cn: match[1], c_email: match[2]});
2015-05-06 18:12:27 +02:00
});
else
data.Calendar.PreventInvitationsWhitelist = [];
angular.extend(_this.settings, data);
return _this.settings;
2015-05-06 18:12:27 +02:00
});
}
2015-05-06 18:12:27 +02:00
/**
* @memberof Preferences
* @desc The factory we'll use to register with Angular
* @returns the Preferences constructor
*/
Preferences.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'User', function($q, $timeout, $log, Settings, Resource, Mailbox, User) {
angular.extend(Preferences, {
$q: $q,
$timeout: $timeout,
$log: $log,
$$resource: new Resource(Settings.activeUser.folderURL, Settings.activeUser),
activeUser: Settings.activeUser,
2015-04-20 23:28:43 +02:00
$Mailbox: Mailbox,
$User: User
});
return new Preferences(); // return unique instance
}];
/* Factory registration in Angular module */
angular.module('SOGo.PreferencesUI')
.factory('Preferences', Preferences.$factory);
/**
* @function ready
* @memberof Preferences.prototype
* @desc Combine promises used to load user's defaults and settings.
* @return a combined promise
*/
Preferences.prototype.ready = function() {
return Preferences.$q.all([this.defaultsPromise, this.settingsPromise]);
};
/**
* @function $save
* @memberof Preferences.prototype
* @desc Save the preferences to the server.
*/
2015-05-06 18:12:27 +02:00
Preferences.prototype.$save = function() {
var _this = this;
2015-05-06 18:12:27 +02:00
return Preferences.$$resource.save("Preferences", this.$omit(true))
.then(function(data) {
// Make a copy of the data for an eventual reset
//_this.$shadowData = _this.$omit(true);
return data;
});
2015-05-06 18:12:27 +02:00
};
/**
* @function $omit
* @memberof Preferences.prototype
* @desc Return a sanitized object used to send to the server.
* @param {Boolean} [deep] - make a deep copy if true
* @return an object literal copy of the Preferences instance
*/
2015-05-06 18:12:27 +02:00
Preferences.prototype.$omit = function(deep) {
var preferences = {};
angular.forEach(this, function(value, key) {
2015-03-21 20:34:18 +01:00
if (key != 'constructor' && key[0] != '$') {
if (deep)
preferences[key] = angular.copy(value);
else
preferences[key] = value;
}
});
2015-03-21 20:34:18 +01:00
// We swap _$key -> $key to avoid an Angular bug (https://github.com/angular/angular.js/issues/6266)
var labels = _.object(_.map(preferences.defaults.SOGoMailLabelsColors, function(value, key) {
if (key.charAt(0) == '_' && key.charAt(1) == '$')
return [key.substring(1), value];
return [key, value];
}));
2015-05-06 18:12:27 +02:00
2015-03-21 20:34:18 +01:00
preferences.defaults.SOGoMailLabelsColors = labels;
2015-05-06 18:12:27 +02:00
if (preferences.defaults.Vacation && preferences.defaults.Vacation.autoReplyEmailAddresses)
preferences.defaults.Vacation.autoReplyEmailAddresses = preferences.defaults.Vacation.autoReplyEmailAddresses.split(",");
2015-04-20 23:28:43 +02:00
2015-04-28 19:56:50 +02:00
if (preferences.defaults.Forward && preferences.defaults.Forward.forwardAddress)
preferences.defaults.Forward.forwardAddress = preferences.defaults.Forward.forwardAddress.split(",");
2015-04-20 23:28:43 +02:00
if (preferences.settings.Calendar && preferences.settings.Calendar.PreventInvitationsWhitelist) {
var h = {};
_.each(preferences.settings.Calendar.PreventInvitationsWhitelist, function(user) {
h[user.uid] = user.$shortFormat();
2015-04-20 23:28:43 +02:00
});
preferences.settings.Calendar.PreventInvitationsWhitelist = h;
2015-04-20 23:28:43 +02:00
}
2015-05-06 18:12:27 +02:00
return preferences;
2015-05-06 18:12:27 +02:00
};
})();