James Moger
2014-11-04 4e84166db5c5538e3984d9d2d6bb1f9902e65ee0
src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -35,6 +35,7 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import com.gitblit.Constants.Transport;
import com.gitblit.GitBlitException;
import com.gitblit.Keys;
import com.gitblit.models.Menu.ParameterMenuItem;
@@ -48,6 +49,7 @@
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;
@@ -102,7 +104,7 @@
      if (isMyProfile) {
         addPreferences(user);
         if (app().gitblit().isServingSSH()) {
         if (app().services().isServingSSH()) {
            // show the SSH key management tab
            addSshKeys(user);
         } else {
@@ -170,9 +172,11 @@
      Form<Void> prefs = new Form<Void>("prefsForm");
      List<Language> languages = Arrays.asList(
            new Language("Deutsch","de"),
            new Language("English","en"),
            new Language("Español", "es"),
            new Language("Français", "fr"),
            new Language("Italiano", "it"),
            new Language("日本語", "ja"),
            new Language("한국말", "ko"),
            new Language("Nederlands", "nl"),
@@ -181,28 +185,36 @@
            new Language("Português", "pt_BR"),
            new Language("中文", "zh_CN"));
      String lc = user.getPreferences().locale;
      if (StringUtils.isEmpty(lc)) {
      Locale locale = user.getPreferences().getLocale();
      if (locale == null) {
         // user has not specified language preference
         // try server default preference
         lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
         String lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
         if (StringUtils.isEmpty(lc)) {
            // server default language is not configured
            // try browser preference
            Locale sessionLocale = GitBlitWebSession.get().getLocale();
            if (sessionLocale != null) {
               lc = sessionLocale.getLanguage() + "_" + sessionLocale.getCountry();
               locale = sessionLocale;
            }
         } else {
         }
      }
      Language preferredLanguage = null;
      if (!StringUtils.isEmpty(lc)) {
      if (locale != null) {
         String localeCode = locale.getLanguage();
         if (!StringUtils.isEmpty(locale.getCountry())) {
            localeCode += "_" + locale.getCountry();
         }
         for (Language language : languages) {
            if (language.code.equals(lc)) {
            if (language.code.equals(localeCode)) {
               // language_COUNTRY match
               preferredLanguage = language;
            } else if (preferredLanguage != null && lc.startsWith(language.code)) {
               // language match, but not COUNTRY match
            } else if (preferredLanguage != null && language.code.startsWith(locale.getLanguage())) {
               // language match
               preferredLanguage = language;
            }
         }
@@ -211,6 +223,8 @@
      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());
      final IModel<Transport> transport = Model.of(user.getPreferences().getTransport());
      prefs.add(new TextOption("displayName",
            getString("gb.displayName"),
@@ -228,6 +242,31 @@
            language,
            languages));
      prefs.add(new BooleanOption("emailMeOnMyTicketChanges",
            getString("gb.emailMeOnMyTicketChanges"),
            getString("gb.emailMeOnMyTicketChangesDescription"),
            emailMeOnMyTicketChanges).setVisible(app().notifier().isSendingMail()));
      List<Transport> availableTransports = new ArrayList<>();
      if (app().services().isServingSSH()) {
         availableTransports.add(Transport.SSH);
      }
      if (app().services().isServingHTTP()) {
         availableTransports.add(Transport.HTTP);
      }
      if (app().services().isServingHTTPS()) {
         availableTransports.add(Transport.HTTPS);
      }
      if (app().services().isServingGIT()) {
         availableTransports.add(Transport.GIT);
      }
      prefs.add(new ChoiceOption<Transport>("transport",
            getString("gb.transportPreference"),
            getString("gb.transportPreferenceDescription"),
            transport,
            availableTransports));
      prefs.add(new AjaxButton("save") {
         private static final long serialVersionUID = 1L;
@@ -242,8 +281,11 @@
            Language lang = language.getObject();
            if (lang != null) {
               user.getPreferences().locale = lang.code;
               user.getPreferences().setLocale(lang.code);
            }
            user.getPreferences().setEmailMeOnMyTicketChanges(emailMeOnMyTicketChanges.getObject());
            user.getPreferences().setTransport(transport.getObject());
            try {
               app().gitblit().reviseUser(user.username, user);
@@ -266,7 +308,7 @@
   private void addSshKeys(final UserModel user) {
      Fragment keysTab = new Fragment("sshKeysTab", "sshKeysTabFragment", this);
      keysTab.add(new SshKeysPanel("sshKeysPanel", user, getClass(), getPageParameters()));
      keysTab.add(new SshKeysPanel("sshKeysPanel", user));
      // add the SSH keys tab
      add(new Fragment("sshKeysLink", "sshKeysLinkFragment", this).setRenderBodyOnly(true));