Allow disabling Gravatar

Resolves #3600
pull/210/head
Francis Lachapelle 2016-05-25 16:04:58 -04:00
parent 9fc22f2689
commit a9ee261eff
12 changed files with 100 additions and 35 deletions

View File

@ -1973,6 +1973,16 @@ SOGo webmail interface. The parameter is an array, for example:
`SOGoMailListViewColumnsOrder = (Flagged, Attachment, Priority, From, Subject, Unread, Date, Size);`
|D |SOGoExternalAvatarsEnabled
|Parameter used to enable fetching of avatars from remote services.
Defaults to `YES` when unset.
|U |SOGoGravatarEnabled
|Parameter used to activate fetching of avatars from http://gravatar.com/[Gravatar].
Defaults to `YES` when unset.
|D |SOGoVacationEnabled
|Parameter used to activate the edition from the preferences window of a
vacation message.

1
NEWS
View File

@ -3,6 +3,7 @@
Enhancements
- [web] expose all email addresses in autocompletion of message editor (#3443)
- [web] Gravatar service can now be disabled (#3600)
Bug fixes
- [web] fixed creation of chip on blur (sgTransformOnBlur directive)

View File

@ -54,12 +54,14 @@
SOGoFirstWeekOfYear = "January1";
SOGoShortDateFormat = "%d-%b-%y";
SOGoLongDateFormat = "%A, %B %d, %Y";
SOGoExternalAvatarsEnabled = YES;
SOGoGravatarEnabled = NO;
SOGoAlternateAvatar = "none";
SOGoIMAPServer = "localhost";
SOGoMailDomain = "localhost";
SOGoSelectedAddressBook = "collected";
SOGoRefreshViewCheck = "manually";
SOGoAlternateAvatar = "none";
SOGoMailMessageForwarding = "inline";
SOGoMailReplyPlacement = "below";
SOGoMailSignaturePlacement = "below";

View File

@ -47,6 +47,7 @@
- (NSString *) imapFolderSeparator;
- (BOOL) imapAclConformsToIMAPExt;
- (BOOL) forceExternalLoginWithEmail;
- (BOOL) externalAvatarsEnabled;
- (BOOL) sieveScriptsEnabled;
- (BOOL) forwardEnabled;
- (int) forwardConstraints;

View File

@ -1,6 +1,6 @@
/* SOGoDomainDefaults.m - this file is part of SOGo
*
* Copyright (C) 2009-2015 Inverse inc.
* Copyright (C) 2009-2016 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -191,6 +191,11 @@
return [self boolForKey: @"SOGoForceIMAPLoginWithEmail"];
}
- (BOOL) externalAvatarsEnabled
{
return [self boolForKey: @"SOGoExternalAvatarsEnabled"];
}
- (BOOL) sieveScriptsEnabled
{
return [self boolForKey: @"SOGoSieveScriptsEnabled"];

View File

@ -126,6 +126,7 @@ extern NSString *SOGoWeekStartFirstFullWeek;
- (void) setRefreshViewCheck: (NSString *) newValue;
- (NSString *) refreshViewCheck;
- (BOOL) gravatarEnabled;
- (void) setAlternateAvatar: (NSString *) newValue;
- (NSString *) alternateAvatar;

View File

@ -514,6 +514,11 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
return [self stringForKey: @"SOGoRefreshViewCheck"];
}
- (BOOL) gravatarEnabled
{
return [self boolForKey: @"SOGoGravatarEnabled"];
}
- (void) setAlternateAvatar: (NSString *) newValue
{
[self setObject: newValue forKey: @"SOGoAlternateAvatar"];

View File

@ -365,6 +365,7 @@
"TLS" = "TLS";
/* Avatars */
"Use Gravatar" = "Use Gravatar";
"Alternate Avatar" = "Alternate Avatar";
"none" = "None";
"identicon" = "Ident Icon";

View File

@ -30,6 +30,7 @@
#import <SOGo/NSObject+Utilities.h>
#import <SOGo/NSString+Utilities.h>
#import <SOGo/SOGoDomainDefaults.h>
#import <SOGo/SOGoUser.h>
#import <SOGo/SOGoUserDefaults.h>
#import <SOGo/SOGoUserSettings.h>
@ -73,6 +74,7 @@ static SoProduct *preferencesProduct = nil;
{
NSMutableDictionary *values, *account;
SOGoUserDefaults *defaults;
SOGoDomainDefaults *domainDefaults;
NSMutableArray *accounts;
NSDictionary *categoryLabels;
NSDictionary *locale;
@ -84,6 +86,7 @@ static SoProduct *preferencesProduct = nil;
}
defaults = [[context activeUser] userDefaults];
domainDefaults = [[context activeUser] domainDefaults];
categoryLabels = nil;
//
@ -110,8 +113,18 @@ static SoProduct *preferencesProduct = nil;
if (![[defaults source] objectForKey: @"SOGoRefreshViewCheck"])
[[defaults source] setObject: [defaults refreshViewCheck] forKey: @"SOGoRefreshViewCheck"];
if ([domainDefaults externalAvatarsEnabled])
{
if (![[defaults source] objectForKey: @"SOGoGravatarEnabled"])
[[defaults source] setObject: [NSNumber numberWithBool: [defaults gravatarEnabled]] forKey: @"SOGoGravatarEnabled"];
if (![[defaults source] objectForKey: @"SOGoAlternateAvatar"])
[[defaults source] setObject: [defaults alternateAvatar] forKey: @"SOGoAlternateAvatar"];
}
else
{
[[defaults source] setObject: [NSNumber numberWithInt: 0] forKey: @"SOGoGravatarEnabled"];
[[defaults source] removeObjectForKey: @"SOGoAlternateAvatar"];
}
//
// Default Calendar preferences

View File

@ -1417,6 +1417,11 @@ static NSArray *reminderValues = nil;
return [self labelForKey: item];
}
- (BOOL) externalAvatarsEnabled
{
return [[user domainDefaults] externalAvatarsEnabled];
}
- (NSArray *) alternateAvatar
{
// See: https://en.gravatar.com/site/implement/images/
@ -2157,6 +2162,14 @@ static NSArray *reminderValues = nil;
if ([[v objectForKey: @"SOGoLongDateFormat"] isEqualToString: @"default"])
[v removeObjectForKey: @"SOGoLongDateFormat"];
if (![self externalAvatarsEnabled])
{
[v removeObjectForKey: @"SOGoGravatarEnabled"];
[[[user userDefaults] source] removeObjectForKey: @"SOGoGravatarEnabled"];
[v removeObjectForKey: @"SOGoAlternateAvatar"];
[[[user userDefaults] source] removeObjectForKey: @"SOGoAlternateAvatar"];
}
//
// We sanitize mail labels
//

View File

@ -194,9 +194,19 @@
</md-select>
</md-input-container>
<md-input-container>
<var:if condition="externalAvatarsEnabled">
<div layout="row" layout-align="start start">
<md-checkbox flex="20"
ng-model="app.preferences.defaults.SOGoGravatarEnabled"
ng-true-value="1"
ng-false-value="0"
label:aria-label="Use Gravatar">
<var:string label:value="Use Gravatar"/>
</md-checkbox>
<md-input-container class="md-flex">
<label><var:string label:value="Alternate Avatar"/></label>
<md-select ng-model="app.preferences.defaults.SOGoAlternateAvatar">
<md-select ng-model="app.preferences.defaults.SOGoAlternateAvatar"
ng-disabled="!app.preferences.defaults.SOGoGravatarEnabled">
<var:foreach list="alternateAvatar" item="item">
<md-option var:value="item">
<var:string value="itemAlternateAvatarText"/>
@ -205,6 +215,8 @@
</md-select>
</md-input-container>
</div>
</var:if>
</div>
</md-content>
</md-tab>

View File

@ -60,6 +60,7 @@
if (email && vm.urlEmail != email) {
// Email has changed or doesn't match the current URL (this happens when using md-virtual-repeat)
showGenericAvatar();
if (Preferences.defaults.SOGoGravatarEnabled)
getGravatar(email);
}
else if (!email)