java/code/src/com/redhat/rhn/frontend/action/user/BaseUserSetupAction.java | 98
++++++++++
java/code/src/com/redhat/rhn/frontend/action/user/CreateUserAction.java | 11 +
java/code/src/com/redhat/rhn/frontend/action/user/CreateUserSetupAction.java | 26 ++
java/code/src/com/redhat/rhn/frontend/action/user/UserLocalePrefAction.java | 62
------
java/code/webapp/WEB-INF/pages/user/create/usercreate.jsp | 59
++++++
java/code/webapp/WEB-INF/struts-config.xml | 2
6 files changed, 197 insertions(+), 61 deletions(-)
New commits:
commit b68c6807eac4af8f86a2e6e5547e4977124de56c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Mar 4 17:09:40 2011 +0100
682258 - specify user locale when creating new user
diff --git a/java/code/src/com/redhat/rhn/frontend/action/user/BaseUserSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/user/BaseUserSetupAction.java
new file mode 100644
index 0000000..b799313
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/user/BaseUserSetupAction.java
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2009--2011 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.action.user;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.user.RhnTimeZone;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.manager.user.UserManager;
+
+import org.apache.struts.action.DynaActionForm;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * User locale override stuff
+ *
+ * @version $Rev $
+ */
+public class BaseUserSetupAction extends RhnAction {
+
+ public LangDisplayBean buildNoneLocale() {
+ LocalizationService ls =
+ LocalizationService.getInstance();
+ LangDisplayBean ldb = new LangDisplayBean();
+ ldb.setImageUri("");
+ ldb.setLanguageCode("none");
+ ldb.setLocalizedName(ls.getMessage("preferences.jsp.lang.none"));
+ return ldb;
+ }
+
+ public void setCurrentLocale(RequestContext ctx, User user) {
+ String userLocale = user.getPreferredLocale();
+
+ // If user has locale set, then just use that
+ if (userLocale != null) {
+ ctx.getRequest().setAttribute("currentLocale", userLocale);
+ }
+ else {
+ ctx.getRequest().setAttribute("currentLocale", "none");
+ }
+ }
+
+ public Map buildImageMap() {
+ Map retval = new LinkedHashMap();
+ LocalizationService ls = LocalizationService.getInstance();
+ List locales = ls.getConfiguredLocales();
+ for (Iterator iter = locales.iterator(); iter.hasNext();) {
+ String locale = (String) iter.next();
+ StringBuffer buf = new StringBuffer();
+ buf.append("/img/i18n/").append(locale);
+ buf.append(".gif");
+ LangDisplayBean ldb = new LangDisplayBean();
+ ldb.setImageUri(buf.toString());
+ ldb.setLanguageCode(locale);
+ ldb.setLocalizedName(ls.getMessage("preferences.jsp.lang." +
locale));
+ retval.put(locale, ldb);
+ }
+ return retval;
+ }
+
+ public List getTimeZones() {
+ List dataList = UserManager.lookupAllTimeZones();
+ List displayList = new ArrayList();
+ for (int i = 0; i < dataList.size(); i++) {
+ String display = LocalizationService.getInstance()
+ .getMessage(((RhnTimeZone)dataList.get(i)).getOlsonName());
+ String value =
String.valueOf(((RhnTimeZone)dataList.get(i)).getTimeZoneId());
+ displayList.add(createDisplayMap(display, value));
+ }
+ return displayList;
+ }
+
+ public Map createDisplayMap(String display, String value) {
+ Map selection = new HashMap();
+ selection.put("display", display);
+ selection.put("value", value);
+ return selection;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserAction.java
b/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserAction.java
index 05c8ba9..f4fb138 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserAction.java
@@ -27,6 +27,7 @@ import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnValidationHelper;
import com.redhat.rhn.manager.user.CreateUserCommand;
+import com.redhat.rhn.manager.user.UserManager;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
@@ -192,6 +193,16 @@ public class CreateUserAction extends RhnAction {
command.publishNewUserEvent(orgAdmin,
orgAdmin.getOrg().getActiveOrgAdmins(),
request.getServerName(),
(String) form.get(UserActionHelper.DESIRED_PASS));
+
+ user.setTimeZone(UserManager.getTimeZone(((Integer)
form.get("timezone"))
+ .intValue()));
+ String preferredLocale = form.getString("preferredLocale");
+ if (preferredLocale != null &&
preferredLocale.equals("none")) {
+ preferredLocale = null;
+ }
+ user.setPreferredLocale(preferredLocale);
+ UserManager.storeUser(user);
+
return
getStrutsDelegate().forwardParam(mapping.findForward(SUCCESS_INTO_ORG),
"uid", String.valueOf(user.getId()));
diff --git a/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserSetupAction.java
index 69b5494..b9eba2b 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/user/CreateUserSetupAction.java
@@ -17,8 +17,11 @@ package com.redhat.rhn.frontend.action.user;
import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.conf.ConfigDefaults;
import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnValidationHelper;
+import com.redhat.rhn.manager.user.UserManager;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
@@ -32,7 +35,7 @@ import javax.servlet.http.HttpServletResponse;
* CreateUserSetupAction
* @version $Rev: 1029 $
*/
-public class CreateUserSetupAction extends RhnAction {
+public class CreateUserSetupAction extends BaseUserSetupAction {
/** placeholder string, package protected; so we don't transmit
* the actual pw but the form doesn't look empty */
static final String PLACEHOLDER_PASSWORD = "******";
@@ -43,6 +46,8 @@ public class CreateUserSetupAction extends RhnAction {
HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm form = (DynaActionForm)formIn;
+ RequestContext ctx = new RequestContext(request);
+ User currentUser = ctx.getCurrentUser();
// We have to set these on the Session because struts throws them away
// if we set them on the request itself and validation fails.
@@ -76,6 +81,25 @@ public class CreateUserSetupAction extends RhnAction {
request.setAttribute("displaypamcheckbox", "true");
}
+ request.setAttribute("timezones", getTimeZones());
+
+ // There's no currentUser when creating the very first user
+ if (currentUser != null && currentUser.getTimeZone() != null) {
+ request.setAttribute("default_tz", new
Integer(currentUser.getTimeZone()
+ .getTimeZoneId()));
+ }
+ else {
+ request.setAttribute("default_tz", new Integer(UserManager
+ .getDefaultTimeZone().getTimeZoneId()));
+ }
+
+ request.setAttribute("noLocale", buildNoneLocale());
+ request.setAttribute("supportedLocales", buildImageMap());
+ // There's no currentUser when creating the very first user
+ if (currentUser != null) {
+ setCurrentLocale(ctx, currentUser);
+ }
+
return mapping.findForward("default");
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/user/UserLocalePrefAction.java
b/java/code/src/com/redhat/rhn/frontend/action/user/UserLocalePrefAction.java
index b771051..d841f40 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/user/UserLocalePrefAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/user/UserLocalePrefAction.java
@@ -18,6 +18,7 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.domain.user.RhnTimeZone;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.action.common.BadParameterException;
+import com.redhat.rhn.frontend.action.user.BaseUserSetupAction;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.manager.user.UserManager;
@@ -44,7 +45,7 @@ import javax.servlet.http.HttpServletResponse;
*
* @version $Rev $
*/
-public class UserLocalePrefAction extends RhnAction {
+public class UserLocalePrefAction extends BaseUserSetupAction {
/**
* {@inheritDoc}
@@ -115,65 +116,6 @@ public class UserLocalePrefAction extends RhnAction {
return mapping.findForward("default");
}
- private LangDisplayBean buildNoneLocale() {
- LocalizationService ls =
- LocalizationService.getInstance();
- LangDisplayBean ldb = new LangDisplayBean();
- ldb.setImageUri("");
- ldb.setLanguageCode("none");
- ldb.setLocalizedName(ls.getMessage("preferences.jsp.lang.none"));
- return ldb;
- }
-
- private void setCurrentLocale(RequestContext ctx, User user) {
- String userLocale = user.getPreferredLocale();
-
- // If user has locale set, then just use that
- if (userLocale != null) {
- ctx.getRequest().setAttribute("currentLocale", userLocale);
- }
- else {
- ctx.getRequest().setAttribute("currentLocale", "none");
- }
- }
-
- private Map buildImageMap() {
- Map retval = new LinkedHashMap();
- LocalizationService ls = LocalizationService.getInstance();
- List locales = ls.getConfiguredLocales();
- for (Iterator iter = locales.iterator(); iter.hasNext();) {
- String locale = (String) iter.next();
- StringBuffer buf = new StringBuffer();
- buf.append("/img/i18n/").append(locale);
- buf.append(".gif");
- LangDisplayBean ldb = new LangDisplayBean();
- ldb.setImageUri(buf.toString());
- ldb.setLanguageCode(locale);
- ldb.setLocalizedName(ls.getMessage("preferences.jsp.lang." +
locale));
- retval.put(locale, ldb);
- }
- return retval;
- }
-
- private List getTimeZones() {
- List dataList = UserManager.lookupAllTimeZones();
- List displayList = new ArrayList();
- for (int i = 0; i < dataList.size(); i++) {
- String display = LocalizationService.getInstance()
- .getMessage(((RhnTimeZone)dataList.get(i)).getOlsonName());
- String value =
String.valueOf(((RhnTimeZone)dataList.get(i)).getTimeZoneId());
- displayList.add(createDisplayMap(display, value));
- }
- return displayList;
- }
-
- private Map createDisplayMap(String display, String value) {
- Map selection = new HashMap();
- selection.put("display", display);
- selection.put("value", value);
- return selection;
- }
-
private User lookupUser(RequestContext ctx, DynaActionForm form) {
User retval = null;
if (form.get("uid") != null) {
diff --git a/java/code/webapp/WEB-INF/pages/user/create/usercreate.jsp
b/java/code/webapp/WEB-INF/pages/user/create/usercreate.jsp
index 46e27df..c73be56 100644
--- a/java/code/webapp/WEB-INF/pages/user/create/usercreate.jsp
+++ b/java/code/webapp/WEB-INF/pages/user/create/usercreate.jsp
@@ -107,6 +107,65 @@
</table>
+<c:if test="${account_type == 'into_org'}">
+ <h2><bean:message key="preferences.jsp.tz"/></h2>
+ <p><bean:message key="preferences.jsp.datestimes"/></p>
+ <div class="preference"><bean:message
key="preferences.jsp.displaytimesas"/>
+ <select name="timezone">
+ <c:forEach var="tz" items="${requestScope.timezones}">
+ <c:if test="${tz.value == requestScope.default_tz}">
+ <option value="${tz.value}"
selected="selected">${tz.display}</option>
+ </c:if>
+ <c:if test="${tz.value != requestScope.default_tz}">
+ <option value="${tz.value}">${tz.display}</option>
+ </c:if>
+ </c:forEach>
+ </select>
+ </div>
+
+ <h2><bean:message key="preferences.jsp.lang" /></h2>
+ <p><bean:message key="preferences.jsp.langs" /></p>
+
+ <div class="preference">
+ <c:set var="counter" value="0" />
+ <table width="75%" cellpadding="0">
+ <tr>
+ <td width="50%">
+ <input type="radio" name="preferredLocale"
value="<c:out value="${noLocale.languageCode}" />"
+ <c:if test="${noLocale.languageCode == currentLocale}">
+ checked="checked"
+ </c:if>/>
+ <c:out value="${noLocale.localizedName}" />
+ <br />
+ <br />
+ </td>
+ </tr>
+ <c:forEach var="item" items="${supportedLocales}">
+ <c:if test="${counter == 0}">
+ <tr>
+ </c:if>
+ <td width="50%">
+ <input type="radio" name="preferredLocale"
value="<c:out value="${item.key}" />"
+ <c:if test="${item.key == currentLocale}">
+ checked="checked"
+ </c:if>/>
+ <img src="<c:out value="${item.value.imageUri}" />"
alt="<c:out value="${item.value.localizedName}" />"
/> (<c:out value="${item.value.localizedName}" />)
+ </td>
+ <c:if test="${counter == 1}">
+ </tr>
+ </c:if>
+ <c:set var="counter" value="${counter + 1}" />
+ <c:if test="${counter == 2}">
+ <c:set var="counter" value="0" />
+ </c:if>
+ </c:forEach>
+
+ <c:if test="${counter == 1}">
+ </tr>
+ </c:if>
+ </table>
+ </div>
+</c:if>
<div align="right">
<html:submit>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index 4ec43ed..7c9a414 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -67,6 +67,8 @@
<form-property name="usepam"
type="java.lang.Boolean"/>
<form-property name="no_scrub"
type="java.lang.String"
initial="desiredpassword, desiredpasswordConfirm"/>
+ <form-property name="preferredLocale"
type="java.lang.String" />
+ <form-property name="timezone"
type="java.lang.Integer"/>
</form-bean>
<form-bean name="userCreateForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">