diff --git a/UI/WebServerResources/js/Preferences.js b/UI/WebServerResources/js/Preferences.js index 3c9cb23a8b..4f5ab31b50 100644 --- a/UI/WebServerResources/js/Preferences.js +++ b/UI/WebServerResources/js/Preferences.js @@ -1,2 +1,2 @@ -!function(){"use strict";function a(a,c){a.state("preferences",{abstract:!0,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}},resolve:{statePreferences:b}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}}),c.otherwise("/general")}function b(a){return a}function c(a){a.$on("$routeChangeError",function(a,b,c,d){console.error(a,b,c,d)})}angular.module("SOGo.PreferencesUI",["ui.router","ck","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication","as.sortable"]).config(a).run(c),a.$inject=["$stateProvider","$urlRouterProvider"],b.$inject=["Preferences"],c.$inject=["$rootScope"]}(),function(){"use strict";function a(a,b,c,d,e){function f(){return!(d>0)&&!e}function g(){a.cancel()}function h(){a.hide()}var i=this;i.defaultPort=143,i.defaults=b,i.account=c,i.accountId=d,i.customFromIsReadonly=f,i.cancel=g,i.save=h,i.account.encryption?"ssl"==i.account.encryption&&(i.defaultPort=993):i.account.encryption="none"}a.$inject=["$mdDialog","defaults","account","accountId","mailCustomFromEnabled"],angular.module("SOGo.PreferencesUI").controller("AccountDialogController",a)}(),function(){"use strict";function a(a,b,c,d,e,f){function g(){c.cancel()}function h(){return o.filter.rules&&o.filter.rules.length>0&&o.filter.actions&&o.filter.actions.length>0}function i(a){c.hide()}function j(a){o.filter.rules||(o.filter.rules=[]),o.filter.rules.push({field:"subject",operator:"contains"})}function k(a){o.filter.rules.splice(a,1)}function m(a){o.filter.actions||(o.filter.actions=[]),o.filter.actions.push({method:"discard"})}function n(a){o.filter.actions.splice(a,1)}var o=this,p=b.sieveCapabilities,q=b.forwardEnabled;b.vacationEnabled;o.filter=d,o.mailboxes=e,o.labels=f,o.cancel=g,o.hasRulesAndActions=h,o.save=i,o.addMailFilterRule=j,o.removeMailFilterRule=k,o.addMailFilterAction=m,o.removeMailFilterAction=n,o.fieldLabels={subject:l("Subject"),from:l("From"),to:l("To"),cc:l("Cc"),to_or_cc:l("To or Cc"),size:l("Size (Kb)"),header:l("Header")},p.indexOf("body")>-1&&(o.fieldLabels.body=l("Body")),o.methodLabels={discard:l("Discard the message"),keep:l("Keep the message"),stop:l("Stop processing filter rules")},q&&(o.methodLabels.redirect=l("Forward the message to")),p.indexOf("reject")>-1&&(o.methodLabels.reject=l("Send a reject message")),p.indexOf("fileinto")>-1&&(o.methodLabels.fileinto=l("File the message in")),(p.indexOf("imapflags")>-1||p.indexOf("imap4flags")>-1)&&(o.methodLabels.addflag=l("Flag the message with")),o.numberOperatorLabels={under:l("is under"),over:l("is over")},o.textOperatorLabels={is:l("is"),is_not:l("is not"),contains:l("contains"),contains_not:l("does not contain"),matches:l("matches"),matches_not:l("does not match")},p.indexOf("regex")>-1&&(o.textOperatorLabels.regex=l("matches regex"),o.textOperatorLabels.regex_not=l("does not match regex")),o.flagLabels={seen:l("Seen"),deleted:l("Deleted"),answered:l("Answered"),flagged:l("Flagged"),junk:l("Junk"),not_junk:l("Not Junk")}}a.$inject=["$scope","$window","$mdDialog","filter","mailboxes","labels"],angular.module("SOGo.PreferencesUI").controller("FiltersDialogController",a)}(),function(){"use strict";function a(a,b,c,d,e,f,g,h,i,j,k,m,n,o){function p(a,b){b.$valid&&(d("xs")&&e("left").close(),c.go("preferences."+a))}function q(a){j.confirm(l("Warning"),l("Save preferences and reload page now?"),{ok:l("Yes"),cancel:l("No")}).then(function(){G(a,{quick:!0}).then(function(){b.location.reload(!0)})})}function r(a){Q.preferences.defaults.SOGoCalendarCategoriesColors["New category"]="#aaa",Q.preferences.defaults.SOGoCalendarCategories.push("New category"),i("calendarCategory_"+(Q.preferences.defaults.SOGoCalendarCategories.length-1)),a.$setDirty()}function s(a,b){var c=Q.preferences.defaults.SOGoCalendarCategories[a];Q.preferences.defaults.SOGoCalendarCategories.splice(a,1),delete Q.preferences.defaults.SOGoCalendarCategoriesColors[c],b.$setDirty()}function t(a){Q.preferences.defaults.SOGoContactsCategories.push(""),i("contactCategory_"+(Q.preferences.defaults.SOGoContactsCategories.length-1)),a.$setDirty()}function u(a,b){Q.preferences.defaults.SOGoContactsCategories.splice(a,1),b.$setDirty()}function v(a,b){var c;Q.preferences.defaults.AuxiliaryMailAccounts.push({}),c=_.last(Q.preferences.defaults.AuxiliaryMailAccounts),angular.extend(c,{name:"",identities:[{fullName:"",email:""}],receipts:{receiptAction:"ignore",receiptNonRecipientAction:"ignore",receiptOutsideDomainAction:"ignore",receiptAnyAction:"ignore"}}),f.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account=new",targetEvent:a,locals:{defaults:Q.preferences.defaults,account:c,accountId:Q.preferences.defaults.AuxiliaryMailAccounts.length-1,mailCustomFromEnabled:window.mailCustomFromEnabled}}).then(function(){b.$setDirty()}).catch(function(){Q.preferences.defaults.AuxiliaryMailAccounts.pop()})}function w(a,b,c){var d=Q.preferences.defaults.AuxiliaryMailAccounts[b];f.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account="+b,targetEvent:a,locals:{defaults:Q.preferences.defaults,account:d,accountId:b,mailCustomFromEnabled:window.mailCustomFromEnabled}}).then(function(){Q.preferences.defaults.AuxiliaryMailAccounts[b]=d,c.$setDirty()})}function x(a,b){Q.preferences.defaults.AuxiliaryMailAccounts.splice(a,1),b.$setDirty()}function y(a){var b="_$$"+guid();Q.preferences.defaults.SOGoMailLabelsColors[b]=["New label","#aaa"],i("mailLabel_"+(_.size(Q.preferences.defaults.SOGoMailLabelsColors)-1)),a.$setDirty()}function z(a,b){delete Q.preferences.defaults.SOGoMailLabelsColors[a],b.$setDirty()}function A(a,b){var c={match:"all"};f.show({templateUrl:"editFilter?filter=new",controller:"FiltersDialogController",controllerAs:"filterEditor",targetEvent:a,locals:{filter:c,mailboxes:R,labels:Q.preferences.defaults.SOGoMailLabelsColors}}).then(function(){Q.preferences.defaults.SOGoSieveFilters||(Q.preferences.defaults.SOGoSieveFilters=[]),Q.preferences.defaults.SOGoSieveFilters.push(c),b.$setDirty()})}function B(a,b,c){var d=angular.copy(Q.preferences.defaults.SOGoSieveFilters[b]);f.show({templateUrl:"editFilter?filter="+b,controller:"FiltersDialogController",controllerAs:"filterEditor",targetEvent:null,locals:{filter:d,mailboxes:R,labels:Q.preferences.defaults.SOGoMailLabelsColors}}).then(function(){Q.preferences.defaults.SOGoSieveFilters[b]=d,c.$setDirty()})}function C(a,b){Q.preferences.defaults.SOGoSieveFilters.splice(a,1),b.$setDirty()}function D(a){var b=[];angular.isDefined(Q.preferences.defaults.Vacation.autoReplyEmailAddresses)&&(b=Q.preferences.defaults.Vacation.autoReplyEmailAddresses.split(",")),Q.preferences.defaults.Vacation.autoReplyEmailAddresses=_.union(window.defaultEmailAddresses.split(","),b).join(","),a.$setDirty()}function E(a,b){return a.length0&&angular.isDefined(Q.preferences.defaults.Forward)&&Q.preferences.defaults.Forward.enabled&&angular.isDefined(Q.preferences.defaults.Forward.forwardAddress))for(h=Q.preferences.defaults.Forward.forwardAddress.split(","),i=b.defaultEmailAddresses.split(/, */),_.forEach(i,function(a){var b=a.split("@")[1];b&&k.push(b.toLowerCase())}),e=0;e=0&&2==b.forwardConstraints&&(j.alert(l("Error"),l("You are not allowed to forward your messages to an internal email address.")),f=!1);return f?Q.preferences.$save().then(function(a){d&&d.quick||(g.show(g.simple().content(l("Preferences saved")).position("bottom right").hideDelay(2e3)),c.$setPristine())}):a.reject()}function H(){return!!(Q.passwords.newPassword&&Q.passwords.newPassword.length>0&&Q.passwords.newPasswordConfirmation&&Q.passwords.newPasswordConfirmation.length&&Q.passwords.newPassword==Q.passwords.newPasswordConfirmation)}function I(){o.changePassword(Q.passwords.newPassword).then(function(){var a=f.alert({title:l("Password"),content:l("The password was changed successfully."),ok:l("OK")});f.show(a).finally(function(){a=void 0})},function(a){var b=f.alert({title:l("Password"),content:a,ok:l("OK")});f.show(b).finally(function(){b=void 0})})}function J(a){return _.filter(Q.timeZonesList,function(b){return b.toUpperCase().indexOf(a.toUpperCase())>=0})}function K(){var a=Q.preferences.defaults;a&&a.Vacation&&a.Vacation.enabled&&(L(),M())}function L(){var a;a=Q.preferences.defaults.Vacation,a.startDateEnabled&&(a.endDateEnabled&&a.startDate.getTime()>a.endDate.getTime()&&(a.startDate=new Date(a.endDate.getTime()),a.startDate.addDays(-1)),a.startDate.getTime()=T.getTime()),c}function O(a){var b=Q.preferences.defaults,c=!0;return b&&b.Vacation&&b.Vacation.enabled&&b.Vacation.endDateEnabled&&(c=(!b.Vacation.startDateEnabled||a.getTime()>b.Vacation.startDate.getTime())&&a.getTime()>=T.getTime()),c}var P,Q=this,R=[],S=new Date,T=S.beginOfDay().addDays(1);Q.preferences=n,Q.passwords={newPassword:null,newPasswordConfirmation:null},Q.go=p,Q.onLanguageChange=q,Q.addCalendarCategory=r,Q.removeCalendarCategory=s,Q.addContactCategory=t,Q.removeContactCategory=u,Q.addMailAccount=v,Q.editMailAccount=w,Q.removeMailAccount=x,Q.addMailLabel=y,Q.removeMailLabel=z,Q.addMailFilter=A,Q.editMailFilter=B,Q.removeMailFilter=C,Q.addDefaultEmailAddresses=D,Q.userFilter=E,Q.confirmChanges=F,Q.save=G,Q.canChangePassword=H,Q.changePassword=I,Q.timeZonesList=window.timeZonesList,Q.timeZonesListFilter=J,Q.timeZonesSearchText="",Q.sieveVariablesCapability=b.sieveCapabilities.indexOf("variables")>=0,Q.updateVacationDates=K,Q.toggleVacationStartDate=L,Q.toggleVacationEndDate=M,Q.validateVacationStartDate=N,Q.validateVacationEndDate=O,P=new m({id:0}),P.$getMailboxes().then(function(){for(var a=P.$flattenMailboxes({all:!0}),b=-1,c=a.length;++b0)&&!e}function g(){a.cancel()}function h(){a.hide()}var i=this;i.defaultPort=143,i.defaults=b,i.account=c,i.accountId=d,i.customFromIsReadonly=f,i.cancel=g,i.save=h,i.account.encryption?"ssl"==i.account.encryption&&(i.defaultPort=993):i.account.encryption="none"}a.$inject=["$mdDialog","defaults","account","accountId","mailCustomFromEnabled"],angular.module("SOGo.PreferencesUI").controller("AccountDialogController",a)}(),function(){"use strict";function a(a,b,c,d,e,f){function g(){c.cancel()}function h(){return o.filter.rules&&o.filter.rules.length>0&&o.filter.actions&&o.filter.actions.length>0}function i(a){c.hide()}function j(a){o.filter.rules||(o.filter.rules=[]),o.filter.rules.push({field:"subject",operator:"contains"})}function k(a){o.filter.rules.splice(a,1)}function m(a){o.filter.actions||(o.filter.actions=[]),o.filter.actions.push({method:"discard"})}function n(a){o.filter.actions.splice(a,1)}var o=this,p=b.sieveCapabilities,q=b.forwardEnabled,r=(b.vacationEnabled,"UTF-8"==b.sieveFolderEncoding?"name":"path");o.filter=d,o.mailboxes=e,o.labels=f,o.cancel=g,o.hasRulesAndActions=h,o.save=i,o.addMailFilterRule=j,o.removeMailFilterRule=k,o.addMailFilterAction=m,o.removeMailFilterAction=n,o.fieldLabels={subject:l("Subject"),from:l("From"),to:l("To"),cc:l("Cc"),to_or_cc:l("To or Cc"),size:l("Size (Kb)"),header:l("Header")},p.indexOf("body")>-1&&(o.fieldLabels.body=l("Body")),o.methodLabels={discard:l("Discard the message"),keep:l("Keep the message"),stop:l("Stop processing filter rules")},q&&(o.methodLabels.redirect=l("Forward the message to")),o.mailboxes=_.map(e,function(a){return{level:a.level,name:a.name,path:a[r]}}),p.indexOf("reject")>-1&&(o.methodLabels.reject=l("Send a reject message")),p.indexOf("fileinto")>-1&&(o.methodLabels.fileinto=l("File the message in")),(p.indexOf("imapflags")>-1||p.indexOf("imap4flags")>-1)&&(o.methodLabels.addflag=l("Flag the message with")),o.numberOperatorLabels={under:l("is under"),over:l("is over")},o.textOperatorLabels={is:l("is"),is_not:l("is not"),contains:l("contains"),contains_not:l("does not contain"),matches:l("matches"),matches_not:l("does not match")},p.indexOf("regex")>-1&&(o.textOperatorLabels.regex=l("matches regex"),o.textOperatorLabels.regex_not=l("does not match regex")),o.flagLabels={seen:l("Seen"),deleted:l("Deleted"),answered:l("Answered"),flagged:l("Flagged"),junk:l("Junk"),not_junk:l("Not Junk")}}a.$inject=["$scope","$window","$mdDialog","filter","mailboxes","labels"],angular.module("SOGo.PreferencesUI").controller("FiltersDialogController",a)}(),function(){"use strict";function a(a,b,c,d,e,f,g,h,i,j,k,m,n,o){function p(a,b){b.$valid&&(d("xs")&&e("left").close(),c.go("preferences."+a))}function q(a){j.confirm(l("Warning"),l("Save preferences and reload page now?"),{ok:l("Yes"),cancel:l("No")}).then(function(){G(a,{quick:!0}).then(function(){b.location.reload(!0)})})}function r(a){Q.preferences.defaults.SOGoCalendarCategoriesColors["New category"]="#aaa",Q.preferences.defaults.SOGoCalendarCategories.push("New category"),i("calendarCategory_"+(Q.preferences.defaults.SOGoCalendarCategories.length-1)),a.$setDirty()}function s(a,b){var c=Q.preferences.defaults.SOGoCalendarCategories[a];Q.preferences.defaults.SOGoCalendarCategories.splice(a,1),delete Q.preferences.defaults.SOGoCalendarCategoriesColors[c],b.$setDirty()}function t(a){Q.preferences.defaults.SOGoContactsCategories.push(""),i("contactCategory_"+(Q.preferences.defaults.SOGoContactsCategories.length-1)),a.$setDirty()}function u(a,b){Q.preferences.defaults.SOGoContactsCategories.splice(a,1),b.$setDirty()}function v(a,b){var c;Q.preferences.defaults.AuxiliaryMailAccounts.push({}),c=_.last(Q.preferences.defaults.AuxiliaryMailAccounts),angular.extend(c,{name:"",identities:[{fullName:"",email:""}],receipts:{receiptAction:"ignore",receiptNonRecipientAction:"ignore",receiptOutsideDomainAction:"ignore",receiptAnyAction:"ignore"}}),f.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account=new",targetEvent:a,locals:{defaults:Q.preferences.defaults,account:c,accountId:Q.preferences.defaults.AuxiliaryMailAccounts.length-1,mailCustomFromEnabled:window.mailCustomFromEnabled}}).then(function(){b.$setDirty()}).catch(function(){Q.preferences.defaults.AuxiliaryMailAccounts.pop()})}function w(a,b,c){var d=Q.preferences.defaults.AuxiliaryMailAccounts[b];f.show({controller:"AccountDialogController",controllerAs:"$AccountDialogController",templateUrl:"editAccount?account="+b,targetEvent:a,locals:{defaults:Q.preferences.defaults,account:d,accountId:b,mailCustomFromEnabled:window.mailCustomFromEnabled}}).then(function(){Q.preferences.defaults.AuxiliaryMailAccounts[b]=d,c.$setDirty()})}function x(a,b){Q.preferences.defaults.AuxiliaryMailAccounts.splice(a,1),b.$setDirty()}function y(a){var b="_$$"+guid();Q.preferences.defaults.SOGoMailLabelsColors[b]=["New label","#aaa"],i("mailLabel_"+(_.size(Q.preferences.defaults.SOGoMailLabelsColors)-1)),a.$setDirty()}function z(a,b){delete Q.preferences.defaults.SOGoMailLabelsColors[a],b.$setDirty()}function A(a,b){var c={match:"all"};f.show({templateUrl:"editFilter?filter=new",controller:"FiltersDialogController",controllerAs:"filterEditor",targetEvent:a,locals:{filter:c,mailboxes:R,labels:Q.preferences.defaults.SOGoMailLabelsColors}}).then(function(){Q.preferences.defaults.SOGoSieveFilters||(Q.preferences.defaults.SOGoSieveFilters=[]),Q.preferences.defaults.SOGoSieveFilters.push(c),b.$setDirty()})}function B(a,b,c){var d=angular.copy(Q.preferences.defaults.SOGoSieveFilters[b]);f.show({templateUrl:"editFilter?filter="+b,controller:"FiltersDialogController",controllerAs:"filterEditor",targetEvent:null,locals:{filter:d,mailboxes:R,labels:Q.preferences.defaults.SOGoMailLabelsColors}}).then(function(){Q.preferences.defaults.SOGoSieveFilters[b]=d,c.$setDirty()})}function C(a,b){Q.preferences.defaults.SOGoSieveFilters.splice(a,1),b.$setDirty()}function D(a){var b=[];angular.isDefined(Q.preferences.defaults.Vacation.autoReplyEmailAddresses)&&(b=Q.preferences.defaults.Vacation.autoReplyEmailAddresses.split(",")),Q.preferences.defaults.Vacation.autoReplyEmailAddresses=_.union(window.defaultEmailAddresses.split(","),b).join(","),a.$setDirty()}function E(a,b){return a.length0&&angular.isDefined(Q.preferences.defaults.Forward)&&Q.preferences.defaults.Forward.enabled&&angular.isDefined(Q.preferences.defaults.Forward.forwardAddress))for(h=Q.preferences.defaults.Forward.forwardAddress.split(","),i=b.defaultEmailAddresses.split(/, */),_.forEach(i,function(a){var b=a.split("@")[1];b&&k.push(b.toLowerCase())}),e=0;e=0&&2==b.forwardConstraints&&(j.alert(l("Error"),l("You are not allowed to forward your messages to an internal email address.")),f=!1);return f?Q.preferences.$save().then(function(a){d&&d.quick||(g.show(g.simple().content(l("Preferences saved")).position("bottom right").hideDelay(2e3)),c.$setPristine())}):a.reject()}function H(){return!!(Q.passwords.newPassword&&Q.passwords.newPassword.length>0&&Q.passwords.newPasswordConfirmation&&Q.passwords.newPasswordConfirmation.length&&Q.passwords.newPassword==Q.passwords.newPasswordConfirmation)}function I(){o.changePassword(Q.passwords.newPassword).then(function(){var a=f.alert({title:l("Password"),content:l("The password was changed successfully."),ok:l("OK")});f.show(a).finally(function(){a=void 0})},function(a){var b=f.alert({title:l("Password"),content:a,ok:l("OK")});f.show(b).finally(function(){b=void 0})})}function J(a){return _.filter(Q.timeZonesList,function(b){return b.toUpperCase().indexOf(a.toUpperCase())>=0})}function K(){var a=Q.preferences.defaults;a&&a.Vacation&&a.Vacation.enabled&&(L(),M())}function L(){var a;a=Q.preferences.defaults.Vacation,a.startDateEnabled&&(a.endDateEnabled&&a.startDate.getTime()>a.endDate.getTime()&&(a.startDate=new Date(a.endDate.getTime()),a.startDate.addDays(-1)),a.startDate.getTime()=T.getTime()),c}function O(a){var b=Q.preferences.defaults,c=!0;return b&&b.Vacation&&b.Vacation.enabled&&b.Vacation.endDateEnabled&&(c=(!b.Vacation.startDateEnabled||a.getTime()>b.Vacation.startDate.getTime())&&a.getTime()>=T.getTime()),c}var P,Q=this,R=[],S=new Date,T=S.beginOfDay().addDays(1);Q.preferences=n,Q.passwords={newPassword:null,newPasswordConfirmation:null},Q.go=p,Q.onLanguageChange=q,Q.addCalendarCategory=r,Q.removeCalendarCategory=s,Q.addContactCategory=t,Q.removeContactCategory=u,Q.addMailAccount=v,Q.editMailAccount=w,Q.removeMailAccount=x,Q.addMailLabel=y,Q.removeMailLabel=z,Q.addMailFilter=A,Q.editMailFilter=B,Q.removeMailFilter=C,Q.addDefaultEmailAddresses=D,Q.userFilter=E,Q.confirmChanges=F,Q.save=G,Q.canChangePassword=H,Q.changePassword=I,Q.timeZonesList=window.timeZonesList,Q.timeZonesListFilter=J,Q.timeZonesSearchText="",Q.sieveVariablesCapability=b.sieveCapabilities.indexOf("variables")>=0,Q.updateVacationDates=K,Q.toggleVacationStartDate=L,Q.toggleVacationEndDate=M,Q.validateVacationStartDate=N,Q.validateVacationEndDate=O,P=new m({id:0}),P.$getMailboxes().then(function(){for(var a=P.$flattenMailboxes({all:!0}),b=-1,c=a.length;++b 0)\n return false;\n\n return !mailCustomFromEnabled;\n }\n\n function cancel() {\n $mdDialog.cancel();\n }\n\n function save() {\n $mdDialog.hide();\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('AccountDialogController', AccountDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n FiltersDialogController.$inject = ['$scope', '$window', '$mdDialog', 'filter', 'mailboxes', 'labels'];\n function FiltersDialogController($scope, $window, $mdDialog, filter, mailboxes, labels) {\n var vm = this,\n sieveCapabilities = $window.sieveCapabilities,\n forwardEnabled = $window.forwardEnabled,\n vacationEnabled = $window.vacationEnabled;\n\n vm.filter = filter;\n vm.mailboxes = mailboxes;\n vm.labels = labels;\n vm.cancel = cancel;\n vm.hasRulesAndActions = hasRulesAndActions;\n vm.save = save;\n vm.addMailFilterRule = addMailFilterRule;\n vm.removeMailFilterRule = removeMailFilterRule;\n vm.addMailFilterAction = addMailFilterAction;\n vm.removeMailFilterAction = removeMailFilterAction;\n\n vm.fieldLabels = {\n \"subject\": l(\"Subject\"),\n \"from\": l(\"From\"),\n \"to\": l(\"To\"),\n \"cc\": l(\"Cc\"),\n \"to_or_cc\": l(\"To or Cc\"),\n \"size\": l(\"Size (Kb)\"),\n \"header\": l(\"Header\")\n };\n\n if (sieveCapabilities.indexOf(\"body\") > -1)\n vm.fieldLabels.body = l(\"Body\");\n\n vm.methodLabels = {\n \"discard\": l(\"Discard the message\"),\n \"keep\": l(\"Keep the message\"),\n \"stop\": l(\"Stop processing filter rules\")\n };\n\n if (forwardEnabled)\n vm.methodLabels.redirect = l(\"Forward the message to\");\n\n //if (vacationEnabled)\n // vm.methodLabels.vacation = l(\"Send a vacation message\");\n\n if (sieveCapabilities.indexOf(\"reject\") > -1)\n vm.methodLabels.reject = l(\"Send a reject message\");\n\n if (sieveCapabilities.indexOf(\"fileinto\") > -1)\n vm.methodLabels.fileinto = l(\"File the message in\");\n\n if (sieveCapabilities.indexOf(\"imapflags\") > -1 || sieveCapabilities.indexOf(\"imap4flags\") > -1)\n vm.methodLabels.addflag = l(\"Flag the message with\");\n\n vm.numberOperatorLabels = {\n \"under\": l(\"is under\"),\n \"over\": l(\"is over\")\n };\n\n vm.textOperatorLabels = {\n \"is\": l(\"is\"),\n \"is_not\": l(\"is not\"),\n \"contains\": l(\"contains\"),\n \"contains_not\": l(\"does not contain\"),\n \"matches\": l(\"matches\"),\n \"matches_not\": l(\"does not match\")\n };\n\n if (sieveCapabilities.indexOf(\"regex\") > -1) {\n vm.textOperatorLabels.regex = l(\"matches regex\");\n vm.textOperatorLabels.regex_not = l(\"does not match regex\");\n }\n\n vm.flagLabels = {\n \"seen\": l(\"Seen\"),\n \"deleted\": l(\"Deleted\"),\n \"answered\": l(\"Answered\"),\n \"flagged\": l(\"Flagged\"),\n \"junk\": l(\"Junk\"),\n \"not_junk\": l(\"Not Junk\")\n };\n \n function cancel() {\n $mdDialog.cancel();\n }\n\n function hasRulesAndActions() {\n return vm.filter.rules && vm.filter.rules.length > 0 &&\n vm.filter.actions && vm.filter.actions.length > 0;\n }\n \n function save(form) {\n $mdDialog.hide();\n }\n\n function addMailFilterRule(event) {\n if (!vm.filter.rules)\n vm.filter.rules = [];\n\n vm.filter.rules.push({ field: 'subject', operator: 'contains' });\n }\n \n function removeMailFilterRule(index) {\n vm.filter.rules.splice(index, 1);\n }\n \n function addMailFilterAction(event) {\n if (!vm.filter.actions)\n vm.filter.actions = [];\n\n vm.filter.actions.push({ method: 'discard' });\n }\n \n function removeMailFilterAction(index) {\n vm.filter.actions.splice(index, 1);\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('FiltersDialogController', FiltersDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n PreferencesController.$inject = ['$q', '$window', '$state', '$mdMedia', '$mdSidenav', '$mdDialog', '$mdToast', 'sgSettings', 'sgFocus', 'Dialog', 'User', 'Account', 'statePreferences', 'Authentication'];\n function PreferencesController($q, $window, $state, $mdMedia, $mdSidenav, $mdDialog, $mdToast, sgSettings, focus, Dialog, User, Account, statePreferences, Authentication) {\n var vm = this, account, mailboxes = [], today = new Date(), tomorrow = today.beginOfDay().addDays(1);\n\n vm.preferences = statePreferences;\n vm.passwords = { newPassword: null, newPasswordConfirmation: null };\n\n vm.go = go;\n vm.onLanguageChange = onLanguageChange;\n vm.addCalendarCategory = addCalendarCategory;\n vm.removeCalendarCategory = removeCalendarCategory;\n vm.addContactCategory = addContactCategory;\n vm.removeContactCategory = removeContactCategory;\n vm.addMailAccount = addMailAccount;\n vm.editMailAccount = editMailAccount;\n vm.removeMailAccount = removeMailAccount;\n vm.addMailLabel = addMailLabel;\n vm.removeMailLabel = removeMailLabel;\n vm.addMailFilter = addMailFilter;\n vm.editMailFilter = editMailFilter;\n vm.removeMailFilter = removeMailFilter;\n vm.addDefaultEmailAddresses = addDefaultEmailAddresses;\n vm.userFilter = userFilter;\n vm.confirmChanges = confirmChanges;\n vm.save = save;\n vm.canChangePassword = canChangePassword;\n vm.changePassword = changePassword;\n vm.timeZonesList = window.timeZonesList;\n vm.timeZonesListFilter = timeZonesListFilter;\n vm.timeZonesSearchText = '';\n vm.sieveVariablesCapability = ($window.sieveCapabilities.indexOf('variables') >= 0);\n vm.updateVacationDates = updateVacationDates;\n vm.toggleVacationStartDate = toggleVacationStartDate;\n vm.toggleVacationEndDate = toggleVacationEndDate;\n vm.validateVacationStartDate = validateVacationStartDate;\n vm.validateVacationEndDate = validateVacationEndDate;\n\n\n // Fetch a flatten version of the mailboxes list of the main account (0)\n // This list will be forwarded to the Sieve filter controller\n account = new Account({ id: 0 });\n account.$getMailboxes().then(function() {\n var allMailboxes = account.$flattenMailboxes({all: true}),\n index = -1,\n length = allMailboxes.length;\n while (++index < length) {\n mailboxes.push(allMailboxes[index]);\n }\n });\n\n // Set alternate avatar in User service\n statePreferences.ready().then(function() {\n if (statePreferences.defaults.SOGoAlternateAvatar)\n User.$alternateAvatar = statePreferences.defaults.SOGoAlternateAvatar;\n updateVacationDates();\n });\n\n function go(module, form) {\n if (form.$valid) {\n // Close sidenav on small devices\n if ($mdMedia('xs'))\n $mdSidenav('left').close();\n $state.go('preferences.' + module);\n }\n }\n\n function onLanguageChange(form) {\n Dialog.confirm(l('Warning'),\n l('Save preferences and reload page now?'),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n save(form, { quick: true }).then(function() {\n $window.location.reload(true);\n });\n });\n }\n\n function addCalendarCategory(form) {\n vm.preferences.defaults.SOGoCalendarCategoriesColors[\"New category\"] = \"#aaa\";\n vm.preferences.defaults.SOGoCalendarCategories.push(\"New category\");\n focus('calendarCategory_' + (vm.preferences.defaults.SOGoCalendarCategories.length - 1));\n form.$setDirty();\n }\n\n function removeCalendarCategory(index, form) {\n var key = vm.preferences.defaults.SOGoCalendarCategories[index];\n vm.preferences.defaults.SOGoCalendarCategories.splice(index, 1);\n delete vm.preferences.defaults.SOGoCalendarCategoriesColors[key];\n form.$setDirty();\n }\n\n function addContactCategory(form) {\n vm.preferences.defaults.SOGoContactsCategories.push(\"\");\n focus('contactCategory_' + (vm.preferences.defaults.SOGoContactsCategories.length - 1));\n form.$setDirty();\n }\n\n function removeContactCategory(index, form) {\n vm.preferences.defaults.SOGoContactsCategories.splice(index, 1);\n form.$setDirty();\n }\n\n function addMailAccount(ev, form) {\n var account;\n\n vm.preferences.defaults.AuxiliaryMailAccounts.push({});\n\n account = _.last(vm.preferences.defaults.AuxiliaryMailAccounts);\n angular.extend(account,\n {\n name: \"\",\n identities: [\n {\n fullName: \"\",\n email: \"\"\n }\n ],\n receipts: {\n receiptAction: \"ignore\",\n receiptNonRecipientAction: \"ignore\",\n receiptOutsideDomainAction: \"ignore\",\n receiptAnyAction: \"ignore\"\n }\n });\n\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=new',\n targetEvent: ev,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: (vm.preferences.defaults.AuxiliaryMailAccounts.length-1),\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n }).then(function() {\n form.$setDirty();\n }).catch(function() {\n vm.preferences.defaults.AuxiliaryMailAccounts.pop();\n });\n }\n\n function editMailAccount(event, index, form) {\n var account = vm.preferences.defaults.AuxiliaryMailAccounts[index];\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=' + index,\n targetEvent: event,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: index,\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n }).then(function() {\n vm.preferences.defaults.AuxiliaryMailAccounts[index] = account;\n form.$setDirty();\n });\n }\n\n function removeMailAccount(index, form) {\n vm.preferences.defaults.AuxiliaryMailAccounts.splice(index, 1);\n form.$setDirty();\n }\n \n function addMailLabel(form) {\n // See $omit() in the Preferences services for real key generation\n var key = '_$$' + guid();\n vm.preferences.defaults.SOGoMailLabelsColors[key] = [\"New label\", \"#aaa\"];\n focus('mailLabel_' + (_.size(vm.preferences.defaults.SOGoMailLabelsColors) - 1));\n form.$setDirty();\n }\n\n function removeMailLabel(key, form) {\n delete vm.preferences.defaults.SOGoMailLabelsColors[key];\n form.$setDirty();\n }\n\n function addMailFilter(ev, form) {\n var filter = { match: 'all' };\n\n $mdDialog.show({\n templateUrl: 'editFilter?filter=new',\n controller: 'FiltersDialogController',\n controllerAs: 'filterEditor',\n targetEvent: ev,\n locals: {\n filter: filter,\n mailboxes: mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n }).then(function() {\n if (!vm.preferences.defaults.SOGoSieveFilters)\n vm.preferences.defaults.SOGoSieveFilters = [];\n vm.preferences.defaults.SOGoSieveFilters.push(filter);\n form.$setDirty();\n });\n }\n \n function editMailFilter(ev, index, form) {\n var filter = angular.copy(vm.preferences.defaults.SOGoSieveFilters[index]);\n \n $mdDialog.show({\n templateUrl: 'editFilter?filter=' + index,\n controller: 'FiltersDialogController',\n controllerAs: 'filterEditor',\n targetEvent: null,\n locals: {\n filter: filter,\n mailboxes: mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n }).then(function() {\n vm.preferences.defaults.SOGoSieveFilters[index] = filter;\n form.$setDirty();\n });\n }\n\n function removeMailFilter(index, form) {\n vm.preferences.defaults.SOGoSieveFilters.splice(index, 1);\n form.$setDirty();\n }\n\n function addDefaultEmailAddresses(form) {\n var v = [];\n\n if (angular.isDefined(vm.preferences.defaults.Vacation.autoReplyEmailAddresses)) {\n v = vm.preferences.defaults.Vacation.autoReplyEmailAddresses.split(',');\n }\n\n vm.preferences.defaults.Vacation.autoReplyEmailAddresses = (_.union(window.defaultEmailAddresses.split(','), v)).join(',');\n form.$setDirty();\n }\n\n function userFilter(search, excludedUsers) {\n if (search.length < sgSettings.minimumSearchLength())\n return [];\n\n return User.$filter(search, excludedUsers).then(function(users) {\n // Set users avatars\n _.forEach(users, function(user) {\n if (!user.$$image) {\n if (user.image)\n user.$$image = user.image;\n else\n vm.preferences.avatar(user.c_email, 32, {no_404: true}).then(function(url) {\n user.$$image = url;\n });\n }\n });\n return users;\n });\n }\n\n function confirmChanges($event, form) {\n var target;\n\n if (form.$dirty) {\n // Stop default action\n $event.preventDefault();\n $event.stopPropagation();\n\n // Find target link\n target = $event.target;\n while (target.tagName != 'A')\n target = target.parentNode;\n\n Dialog.confirm(l('Unsaved Changes'),\n l('Do you want to save your changes made to the configuration?'),\n { ok: l('Save'), cancel: l('Don\\'t Save') })\n .then(function() {\n // Save & follow link\n save(form, { quick: true }).then(function() {\n $window.location = target.href;\n });\n }, function() {\n // Don't save & follow link\n $window.location = target.href;\n });\n }\n }\n\n function save(form, options) {\n var i, sendForm, addresses, defaultAddresses, domains, domain;\n\n sendForm = true;\n domains = [];\n\n // We do some sanity checks\n if ($window.forwardConstraints > 0 &&\n angular.isDefined(vm.preferences.defaults.Forward) &&\n vm.preferences.defaults.Forward.enabled &&\n angular.isDefined(vm.preferences.defaults.Forward.forwardAddress)) {\n\n addresses = vm.preferences.defaults.Forward.forwardAddress.split(\",\");\n\n // We first extract the list of 'known domains' to SOGo\n defaultAddresses = $window.defaultEmailAddresses.split(/, */);\n\n _.forEach(defaultAddresses, function(adr) {\n var domain = adr.split(\"@\")[1];\n if (domain) {\n domains.push(domain.toLowerCase());\n }\n });\n\n // We check if we're allowed or not to forward based on the domain defaults\n for (i = 0; i < addresses.length && sendForm; i++) {\n domain = addresses[i].split(\"@\")[1].toLowerCase();\n if (domains.indexOf(domain) < 0 && $window.forwardConstraints == 1) {\n Dialog.alert(l('Error'), l(\"You are not allowed to forward your messages to an external email address.\"));\n sendForm = false;\n }\n else if (domains.indexOf(domain) >= 0 && $window.forwardConstraints == 2) {\n Dialog.alert(l('Error'), l(\"You are not allowed to forward your messages to an internal email address.\"));\n sendForm = false;\n }\n }\n }\n\n if (sendForm)\n return vm.preferences.$save().then(function(data) {\n if (!options || !options.quick) {\n $mdToast.show(\n $mdToast.simple()\n .content(l('Preferences saved'))\n .position('bottom right')\n .hideDelay(2000));\n form.$setPristine();\n }\n });\n\n return $q.reject();\n }\n\n function canChangePassword() {\n if (vm.passwords.newPassword && vm.passwords.newPassword.length > 0 &&\n vm.passwords.newPasswordConfirmation && vm.passwords.newPasswordConfirmation.length &&\n vm.passwords.newPassword == vm.passwords.newPasswordConfirmation)\n return true;\n\n return false;\n }\n \n function changePassword() {\n Authentication.changePassword(vm.passwords.newPassword).then(function() {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: l('The password was changed successfully.'),\n ok: l('OK')\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n }, function(msg) {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: msg,\n ok: l('OK')\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n });\n }\n\n function timeZonesListFilter(filter) {\n return _.filter(vm.timeZonesList, function(value) {\n return value.toUpperCase().indexOf(filter.toUpperCase()) >= 0;\n });\n }\n\n function updateVacationDates() {\n var d = vm.preferences.defaults;\n\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n toggleVacationStartDate();\n toggleVacationEndDate();\n }\n }\n\n function toggleVacationStartDate() {\n var v;\n\n v = vm.preferences.defaults.Vacation;\n\n if (v.startDateEnabled) {\n // Enabling the start date\n if (v.endDateEnabled && v.startDate.getTime() > v.endDate.getTime()) {\n v.startDate = new Date(v.endDate.getTime());\n v.startDate.addDays(-1);\n }\n if (v.startDate.getTime() < tomorrow.getTime()) {\n v.startDate = new Date(tomorrow.getTime());\n }\n }\n }\n\n function toggleVacationEndDate() {\n var v;\n\n v = vm.preferences.defaults.Vacation;\n\n if (v.endDateEnabled) {\n // Enabling the end date\n if (v.startDateEnabled && v.endDate.getTime() < v.startDate.getTime()) {\n v.endDate = new Date(v.startDate.getTime());\n v.endDate.addDays(1);\n }\n else if (v.endDate.getTime() < tomorrow.getTime()) {\n v.endDate = new Date(tomorrow.getTime());\n }\n }\n }\n\n function validateVacationStartDate(date) {\n var d = vm.preferences.defaults, r = true;\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n if (d.Vacation.startDateEnabled) {\n r = (!d.Vacation.endDateEnabled ||\n date.getTime() < d.Vacation.endDate.getTime()) &&\n date.getTime() >= tomorrow.getTime();\n }\n }\n\n return r;\n }\n\n function validateVacationEndDate(date) {\n var d = vm.preferences.defaults, r = true;\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n if (d.Vacation.endDateEnabled) {\n r = (!d.Vacation.startDateEnabled ||\n date.getTime() > d.Vacation.startDate.getTime()) &&\n date.getTime() >= tomorrow.getTime();\n }\n }\n\n return r;\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('PreferencesController', PreferencesController);\n\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","resolve","statePreferences","url","module","otherwise","Preferences","runBlock","$rootScope","$on","event","current","previous","rejection","console","error","angular","config","run","$inject","AccountDialogController","$mdDialog","defaults","account","accountId","mailCustomFromEnabled","customFromIsReadonly","cancel","save","hide","vm","this","defaultPort","encryption","FiltersDialogController","$scope","$window","filter","mailboxes","labels","hasRulesAndActions","rules","length","actions","form","addMailFilterRule","push","field","operator","removeMailFilterRule","index","splice","addMailFilterAction","method","removeMailFilterAction","sieveCapabilities","forwardEnabled","sieveFolderPathAttribute","vacationEnabled","sieveFolderEncoding","fieldLabels","subject","l","from","to","cc","to_or_cc","size","header","indexOf","body","methodLabels","discard","keep","stop","redirect","_","map","mailbox","level","name","path","reject","fileinto","addflag","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","flagLabels","seen","deleted","answered","flagged","junk","not_junk","PreferencesController","$q","$state","$mdMedia","$mdSidenav","$mdToast","sgSettings","focus","Dialog","User","Account","Authentication","go","$valid","close","onLanguageChange","confirm","ok","then","quick","location","reload","addCalendarCategory","SOGoCalendarCategoriesColors","SOGoCalendarCategories","$setDirty","removeCalendarCategory","key","addContactCategory","SOGoContactsCategories","removeContactCategory","addMailAccount","ev","AuxiliaryMailAccounts","last","extend","identities","fullName","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","window","catch","pop","editMailAccount","removeMailAccount","addMailLabel","guid","SOGoMailLabelsColors","removeMailLabel","addMailFilter","match","SOGoSieveFilters","editMailFilter","copy","removeMailFilter","addDefaultEmailAddresses","v","isDefined","Vacation","autoReplyEmailAddresses","split","union","defaultEmailAddresses","join","userFilter","search","excludedUsers","minimumSearchLength","$filter","users","forEach","user","$$image","image","avatar","c_email","no_404","confirmChanges","$event","target","$dirty","preventDefault","stopPropagation","tagName","parentNode","href","options","i","sendForm","addresses","defaultAddresses","domains","domain","forwardConstraints","Forward","enabled","forwardAddress","adr","toLowerCase","alert","$save","data","simple","content","position","hideDelay","$setPristine","canChangePassword","passwords","newPassword","newPasswordConfirmation","changePassword","title","finally","undefined","msg","timeZonesListFilter","timeZonesList","value","toUpperCase","updateVacationDates","d","toggleVacationStartDate","toggleVacationEndDate","startDateEnabled","endDateEnabled","startDate","getTime","endDate","Date","addDays","tomorrow","validateVacationStartDate","date","r","validateVacationEndDate","today","beginOfDay","timeZonesSearchText","sieveVariablesCapability","id","$getMailboxes","allMailboxes","$flattenMailboxes","all","ready","SOGoAlternateAvatar","$alternateAvatar"],"mappings":"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","file":"Preferences.js","sourcesContent":["/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n angular.module('SOGo.PreferencesUI', ['ui.router', 'ck', 'SOGo.Common', 'SOGo.MailerUI', 'SOGo.ContactsUI', 'SOGo.Authentication', 'as.sortable'])\n .config(configure)\n .run(runBlock);\n\n /**\n * @ngInject\n */\n configure.$inject = ['$stateProvider', '$urlRouterProvider'];\n function configure($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('preferences', {\n abstract: true,\n views: {\n preferences: {\n templateUrl: 'preferences.html',\n controller: 'PreferencesController',\n controllerAs: 'app'\n }\n },\n resolve: {\n statePreferences: statePreferences\n }\n })\n .state('preferences.general', {\n url: '/general',\n views: {\n module: {\n templateUrl: 'generalPreferences.html'\n }\n }\n })\n .state('preferences.calendars', {\n url: '/calendars',\n views: {\n module: {\n templateUrl: 'calendarsPreferences.html'\n }\n }\n })\n .state('preferences.addressbooks', {\n url: '/addressbooks',\n views: {\n module: {\n templateUrl: 'addressbooksPreferences.html'\n }\n }\n })\n .state('preferences.mailer', {\n url: '/mailer',\n views: {\n module: {\n templateUrl: 'mailerPreferences.html'\n }\n }\n });\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/general');\n }\n\n /**\n * @ngInject\n */\n statePreferences.$inject = ['Preferences'];\n function statePreferences(Preferences) {\n return Preferences;\n }\n\n /**\n * @ngInject\n */\n runBlock.$inject = ['$rootScope'];\n function runBlock($rootScope) {\n $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {\n console.error(event, current, previous, rejection);\n });\n }\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n AccountDialogController.$inject = ['$mdDialog', 'defaults', 'account', 'accountId', 'mailCustomFromEnabled'];\n function AccountDialogController($mdDialog, defaults, account, accountId, mailCustomFromEnabled) {\n var vm = this;\n\n vm.defaultPort = 143;\n vm.defaults = defaults;\n vm.account = account;\n vm.accountId = accountId;\n vm.customFromIsReadonly = customFromIsReadonly;\n vm.cancel = cancel;\n vm.save = save;\n\n if (!vm.account.encryption)\n vm.account.encryption = \"none\";\n else if (vm.account.encryption == \"ssl\")\n vm.defaultPort = 993;\n\n function customFromIsReadonly() {\n if (accountId > 0)\n return false;\n\n return !mailCustomFromEnabled;\n }\n\n function cancel() {\n $mdDialog.cancel();\n }\n\n function save() {\n $mdDialog.hide();\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('AccountDialogController', AccountDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n\n /**\n * @ngInject\n */\n FiltersDialogController.$inject = ['$scope', '$window', '$mdDialog', 'filter', 'mailboxes', 'labels'];\n function FiltersDialogController($scope, $window, $mdDialog, filter, mailboxes, labels) {\n var vm = this,\n sieveCapabilities = $window.sieveCapabilities,\n forwardEnabled = $window.forwardEnabled,\n vacationEnabled = $window.vacationEnabled,\n sieveFolderPathAttribute = ($window.sieveFolderEncoding == \"UTF-8\") ? \"name\" : \"path\";\n\n vm.filter = filter;\n vm.mailboxes = mailboxes;\n vm.labels = labels;\n vm.cancel = cancel;\n vm.hasRulesAndActions = hasRulesAndActions;\n vm.save = save;\n vm.addMailFilterRule = addMailFilterRule;\n vm.removeMailFilterRule = removeMailFilterRule;\n vm.addMailFilterAction = addMailFilterAction;\n vm.removeMailFilterAction = removeMailFilterAction;\n\n vm.fieldLabels = {\n \"subject\": l(\"Subject\"),\n \"from\": l(\"From\"),\n \"to\": l(\"To\"),\n \"cc\": l(\"Cc\"),\n \"to_or_cc\": l(\"To or Cc\"),\n \"size\": l(\"Size (Kb)\"),\n \"header\": l(\"Header\")\n };\n\n if (sieveCapabilities.indexOf(\"body\") > -1)\n vm.fieldLabels.body = l(\"Body\");\n\n vm.methodLabels = {\n \"discard\": l(\"Discard the message\"),\n \"keep\": l(\"Keep the message\"),\n \"stop\": l(\"Stop processing filter rules\")\n };\n\n if (forwardEnabled)\n vm.methodLabels.redirect = l(\"Forward the message to\");\n\n //if (vacationEnabled)\n // vm.methodLabels.vacation = l(\"Send a vacation message\");\n\n vm.mailboxes = _.map(mailboxes, function(mailbox) {\n return { level: mailbox.level,\n name: mailbox.name,\n path: mailbox[sieveFolderPathAttribute] };\n });\n\n if (sieveCapabilities.indexOf(\"reject\") > -1)\n vm.methodLabels.reject = l(\"Send a reject message\");\n\n if (sieveCapabilities.indexOf(\"fileinto\") > -1)\n vm.methodLabels.fileinto = l(\"File the message in\");\n\n if (sieveCapabilities.indexOf(\"imapflags\") > -1 || sieveCapabilities.indexOf(\"imap4flags\") > -1)\n vm.methodLabels.addflag = l(\"Flag the message with\");\n\n vm.numberOperatorLabels = {\n \"under\": l(\"is under\"),\n \"over\": l(\"is over\")\n };\n\n vm.textOperatorLabels = {\n \"is\": l(\"is\"),\n \"is_not\": l(\"is not\"),\n \"contains\": l(\"contains\"),\n \"contains_not\": l(\"does not contain\"),\n \"matches\": l(\"matches\"),\n \"matches_not\": l(\"does not match\")\n };\n\n if (sieveCapabilities.indexOf(\"regex\") > -1) {\n vm.textOperatorLabels.regex = l(\"matches regex\");\n vm.textOperatorLabels.regex_not = l(\"does not match regex\");\n }\n\n vm.flagLabels = {\n \"seen\": l(\"Seen\"),\n \"deleted\": l(\"Deleted\"),\n \"answered\": l(\"Answered\"),\n \"flagged\": l(\"Flagged\"),\n \"junk\": l(\"Junk\"),\n \"not_junk\": l(\"Not Junk\")\n };\n \n function cancel() {\n $mdDialog.cancel();\n }\n\n function hasRulesAndActions() {\n return vm.filter.rules && vm.filter.rules.length > 0 &&\n vm.filter.actions && vm.filter.actions.length > 0;\n }\n \n function save(form) {\n $mdDialog.hide();\n }\n\n function addMailFilterRule(event) {\n if (!vm.filter.rules)\n vm.filter.rules = [];\n\n vm.filter.rules.push({ field: 'subject', operator: 'contains' });\n }\n \n function removeMailFilterRule(index) {\n vm.filter.rules.splice(index, 1);\n }\n \n function addMailFilterAction(event) {\n if (!vm.filter.actions)\n vm.filter.actions = [];\n\n vm.filter.actions.push({ method: 'discard' });\n }\n \n function removeMailFilterAction(index) {\n vm.filter.actions.splice(index, 1);\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('FiltersDialogController', FiltersDialogController);\n\n})();\n","/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* JavaScript for SOGoPreferences */\n\n(function() {\n 'use strict';\n \n /**\n * @ngInject\n */\n PreferencesController.$inject = ['$q', '$window', '$state', '$mdMedia', '$mdSidenav', '$mdDialog', '$mdToast', 'sgSettings', 'sgFocus', 'Dialog', 'User', 'Account', 'statePreferences', 'Authentication'];\n function PreferencesController($q, $window, $state, $mdMedia, $mdSidenav, $mdDialog, $mdToast, sgSettings, focus, Dialog, User, Account, statePreferences, Authentication) {\n var vm = this, account, mailboxes = [], today = new Date(), tomorrow = today.beginOfDay().addDays(1);\n\n vm.preferences = statePreferences;\n vm.passwords = { newPassword: null, newPasswordConfirmation: null };\n\n vm.go = go;\n vm.onLanguageChange = onLanguageChange;\n vm.addCalendarCategory = addCalendarCategory;\n vm.removeCalendarCategory = removeCalendarCategory;\n vm.addContactCategory = addContactCategory;\n vm.removeContactCategory = removeContactCategory;\n vm.addMailAccount = addMailAccount;\n vm.editMailAccount = editMailAccount;\n vm.removeMailAccount = removeMailAccount;\n vm.addMailLabel = addMailLabel;\n vm.removeMailLabel = removeMailLabel;\n vm.addMailFilter = addMailFilter;\n vm.editMailFilter = editMailFilter;\n vm.removeMailFilter = removeMailFilter;\n vm.addDefaultEmailAddresses = addDefaultEmailAddresses;\n vm.userFilter = userFilter;\n vm.confirmChanges = confirmChanges;\n vm.save = save;\n vm.canChangePassword = canChangePassword;\n vm.changePassword = changePassword;\n vm.timeZonesList = window.timeZonesList;\n vm.timeZonesListFilter = timeZonesListFilter;\n vm.timeZonesSearchText = '';\n vm.sieveVariablesCapability = ($window.sieveCapabilities.indexOf('variables') >= 0);\n vm.updateVacationDates = updateVacationDates;\n vm.toggleVacationStartDate = toggleVacationStartDate;\n vm.toggleVacationEndDate = toggleVacationEndDate;\n vm.validateVacationStartDate = validateVacationStartDate;\n vm.validateVacationEndDate = validateVacationEndDate;\n\n\n // Fetch a flatten version of the mailboxes list of the main account (0)\n // This list will be forwarded to the Sieve filter controller\n account = new Account({ id: 0 });\n account.$getMailboxes().then(function() {\n var allMailboxes = account.$flattenMailboxes({all: true}),\n index = -1,\n length = allMailboxes.length;\n while (++index < length) {\n mailboxes.push(allMailboxes[index]);\n }\n });\n\n // Set alternate avatar in User service\n statePreferences.ready().then(function() {\n if (statePreferences.defaults.SOGoAlternateAvatar)\n User.$alternateAvatar = statePreferences.defaults.SOGoAlternateAvatar;\n updateVacationDates();\n });\n\n function go(module, form) {\n if (form.$valid) {\n // Close sidenav on small devices\n if ($mdMedia('xs'))\n $mdSidenav('left').close();\n $state.go('preferences.' + module);\n }\n }\n\n function onLanguageChange(form) {\n Dialog.confirm(l('Warning'),\n l('Save preferences and reload page now?'),\n {ok: l('Yes'), cancel: l('No')})\n .then(function() {\n save(form, { quick: true }).then(function() {\n $window.location.reload(true);\n });\n });\n }\n\n function addCalendarCategory(form) {\n vm.preferences.defaults.SOGoCalendarCategoriesColors[\"New category\"] = \"#aaa\";\n vm.preferences.defaults.SOGoCalendarCategories.push(\"New category\");\n focus('calendarCategory_' + (vm.preferences.defaults.SOGoCalendarCategories.length - 1));\n form.$setDirty();\n }\n\n function removeCalendarCategory(index, form) {\n var key = vm.preferences.defaults.SOGoCalendarCategories[index];\n vm.preferences.defaults.SOGoCalendarCategories.splice(index, 1);\n delete vm.preferences.defaults.SOGoCalendarCategoriesColors[key];\n form.$setDirty();\n }\n\n function addContactCategory(form) {\n vm.preferences.defaults.SOGoContactsCategories.push(\"\");\n focus('contactCategory_' + (vm.preferences.defaults.SOGoContactsCategories.length - 1));\n form.$setDirty();\n }\n\n function removeContactCategory(index, form) {\n vm.preferences.defaults.SOGoContactsCategories.splice(index, 1);\n form.$setDirty();\n }\n\n function addMailAccount(ev, form) {\n var account;\n\n vm.preferences.defaults.AuxiliaryMailAccounts.push({});\n\n account = _.last(vm.preferences.defaults.AuxiliaryMailAccounts);\n angular.extend(account,\n {\n name: \"\",\n identities: [\n {\n fullName: \"\",\n email: \"\"\n }\n ],\n receipts: {\n receiptAction: \"ignore\",\n receiptNonRecipientAction: \"ignore\",\n receiptOutsideDomainAction: \"ignore\",\n receiptAnyAction: \"ignore\"\n }\n });\n\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=new',\n targetEvent: ev,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: (vm.preferences.defaults.AuxiliaryMailAccounts.length-1),\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n }).then(function() {\n form.$setDirty();\n }).catch(function() {\n vm.preferences.defaults.AuxiliaryMailAccounts.pop();\n });\n }\n\n function editMailAccount(event, index, form) {\n var account = vm.preferences.defaults.AuxiliaryMailAccounts[index];\n $mdDialog.show({\n controller: 'AccountDialogController',\n controllerAs: '$AccountDialogController',\n templateUrl: 'editAccount?account=' + index,\n targetEvent: event,\n locals: {\n defaults: vm.preferences.defaults,\n account: account,\n accountId: index,\n mailCustomFromEnabled: window.mailCustomFromEnabled\n }\n }).then(function() {\n vm.preferences.defaults.AuxiliaryMailAccounts[index] = account;\n form.$setDirty();\n });\n }\n\n function removeMailAccount(index, form) {\n vm.preferences.defaults.AuxiliaryMailAccounts.splice(index, 1);\n form.$setDirty();\n }\n \n function addMailLabel(form) {\n // See $omit() in the Preferences services for real key generation\n var key = '_$$' + guid();\n vm.preferences.defaults.SOGoMailLabelsColors[key] = [\"New label\", \"#aaa\"];\n focus('mailLabel_' + (_.size(vm.preferences.defaults.SOGoMailLabelsColors) - 1));\n form.$setDirty();\n }\n\n function removeMailLabel(key, form) {\n delete vm.preferences.defaults.SOGoMailLabelsColors[key];\n form.$setDirty();\n }\n\n function addMailFilter(ev, form) {\n var filter = { match: 'all' };\n\n $mdDialog.show({\n templateUrl: 'editFilter?filter=new',\n controller: 'FiltersDialogController',\n controllerAs: 'filterEditor',\n targetEvent: ev,\n locals: {\n filter: filter,\n mailboxes: mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n }).then(function() {\n if (!vm.preferences.defaults.SOGoSieveFilters)\n vm.preferences.defaults.SOGoSieveFilters = [];\n vm.preferences.defaults.SOGoSieveFilters.push(filter);\n form.$setDirty();\n });\n }\n \n function editMailFilter(ev, index, form) {\n var filter = angular.copy(vm.preferences.defaults.SOGoSieveFilters[index]);\n \n $mdDialog.show({\n templateUrl: 'editFilter?filter=' + index,\n controller: 'FiltersDialogController',\n controllerAs: 'filterEditor',\n targetEvent: null,\n locals: {\n filter: filter,\n mailboxes: mailboxes,\n labels: vm.preferences.defaults.SOGoMailLabelsColors\n }\n }).then(function() {\n vm.preferences.defaults.SOGoSieveFilters[index] = filter;\n form.$setDirty();\n });\n }\n\n function removeMailFilter(index, form) {\n vm.preferences.defaults.SOGoSieveFilters.splice(index, 1);\n form.$setDirty();\n }\n\n function addDefaultEmailAddresses(form) {\n var v = [];\n\n if (angular.isDefined(vm.preferences.defaults.Vacation.autoReplyEmailAddresses)) {\n v = vm.preferences.defaults.Vacation.autoReplyEmailAddresses.split(',');\n }\n\n vm.preferences.defaults.Vacation.autoReplyEmailAddresses = (_.union(window.defaultEmailAddresses.split(','), v)).join(',');\n form.$setDirty();\n }\n\n function userFilter(search, excludedUsers) {\n if (search.length < sgSettings.minimumSearchLength())\n return [];\n\n return User.$filter(search, excludedUsers).then(function(users) {\n // Set users avatars\n _.forEach(users, function(user) {\n if (!user.$$image) {\n if (user.image)\n user.$$image = user.image;\n else\n vm.preferences.avatar(user.c_email, 32, {no_404: true}).then(function(url) {\n user.$$image = url;\n });\n }\n });\n return users;\n });\n }\n\n function confirmChanges($event, form) {\n var target;\n\n if (form.$dirty) {\n // Stop default action\n $event.preventDefault();\n $event.stopPropagation();\n\n // Find target link\n target = $event.target;\n while (target.tagName != 'A')\n target = target.parentNode;\n\n Dialog.confirm(l('Unsaved Changes'),\n l('Do you want to save your changes made to the configuration?'),\n { ok: l('Save'), cancel: l('Don\\'t Save') })\n .then(function() {\n // Save & follow link\n save(form, { quick: true }).then(function() {\n $window.location = target.href;\n });\n }, function() {\n // Don't save & follow link\n $window.location = target.href;\n });\n }\n }\n\n function save(form, options) {\n var i, sendForm, addresses, defaultAddresses, domains, domain;\n\n sendForm = true;\n domains = [];\n\n // We do some sanity checks\n if ($window.forwardConstraints > 0 &&\n angular.isDefined(vm.preferences.defaults.Forward) &&\n vm.preferences.defaults.Forward.enabled &&\n angular.isDefined(vm.preferences.defaults.Forward.forwardAddress)) {\n\n addresses = vm.preferences.defaults.Forward.forwardAddress.split(\",\");\n\n // We first extract the list of 'known domains' to SOGo\n defaultAddresses = $window.defaultEmailAddresses.split(/, */);\n\n _.forEach(defaultAddresses, function(adr) {\n var domain = adr.split(\"@\")[1];\n if (domain) {\n domains.push(domain.toLowerCase());\n }\n });\n\n // We check if we're allowed or not to forward based on the domain defaults\n for (i = 0; i < addresses.length && sendForm; i++) {\n domain = addresses[i].split(\"@\")[1].toLowerCase();\n if (domains.indexOf(domain) < 0 && $window.forwardConstraints == 1) {\n Dialog.alert(l('Error'), l(\"You are not allowed to forward your messages to an external email address.\"));\n sendForm = false;\n }\n else if (domains.indexOf(domain) >= 0 && $window.forwardConstraints == 2) {\n Dialog.alert(l('Error'), l(\"You are not allowed to forward your messages to an internal email address.\"));\n sendForm = false;\n }\n }\n }\n\n if (sendForm)\n return vm.preferences.$save().then(function(data) {\n if (!options || !options.quick) {\n $mdToast.show(\n $mdToast.simple()\n .content(l('Preferences saved'))\n .position('bottom right')\n .hideDelay(2000));\n form.$setPristine();\n }\n });\n\n return $q.reject();\n }\n\n function canChangePassword() {\n if (vm.passwords.newPassword && vm.passwords.newPassword.length > 0 &&\n vm.passwords.newPasswordConfirmation && vm.passwords.newPasswordConfirmation.length &&\n vm.passwords.newPassword == vm.passwords.newPasswordConfirmation)\n return true;\n\n return false;\n }\n \n function changePassword() {\n Authentication.changePassword(vm.passwords.newPassword).then(function() {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: l('The password was changed successfully.'),\n ok: l('OK')\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n }, function(msg) {\n var alert = $mdDialog.alert({\n title: l('Password'),\n content: msg,\n ok: l('OK')\n });\n $mdDialog.show( alert )\n .finally(function() {\n alert = undefined;\n });\n });\n }\n\n function timeZonesListFilter(filter) {\n return _.filter(vm.timeZonesList, function(value) {\n return value.toUpperCase().indexOf(filter.toUpperCase()) >= 0;\n });\n }\n\n function updateVacationDates() {\n var d = vm.preferences.defaults;\n\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n toggleVacationStartDate();\n toggleVacationEndDate();\n }\n }\n\n function toggleVacationStartDate() {\n var v;\n\n v = vm.preferences.defaults.Vacation;\n\n if (v.startDateEnabled) {\n // Enabling the start date\n if (v.endDateEnabled && v.startDate.getTime() > v.endDate.getTime()) {\n v.startDate = new Date(v.endDate.getTime());\n v.startDate.addDays(-1);\n }\n if (v.startDate.getTime() < tomorrow.getTime()) {\n v.startDate = new Date(tomorrow.getTime());\n }\n }\n }\n\n function toggleVacationEndDate() {\n var v;\n\n v = vm.preferences.defaults.Vacation;\n\n if (v.endDateEnabled) {\n // Enabling the end date\n if (v.startDateEnabled && v.endDate.getTime() < v.startDate.getTime()) {\n v.endDate = new Date(v.startDate.getTime());\n v.endDate.addDays(1);\n }\n else if (v.endDate.getTime() < tomorrow.getTime()) {\n v.endDate = new Date(tomorrow.getTime());\n }\n }\n }\n\n function validateVacationStartDate(date) {\n var d = vm.preferences.defaults, r = true;\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n if (d.Vacation.startDateEnabled) {\n r = (!d.Vacation.endDateEnabled ||\n date.getTime() < d.Vacation.endDate.getTime()) &&\n date.getTime() >= tomorrow.getTime();\n }\n }\n\n return r;\n }\n\n function validateVacationEndDate(date) {\n var d = vm.preferences.defaults, r = true;\n if (d &&\n d.Vacation &&\n d.Vacation.enabled) {\n if (d.Vacation.endDateEnabled) {\n r = (!d.Vacation.startDateEnabled ||\n date.getTime() > d.Vacation.startDate.getTime()) &&\n date.getTime() >= tomorrow.getTime();\n }\n }\n\n return r;\n }\n }\n\n angular\n .module('SOGo.PreferencesUI')\n .controller('PreferencesController', PreferencesController);\n\n})();\n"]} \ No newline at end of file