@@ -96,6 +96,8 @@ public class ConfigUserService implements IUserService { | |||
private static final String LOCALE = "locale"; | |||
private static final String EMAILONMYTICKETCHANGES = "emailMeOnMyTicketChanges"; | |||
private static final String ACCOUNTTYPE = "accountType"; | |||
private static final String DISABLED = "disabled"; | |||
@@ -711,6 +713,7 @@ public class ConfigUserService implements IUserService { | |||
String val = model.getPreferences().getLocale().getLanguage() + "_" + model.getPreferences().getLocale().getCountry(); | |||
config.setString(USER, model.username, LOCALE, val); | |||
} | |||
config.setBoolean(USER, model.username, EMAILONMYTICKETCHANGES, model.getPreferences().isEmailMeOnMyTicketChanges()); | |||
} | |||
// user roles | |||
@@ -887,6 +890,7 @@ public class ConfigUserService implements IUserService { | |||
// preferences | |||
user.getPreferences().setLocale(config.getString(USER, username, LOCALE)); | |||
user.getPreferences().setEmailMeOnMyTicketChanges(config.getBoolean(USER, username, EMAILONMYTICKETCHANGES, true)); | |||
// user roles | |||
Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList( |
@@ -39,6 +39,8 @@ public class UserPreferences implements Serializable { | |||
private String locale; | |||
private Boolean emailMeOnMyTicketChanges; | |||
private final Map<String, UserRepositoryPreferences> repositoryPreferences = new TreeMap<String, UserRepositoryPreferences>(); | |||
public UserPreferences(String username) { | |||
@@ -100,4 +102,15 @@ public class UserPreferences implements Serializable { | |||
Collections.sort(list); | |||
return list; | |||
} | |||
public boolean isEmailMeOnMyTicketChanges() { | |||
if (emailMeOnMyTicketChanges == null) { | |||
return true; | |||
} | |||
return emailMeOnMyTicketChanges; | |||
} | |||
public void setEmailMeOnMyTicketChanges(boolean value) { | |||
this.emailMeOnMyTicketChanges = value; | |||
} | |||
} |
@@ -545,7 +545,6 @@ public class TicketNotifier { | |||
} | |||
} | |||
} | |||
mailing.setRecipients(toAddresses); | |||
// | |||
// CC recipients | |||
@@ -554,7 +553,7 @@ public class TicketNotifier { | |||
// repository owners | |||
if (!ArrayUtils.isEmpty(repository.owners)) { | |||
tos.addAll(repository.owners); | |||
ccs.addAll(repository.owners); | |||
} | |||
// cc users mentioned in last comment | |||
@@ -595,6 +594,14 @@ public class TicketNotifier { | |||
} | |||
ccAddresses.addAll(settings.getStrings(Keys.mail.mailingLists)); | |||
// respect the author's email preference | |||
UserModel lastAuthor = userManager.getUserModel(lastChange.author); | |||
if (!lastAuthor.getPreferences().isEmailMeOnMyTicketChanges()) { | |||
toAddresses.remove(lastAuthor.emailAddress); | |||
ccAddresses.remove(lastAuthor.emailAddress); | |||
} | |||
mailing.setRecipients(toAddresses); | |||
mailing.setCCs(ccAddresses); | |||
} | |||
@@ -728,6 +728,8 @@ gb.accountPreferences = Account Preferences | |||
gb.accountPreferencesDescription = Specify your account preferences | |||
gb.languagePreference = Language Preference | |||
gb.languagePreferenceDescription = Select your preferred translation for Gitblit | |||
gb.emailMeOnMyTicketChanges = Email me on my ticket changes | |||
gb.emailMeOnMyTicketChangesDescription = Send me an email notification for changes that I make to a ticket | |||
gb.displayNameDescription = The preferred name for display | |||
gb.emailAddressDescription = The primary email address for receiving notifications | |||
gb.sshKeys = SSH Keys |
@@ -64,7 +64,8 @@ | |||
<form wicket:id="prefsForm"> | |||
<div wicket:id="displayName"></div> | |||
<div wicket:id="emailAddress"></div> | |||
<div wicket:id="language"></div> | |||
<div wicket:id="language"></div> | |||
<div wicket:id="emailMeOnMyTicketChanges"></div> | |||
<div class="form-actions"><input class="btn btn-appmenu" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" /></div> | |||
</form> |
@@ -48,6 +48,7 @@ import com.gitblit.wicket.GitBlitWebApp; | |||
import com.gitblit.wicket.GitBlitWebSession; | |||
import com.gitblit.wicket.GitblitRedirectException; | |||
import com.gitblit.wicket.WicketUtils; | |||
import com.gitblit.wicket.panels.BooleanOption; | |||
import com.gitblit.wicket.panels.ChoiceOption; | |||
import com.gitblit.wicket.panels.ProjectRepositoryPanel; | |||
import com.gitblit.wicket.panels.SshKeysPanel; | |||
@@ -219,6 +220,7 @@ public class UserPage extends RootPage { | |||
final IModel<String> displayName = Model.of(user.getDisplayName()); | |||
final IModel<String> emailAddress = Model.of(user.emailAddress == null ? "" : user.emailAddress); | |||
final IModel<Language> language = Model.of(preferredLanguage); | |||
final IModel<Boolean> emailMeOnMyTicketChanges = Model.of(user.getPreferences().isEmailMeOnMyTicketChanges()); | |||
prefs.add(new TextOption("displayName", | |||
getString("gb.displayName"), | |||
@@ -236,6 +238,11 @@ public class UserPage extends RootPage { | |||
language, | |||
languages)); | |||
prefs.add(new BooleanOption("emailMeOnMyTicketChanges", | |||
getString("gb.emailMeOnMyTicketChanges"), | |||
getString("gb.emailMeOnMyTicketChangesDescription"), | |||
emailMeOnMyTicketChanges).setVisible(app().notifier().isSendingMail())); | |||
prefs.add(new AjaxButton("save") { | |||
private static final long serialVersionUID = 1L; | |||
@@ -253,6 +260,8 @@ public class UserPage extends RootPage { | |||
user.getPreferences().setLocale(lang.code); | |||
} | |||
user.getPreferences().setEmailMeOnMyTicketChanges(emailMeOnMyTicketChanges.getObject()); | |||
try { | |||
app().gitblit().reviseUser(user.username, user); | |||