private static final String LOCALE = "locale"; | private static final String LOCALE = "locale"; | ||||
private static final String EMAILONMYTICKETCHANGES = "emailMeOnMyTicketChanges"; | |||||
private static final String ACCOUNTTYPE = "accountType"; | private static final String ACCOUNTTYPE = "accountType"; | ||||
private static final String DISABLED = "disabled"; | private static final String DISABLED = "disabled"; | ||||
String val = model.getPreferences().getLocale().getLanguage() + "_" + model.getPreferences().getLocale().getCountry(); | String val = model.getPreferences().getLocale().getLanguage() + "_" + model.getPreferences().getLocale().getCountry(); | ||||
config.setString(USER, model.username, LOCALE, val); | config.setString(USER, model.username, LOCALE, val); | ||||
} | } | ||||
config.setBoolean(USER, model.username, EMAILONMYTICKETCHANGES, model.getPreferences().isEmailMeOnMyTicketChanges()); | |||||
} | } | ||||
// user roles | // user roles | ||||
// preferences | // preferences | ||||
user.getPreferences().setLocale(config.getString(USER, username, LOCALE)); | user.getPreferences().setLocale(config.getString(USER, username, LOCALE)); | ||||
user.getPreferences().setEmailMeOnMyTicketChanges(config.getBoolean(USER, username, EMAILONMYTICKETCHANGES, true)); | |||||
// user roles | // user roles | ||||
Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList( | Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList( |
private String locale; | private String locale; | ||||
private Boolean emailMeOnMyTicketChanges; | |||||
private final Map<String, UserRepositoryPreferences> repositoryPreferences = new TreeMap<String, UserRepositoryPreferences>(); | private final Map<String, UserRepositoryPreferences> repositoryPreferences = new TreeMap<String, UserRepositoryPreferences>(); | ||||
public UserPreferences(String username) { | public UserPreferences(String username) { | ||||
Collections.sort(list); | Collections.sort(list); | ||||
return list; | return list; | ||||
} | } | ||||
public boolean isEmailMeOnMyTicketChanges() { | |||||
if (emailMeOnMyTicketChanges == null) { | |||||
return true; | |||||
} | |||||
return emailMeOnMyTicketChanges; | |||||
} | |||||
public void setEmailMeOnMyTicketChanges(boolean value) { | |||||
this.emailMeOnMyTicketChanges = value; | |||||
} | |||||
} | } |
} | } | ||||
} | } | ||||
} | } | ||||
mailing.setRecipients(toAddresses); | |||||
// | // | ||||
// CC recipients | // CC recipients | ||||
// repository owners | // repository owners | ||||
if (!ArrayUtils.isEmpty(repository.owners)) { | if (!ArrayUtils.isEmpty(repository.owners)) { | ||||
tos.addAll(repository.owners); | |||||
ccs.addAll(repository.owners); | |||||
} | } | ||||
// cc users mentioned in last comment | // cc users mentioned in last comment | ||||
} | } | ||||
ccAddresses.addAll(settings.getStrings(Keys.mail.mailingLists)); | 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); | mailing.setCCs(ccAddresses); | ||||
} | } | ||||
gb.accountPreferencesDescription = Specify your account preferences | gb.accountPreferencesDescription = Specify your account preferences | ||||
gb.languagePreference = Language Preference | gb.languagePreference = Language Preference | ||||
gb.languagePreferenceDescription = Select your preferred translation for Gitblit | 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.displayNameDescription = The preferred name for display | ||||
gb.emailAddressDescription = The primary email address for receiving notifications | gb.emailAddressDescription = The primary email address for receiving notifications | ||||
gb.sshKeys = SSH Keys | gb.sshKeys = SSH Keys |
<form wicket:id="prefsForm"> | <form wicket:id="prefsForm"> | ||||
<div wicket:id="displayName"></div> | <div wicket:id="displayName"></div> | ||||
<div wicket:id="emailAddress"></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> | <div class="form-actions"><input class="btn btn-appmenu" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" /></div> | ||||
</form> | </form> |
import com.gitblit.wicket.GitBlitWebSession; | import com.gitblit.wicket.GitBlitWebSession; | ||||
import com.gitblit.wicket.GitblitRedirectException; | import com.gitblit.wicket.GitblitRedirectException; | ||||
import com.gitblit.wicket.WicketUtils; | import com.gitblit.wicket.WicketUtils; | ||||
import com.gitblit.wicket.panels.BooleanOption; | |||||
import com.gitblit.wicket.panels.ChoiceOption; | import com.gitblit.wicket.panels.ChoiceOption; | ||||
import com.gitblit.wicket.panels.ProjectRepositoryPanel; | import com.gitblit.wicket.panels.ProjectRepositoryPanel; | ||||
import com.gitblit.wicket.panels.SshKeysPanel; | import com.gitblit.wicket.panels.SshKeysPanel; | ||||
final IModel<String> displayName = Model.of(user.getDisplayName()); | final IModel<String> displayName = Model.of(user.getDisplayName()); | ||||
final IModel<String> emailAddress = Model.of(user.emailAddress == null ? "" : user.emailAddress); | final IModel<String> emailAddress = Model.of(user.emailAddress == null ? "" : user.emailAddress); | ||||
final IModel<Language> language = Model.of(preferredLanguage); | final IModel<Language> language = Model.of(preferredLanguage); | ||||
final IModel<Boolean> emailMeOnMyTicketChanges = Model.of(user.getPreferences().isEmailMeOnMyTicketChanges()); | |||||
prefs.add(new TextOption("displayName", | prefs.add(new TextOption("displayName", | ||||
getString("gb.displayName"), | getString("gb.displayName"), | ||||
language, | language, | ||||
languages)); | languages)); | ||||
prefs.add(new BooleanOption("emailMeOnMyTicketChanges", | |||||
getString("gb.emailMeOnMyTicketChanges"), | |||||
getString("gb.emailMeOnMyTicketChangesDescription"), | |||||
emailMeOnMyTicketChanges).setVisible(app().notifier().isSendingMail())); | |||||
prefs.add(new AjaxButton("save") { | prefs.add(new AjaxButton("save") { | ||||
private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
user.getPreferences().setLocale(lang.code); | user.getPreferences().setLocale(lang.code); | ||||
} | } | ||||
user.getPreferences().setEmailMeOnMyTicketChanges(emailMeOnMyTicketChanges.getObject()); | |||||
try { | try { | ||||
app().gitblit().reviseUser(user.username, user); | app().gitblit().reviseUser(user.username, user); | ||||