Author: gmazza
Date: Mon Aug 11 19:33:22 2014
New Revision: 1617352

URL: http://svn.apache.org/r1617352
Log:
ModifyUser and CreateUser consolidated into UserEdit, restoring page title on 
JSPs that were missing them.

Added:
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
      - copied, changed from r1617271, 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
Removed:
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/CreateUser.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
Modified:
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/UserManager.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
    
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java
    roller/trunk/app/src/main/resources/ApplicationResources.properties
    roller/trunk/app/src/main/resources/ApplicationResources_de.properties
    roller/trunk/app/src/main/resources/ApplicationResources_es.properties
    roller/trunk/app/src/main/resources/ApplicationResources_fr.properties
    roller/trunk/app/src/main/resources/ApplicationResources_ja_JP.properties
    roller/trunk/app/src/main/resources/ApplicationResources_ko.properties
    roller/trunk/app/src/main/resources/ApplicationResources_ru.properties
    roller/trunk/app/src/main/resources/ApplicationResources_zh_CN.properties
    roller/trunk/app/src/main/resources/struts.xml
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserAdmin.jsp
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserEdit.jsp
    roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/UserManager.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/UserManager.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/UserManager.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/UserManager.java
 Mon Aug 11 19:33:22 2014
@@ -83,8 +83,16 @@ public interface UserManager {
     
           
     //------------------------------------------------------------ user queries
-    
-    
+
+    /**
+     * Retrieve a user by its internal identifier id.
+     *
+     * @param id the id of the user to retrieve.
+     * @return the user object with specified id or null if not found
+     * @throws WebloggerException
+     */
+    User getUser(String id) throws WebloggerException;
+
     /**
      * Lookup a user by UserName.
      * 

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java
 Mon Aug 11 19:33:22 2014
@@ -116,12 +116,11 @@ public class JPAUserManagerImpl implemen
         }
     }
 
-    
+    @Override
     public User getUser(String id) throws WebloggerException {
         return (User)this.strategy.load(User.class, id);
     }
 
-    
     //------------------------------------------------------------ user queries
 
     public User getUserByUserName(String userName) throws WebloggerException {
@@ -340,28 +339,28 @@ public class JPAUserManagerImpl implemen
     //-------------------------------------------------------- permissions CRUD
  
     public boolean checkPermission(RollerPermission perm, User user) throws 
WebloggerException {
-        RollerPermission existingPerm = null;
 
         // if permission a weblog permission
         if (perm instanceof WeblogPermission) {
             // if user has specified permission in weblog return true
             WeblogPermission permToCheck = (WeblogPermission)perm;
             try {
-                existingPerm = getWeblogPermission(permToCheck.getWeblog(), 
user);
-            } catch (WebloggerException ignored) {}        
+                RollerPermission existingPerm = 
getWeblogPermission(permToCheck.getWeblog(), user);
+                if (existingPerm != null && existingPerm.implies(perm)) {
+                    return true;
+                }
+            } catch (WebloggerException ignored) {
             }
-        if (existingPerm != null && existingPerm.implies(perm)) {
-            return true;
         }
-        
-        // user has no existing perm in a weblog, so try his global perms
+
+        // if Blog Server admin would still have weblog permission above
         GlobalPermission globalPerm = new GlobalPermission(user);
         if (globalPerm.implies(perm)) {
             return true;
         }
-        
+
         if (log.isDebugEnabled()) {
-            log.debug("PERM CHECK FAILED: user "+user.getUserName()+" does not 
have " + perm.toString());
+            log.debug("PERM CHECK FAILED: user " + user.getUserName() + " does 
not have " + perm.toString());
         }
         return false;
     }

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/GlobalPermission.java
 Mon Aug 11 19:33:22 2014
@@ -93,6 +93,10 @@ public class GlobalPermission extends Ro
     }
         
     public boolean implies(Permission perm) {
+        if (getActionsAsList().isEmpty()) {
+            // new, unsaved user.
+            return false;
+        }
         if (perm instanceof WeblogPermission) {
             if (hasAction(ADMIN)) {
                 // admin implies all other permissions

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/PingTargetEdit.java
 Mon Aug 11 19:33:22 2014
@@ -42,7 +42,11 @@ public class PingTargetEdit extends UIAc
 
     public PingTargetEdit() {
         this.desiredMenu = "admin";
-        this.pageTitle = "pingTarget.pingTarget";
+    }
+
+    @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
     }
 
     // no weblog required

Copied: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
 (from r1617271, 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java)
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java?p2=roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java&p1=roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java&r1=1617271&r2=1617352&rev=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/UserEdit.java
 Mon Aug 11 19:33:22 2014
@@ -21,6 +21,10 @@ package org.apache.roller.weblogger.ui.s
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.commons.lang3.CharSetUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -32,38 +36,34 @@ import org.apache.roller.weblogger.confi
 import org.apache.roller.weblogger.pojos.GlobalPermission;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
-import org.apache.roller.weblogger.ui.core.RollerContext;
+import org.apache.roller.weblogger.ui.struts2.core.Register;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 
 
 /**
  * Action that allows an admin to modify a users profile.
  */
-public class ModifyUser extends UIAction {
+public class UserEdit extends UIAction {
     
-    private static Log log = LogFactory.getLog(ModifyUser.class);
+    private static Log log = LogFactory.getLog(UserEdit.class);
 
-    // user we are modifying
-    private User user = new User();
-    
     // a bean to store our form data
     private CreateUserBean bean = new CreateUserBean();
-    
-    private String userName = null;
 
+    // user we are creating or modifying
+    private User user = null;
+    
     private AuthMethod authMethod = WebloggerConfig.getAuthMethod();
 
-    public String getAuthMethod() {
-        return authMethod.name();
+    public UserEdit() {
+        this.desiredMenu = "admin";
     }
 
-    public ModifyUser() {
-        this.actionName = "modifyUser";
-        this.desiredMenu = "admin";
-        this.pageTitle = "userAdmin.title.editUser";
+    @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
     }
-    
-    
+
     // admin role required
     public List<String> requiredGlobalPermissionActions() {
         return Collections.singletonList(GlobalPermission.ADMIN);
@@ -73,128 +73,147 @@ public class ModifyUser extends UIAction
     public boolean isWeblogRequired() { 
         return false;
     }
-    
-    
+
     // prepare for action by loading user object we are modifying
     public void myPrepare() {
-        
-        // load the user object we are modifying
-        if (getUserName() != null) {
-            try {
-                UserManager mgr = 
WebloggerFactory.getWeblogger().getUserManager();
-                
-                // use enabled = 'null' to get both enabled and disabled users
-                setUser(mgr.getUserByUserName(getUserName(), null));
-                
-            } catch(Exception e) {
-                log.error("Error looking up user - "+getUserName(), e);
-            }
-        } else if (getBean().getId() != null) {
+        if (isAdd()) {
+            // create new User
+            user = new User();
+        } else {
             try {
+                // load the user object we are modifying
                 UserManager mgr = 
WebloggerFactory.getWeblogger().getUserManager();
-                setUser(mgr.getUserByUserName(getBean().getUserName(), null));
+                if (bean.getId() != null) {
+                    // action came from CreateUser or return from ModifyUser
+                    user = mgr.getUser(getBean().getId());
+                } else if (bean.getUserName() != null) {
+                    // action came from UserAdmin screen.
+                    user = mgr.getUserByUserName(getBean().getUserName(), 
null);
+                }
             } catch (Exception e) {
-                log.error("Error looking up user - " + getBean().getId(), e);
+                log.error("Error looking up user (id/username) :" + 
bean.getId() + "/" + bean.getUserName(), e);
             }
         }
     }
-    
-    
+
     /**
      * Show admin user edit page.
      */
     public String execute() {
-        
-        if (getUser() != null && getUser().getUserName() != null) {
-            // populate form data from user profile data
-            getBean().copyFrom(getUser());
+        if (isAdd()) {
+            // initial user create
+            getBean().setLocale(Locale.getDefault().toString());
+            getBean().setTimeZone(TimeZone.getDefault().getID());
         } else {
-            addError("userAdmin.error.userNotFound");
-            return ERROR;
+            // populate form data from user profile data
+            getBean().copyFrom(user);
         }
-
         return INPUT;
     }
-    
-    
+
+    /**
+     * Post user created message after first save.
+     */
+    public String firstSave() {
+        addMessage("createUser.add.success", getBean().getUserName());
+        return execute();
+    }
+
     /**
      * Save modified user profile.
      */
     public String save() {
-        
-        // custom validation
         myValidate();
         
         if (!hasActionErrors()) {
-            
-            getBean().copyTo(getUser());
-            
+            getBean().copyTo(user);
+
             // reset password if set
             if (!StringUtils.isEmpty(getBean().getPassword())) {
                 try {
-                    getUser().resetPassword(getBean().getPassword());
+                    user.resetPassword(getBean().getPassword());
                 } catch (WebloggerException e) {
                     addMessage("yourProfile.passwordResetError");
                 }
             }
-            
+
             try {
-                boolean hasAdmin = false;
                 UserManager mgr = 
WebloggerFactory.getWeblogger().getUserManager();
-                GlobalPermission adminPerm = 
+                if (isAdd()) {
+                    // fields not copied over from above copyTo():
+                    user.setUserName(getBean().getUserName());
+                    user.setDateCreated(new java.util.Date());
+                    // save new user
+                    mgr.addUser(user);
+                } else {
+                    mgr.saveUser(user);
+                }
+
+                // update Admin role as appropriate
+                boolean hasAdmin = false;
+                GlobalPermission adminPerm =
                     new 
GlobalPermission(Collections.singletonList(GlobalPermission.ADMIN));
-                if (mgr.checkPermission(adminPerm, getUser())) {
+                if (mgr.checkPermission(adminPerm, user)) {
                     hasAdmin = true;
                 }  
-                
                 // grant/revoke admin role if needed
                 if (hasAdmin && !getBean().isAdministrator()) {
-                    
                     if (!isUserEditingSelf()) {
                         // revoke role
-                        mgr.revokeRole("admin", getUser());
+                        mgr.revokeRole("admin", user);
                     } else {
                         addError("userAdmin.cantChangeOwnRole");
                     }
-                    
                 } else if(!hasAdmin && getBean().isAdministrator()) {
-                    
-                    if (!isUserEditingSelf()) {
-                        // grant role
-                        mgr.grantRole("admin", getUser());
-                    } else {
-                        addError("userAdmin.cantChangeOwnRole"); 
-                    }
-                    
-                }
-            
-                if (!AuthMethod.CMA.equals(WebloggerConfig.getAuthMethod())) {
-                    
RollerContext.flushAuthenticationUserCache(getUser().getUserName());
+                    mgr.grantRole("admin", user);
                 }
-
-                // save the updated profile
-                mgr.saveUser(getUser());
                 WebloggerFactory.getWeblogger().flush();
-                
-                addMessage("userAdmin.userSaved");
-                                
-                return INPUT;
-                
+                if (isAdd()) {
+                    // now that user is saved we have an id value
+                    // store it back in bean for use in next action
+                    bean.setId(user.getId());
+                    // route to edit mode, saveFirst() provides the success 
message.
+                    return SUCCESS;
+                } else {
+                    addMessage("userAdmin.userSaved");
+                    return INPUT;
+                }
             } catch (WebloggerException ex) {
                 log.error("ERROR in action", ex);
-                addError("userAdmin.error.unexpectedError");
+                addError("generic.error.check.logs");
             }
-            
         }
-        
         return INPUT;
     }
     
+    private boolean isAdd() {
+        return actionName.equals("createUser");
+    }
+
     // TODO: replace with struts2 validation
     private void myValidate() {
-        
-        if(getUser().getUserName() == null) {
-            addError("userAdmin.error.userNotFound");
+        if (isAdd()) {
+            String allowed = 
WebloggerConfig.getProperty("username.allowedChars");
+            if(allowed == null || allowed.trim().length() == 0) {
+                allowed = Register.DEFAULT_ALLOWED_CHARS;
+            }
+            String safe = CharSetUtils.keep(getBean().getUserName(), allowed);
+
+            if (StringUtils.isEmpty(getBean().getUserName())) {
+                addError("error.add.user.missingUserName");
+            } else if (!safe.equals(getBean().getUserName()) ) {
+                addError("error.add.user.badUserName");
+            }
+            if ((authMethod == AuthMethod.ROLLERDB ||
+                    (authMethod == AuthMethod.DB_OPENID && 
StringUtils.isEmpty(getBean().getOpenIdUrl())))
+                    && StringUtils.isEmpty(getBean().getPassword())) {
+                addError("error.add.user.missingPassword");
+            }
+        }
+        else {
+            if (user.getUserName() == null) {
+                addError("userAdmin.error.userNotFound");
+            }
         }
         if (StringUtils.isEmpty(getBean().getEmailAddress())) {
             addError("error.add.user.missingEmailAddress");
@@ -209,24 +228,8 @@ public class ModifyUser extends UIAction
         this.bean = bean;
     }
 
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-    
     public boolean isUserEditingSelf() {
-        return getUser().equals(getAuthenticatedUser());
+        return user.equals(getAuthenticatedUser());
     }
 
     public List<WeblogPermission> getPermissions() {
@@ -238,4 +241,7 @@ public class ModifyUser extends UIAction
         return new ArrayList<WeblogPermission>();
     }
 
+    public String getAuthMethod() {
+        return authMethod.name();
+    }
 }

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java
 Mon Aug 11 19:33:22 2014
@@ -51,6 +51,11 @@ public class BookmarkEdit extends UIActi
         this.desiredMenu = "editor";
     }
 
+    @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
+    }
+
     public void myPrepare() {
         if (StringUtils.isEmpty(bean.getId())) {
             // Create and initialize new, not-yet-saved WeblogBookmark

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
 Mon Aug 11 19:33:22 2014
@@ -39,18 +39,23 @@ import org.apache.struts2.interceptor.va
 public class CategoryEdit extends UIAction {
     
     private static Log log = LogFactory.getLog(CategoryEdit.class);
-    
-    // the (new or already existing) category we are editing
-    private WeblogCategory category = null;
-    
+
     // bean for managing form data
     private CategoryBean bean = new CategoryBean();
 
+    // the (new or already existing) category we are editing
+    private WeblogCategory category = null;
+
     public CategoryEdit() {
         this.desiredMenu = "editor";
     }
 
     @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
+    }
+
+    @Override
     public List<String> requiredWeblogPermissionActions() {
         return Collections.singletonList(WeblogPermission.POST);
     }
@@ -129,15 +134,7 @@ public class CategoryEdit extends UIActi
             addError("categoryForm.error.duplicateName", bean.getName());
         }
     }
-/*
-    public WeblogCategory getCategory() {
-        return category;
-    }
 
-    public void setCategory(WeblogCategory category) {
-        this.category = category;
-    }
-*/
     public CategoryBean getBean() {
         return bean;
     }

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryRemove.java
 Mon Aug 11 19:33:22 2014
@@ -57,7 +57,7 @@ public class CategoryRemove extends UIAc
     public CategoryRemove() {
         this.actionName = "categoryRemove";
         this.desiredMenu = "editor";
-        this.pageTitle = "categoriesForm.rootTitle";
+        this.pageTitle = "categoryDeleteOK.title";
     }
 
     @Override

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
 Mon Aug 11 19:33:22 2014
@@ -80,6 +80,11 @@ public final class EntryEdit extends UIA
     }
 
     @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
+    }
+
+    @Override
     public List<String> requiredWeblogPermissionActions() {
         return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
     }

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderEdit.java
 Mon Aug 11 19:33:22 2014
@@ -50,6 +50,11 @@ public class FolderEdit extends UIAction
         this.desiredMenu = "editor";
     }
 
+    @Override
+    public void setPageTitle(String pageTitle) {
+        this.pageTitle = pageTitle;
+    }
+
     // load folder to edit
     public void myPrepare() {
         if (StringUtils.isEmpty(bean.getId())) {

Modified: 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java
 (original)
+++ 
roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java
 Mon Aug 11 19:33:22 2014
@@ -305,11 +305,12 @@ public abstract class UIAction extends A
     }
 
     public void setPageTitle(String pageTitle) {
-        //this.pageTitle = pageTitle;
-        // no-op as mucks up the page titles on chains etc
+        // disabled by default as it causes page titles not
+        // to update on chain actions defined in struts.xml
+        // override in subclasses where you want this to occur.
+        // this.pageTitle = pageTitle;
     }
-    
-    
+
     public String getActionName() {
         return this.actionName;
     }

Modified: roller/trunk/app/src/main/resources/ApplicationResources.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources.properties Mon Aug 
11 19:33:22 2014
@@ -136,7 +136,7 @@ categoryForm.image=Image URL
 categoryForm.created=Category "{0}" created
 categoryForm.changesSaved=Category "{0}" updated
 categoryForm.error.duplicateName=Category name "{0}" already in use, please 
choose another
-categoryForm.removed=Category "{0}" removed
+categoryForm.removed=Category "{0}" deleted
 categoryForm.requiredFields={0} is required.
 
 # errors from validation
@@ -165,7 +165,8 @@ categoriesForm.imageUrl=Image URL
 
 # --------------------------------------------------------- 
CategoryDeleteOK.jsp
 
-categoryDeleteOK.removeCategory=Remove Weblog Category
+categoryDeleteOK.title=Delete Category
+categoryDeleteOK.removeCategory=Delete Weblog Category
 categoryDeleteOK.warningCatInUse=WARNING: This category is in use!
 categoryDeleteOK.youMustMoveEntries=You must move the weblog entries in the \
 category to another category, use the combo-box to select which category \
@@ -1072,7 +1073,8 @@ ping target site.
 ping.pingProcessingIsSuspended=Ping processing has been suspended temporarily 
by \
 a site administrator.
 
-pingTarget.pingTarget=Ping Target
+pingTarget.addTarget=Add Ping Target
+pingTarget.editTarget=Edit Ping Target
 
 pingTargetEdit.subtitle=Edit ping target
 pingTargetAdd.subtitle=Add ping target
@@ -1334,17 +1336,19 @@ yourProfile.description=Change your pass
 
 # ------------------------------------------------------------------- User 
admin
 
-userAdmin.title.searchUser=Find user to edit
+userAdmin.title.searchUser=User Administration
 userAdmin.subtitle.searchUser=Select user to administer
 userAdmin.prompt.searchUser=Find user by typing first letters of username \
 or password. Select user and click edit button to edit the user''s profile \
 and the user''s weblogs.
 
 userAdmin.title.editUser=Edit user profile
-userAdmin.subtitle.editUser=Editing profile and permissions for user 
<span>{0}</span>
+userAdmin.subtitle.editUser=Editing profile of user <span>{0}</span>
 
-userAdmin.title.createNewUser=Creating new user
-userAdmin.subtitle.createNewUser=Create new user, all fields are required.
+userAdmin.title.createNewUser=Create new user
+userAdmin.subtitle.createNewUser=Creating user
+userAdmin.addInstructions=All fields are required.
+userAdmin.editInstructions=Fill in password field only if changing user''s 
password.
 
 userAdmin.enabled=Enabled
 userAdmin.title=User Administration
@@ -1596,7 +1600,7 @@ weblogEntryRemove.entryId=Entry ID
 
 # --------------------------------------------------- Weblog Entry 
Export/Import
 
-weblogEntryQuery.title=Entry
+weblogEntryQuery.title=Blog Entries
 weblogEntryQuery.subtitle=Find and edit entries in weblog <span>{0}</span>
 weblogEntryQuery.tip=You can select an entry from the list below to edit \
 or use the Filter entries control to look for entries in a specific category, \
@@ -1803,8 +1807,7 @@ yourWebsites.todaysHits=Today''s hits
 
 # ---------------------------------------------------------------- Activating 
User Account with E-mail
 
-createUser.add.success=User {0} created.  If desired, create another new user 
below or \
-select Cancel to return to User Administration
+createUser.add.success=User created
 
 error.activate.user.missingActivationCode=Activation code is missing.
 error.activate.user.invalidActivationCode=\

Modified: roller/trunk/app/src/main/resources/ApplicationResources_de.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_de.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_de.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_de.properties Mon 
Aug 11 19:33:22 2014
@@ -573,7 +573,6 @@ pingTarget.enabled=AN
 pingTarget.malformedUrl=Die URL ist nicht korrekt aufgebaut.
 pingTarget.manual=Manuell
 pingTarget.nameNotUnique=Der Name dieses Ziels steht in Konflikt mit einem 
anderen Namen in der gleichen Zielmenge.
-pingTarget.pingTarget=Ping Ziel
 pingTarget.pingUrl=Ping URL
 pingTarget.remove=L\u00F6schen
 pingTarget.updated=Ping-Ziel "{0}" gespeichert

Modified: roller/trunk/app/src/main/resources/ApplicationResources_es.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_es.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_es.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_es.properties Mon 
Aug 11 19:33:22 2014
@@ -322,7 +322,6 @@ ping.transmissionFailed=La transmisi\u00
 ping.unknownHost=El nombre del host del objetivo ping es desconocido.
 ping.networkConnectionFailed=Hay problemas de conexi\u00F3n para alcanzar el 
sitio del objetivo ping.
 ping.pingProcessingIsSuspended=El proceso ping se ha suspendido temporalmente 
por un administrador de sitio.
-pingTarget.pingTarget=Objetivo ping
 commonPingTarget.subtitle=Editando objetivo ping personalizado
 pingTarget.pingUrl=URL para ping
 pingTarget.remove=Eliminar

Modified: roller/trunk/app/src/main/resources/ApplicationResources_fr.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_fr.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_fr.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_fr.properties Mon 
Aug 11 19:33:22 2014
@@ -676,8 +676,6 @@ Le site distant est injoignable.
 ping.pingProcessingIsSuspended=Les notifications ont été provisoirement 
suspendues par \
 l'administrateur de ce site.
 
-pingTarget.pingTarget=Adresse à notifier
-
 commonPingTarget.subtitle=Edition de l'adresse de notification commune
 
 pingTarget.pingUrl=Adresse URL

Modified: 
roller/trunk/app/src/main/resources/ApplicationResources_ja_JP.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_ja_JP.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_ja_JP.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_ja_JP.properties 
Mon Aug 11 19:33:22 2014
@@ -544,8 +544,6 @@ ping.networkConnectionFailed=\u5BFE\u8C6
 
ping.pingProcessingIsSuspended=\u73FE\u5728\u3001\u767A\u4FE1\u5148\u306E\u30E1\u30F3\u30C6\u30CA\u30F3\u30B9\u306A\u3069\u306E\u7406\u7531\u3067\
 
Ping\u3092\u53D7\u3051\u4ED8\u3051\u3066\u3082\u3089\u3048\u306A\u3044\u3088\u3046\u3067\u3059\u3002\u5F53\u8A72\u30B5\u30A4\u30C8\u306E\u30A2\u30CA\u30A6\u30F3\u30B9\u3092\u307F\u3066\u304F\u3060\u3055\u3044\u3002
 
-pingTarget.pingTarget=Ping\u30BF\u30FC\u30B2\u30C3\u30C8
-
 
commonPingTarget.subtitle=Ping\u30BF\u30FC\u30B2\u30C3\u30C8\u3092\u7DE8\u96C6\u3057\u307E\u3059
 
 pingTarget.pingUrl=Ping URL

Modified: roller/trunk/app/src/main/resources/ApplicationResources_ko.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_ko.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_ko.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_ko.properties Mon 
Aug 11 19:33:22 2014
@@ -742,8 +742,6 @@ ping.unknownHost=\uc5f0\uacb0\ud655\uc77
 ping.networkConnectionFailed=\uc5f0\uacb0\ud655\uc778 \ub300\uc0c1 
\uc0ac\uc774\ud2b8\uc5d0 \ub3c4\ub2ec\ud558\ub294 \ub370\uc5d0 
\ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0 \ubb38\uc81c\uac00 
\ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
 ping.pingProcessingIsSuspended=\uc5f0\uacb0\ud655\uc778 \ucc98\ub9ac\uac00 
\uc0ac\uc774\ud2b8 \uad00\ub9ac\uc790\uc5d0 \uc758\ud574 
\uc77c\uc2dc\uc801\uc73c\ub85c \uc911\uc9c0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
 
-pingTarget.pingTarget=\uc5f0\uacb0\ud655\uc778 \ub300\uc0c1
-
 commonPingTarget.subtitle=\uacf5\ud1b5 \uc5f0\uacb0\ud655\uc778 \ub300\uc0c1 
\ud3b8\uc9d1
 
 pingTarget.pingUrl=\uc5f0\uacb0\ud655\uc778 URL

Modified: roller/trunk/app/src/main/resources/ApplicationResources_ru.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_ru.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_ru.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_ru.properties Mon 
Aug 11 19:33:22 2014
@@ -444,8 +444,6 @@ ping.unknownHost=\u0418\u043c\u044f \u04
 ping.networkConnectionFailed=\u041f\u0440\u0438 
\u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 
\u043f\u0438\u043d\u0433\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 
\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0435\u0442\u0438
 
ping.pingProcessingIsSuspended=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c
 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 
\u043f\u0438\u043d\u0433\u0430 \u0431\u044b\u043b\u0430 
\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e 
\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430
 
\u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c
 \u0441\u0430\u0439\u0442\u0430
 
-pingTarget.pingTarget=\u0410\u0434\u0440\u0435\u0441 
\u043f\u0438\u043d\u0433\u0430
-
 
commonPingTarget.subtitle=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
 \u043e\u0431\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 
\u043f\u0438\u043d\u0433\u0430
 
 pingTarget.pingUrl=URL \u043f\u0438\u043d\u0433\u0430

Modified: 
roller/trunk/app/src/main/resources/ApplicationResources_zh_CN.properties
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources_zh_CN.properties?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/ApplicationResources_zh_CN.properties 
(original)
+++ roller/trunk/app/src/main/resources/ApplicationResources_zh_CN.properties 
Mon Aug 11 19:33:22 2014
@@ -335,7 +335,6 @@ pingTarget.enabled=\u5f00\u542f
 pingTarget.malformedUrl=URL\u683c\u5f0f\u4e0d\u6b63\u786e\u3002
 pingTarget.manual=\u624b\u52a8
 
pingTarget.nameNotUnique=\u8fd9\u4e2aPing\u76ee\u6807\u7684\u540d\u5b57\u540c\u5176Ping\u76ee\u6807\u6709\u51b2\u7a81\u3002
-pingTarget.pingTarget=Ping\u76ee\u6807
 pingTarget.pingUrl=Ping URL\u5730\u5740
 pingTarget.remove=\u5220\u9664
 pingTarget.sendPingNow=\u53d1\u9001Ping\u2026\u2026

Modified: roller/trunk/app/src/main/resources/struts.xml
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/struts.xml?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/resources/struts.xml (original)
+++ roller/trunk/app/src/main/resources/struts.xml Mon Aug 11 19:33:22 2014
@@ -172,12 +172,20 @@
         </action>
         
         <action name="createUser!*" method="{1}"
-                
class="org.apache.roller.weblogger.ui.struts2.admin.CreateUser">
+                class="org.apache.roller.weblogger.ui.struts2.admin.UserEdit">
+            <param name="actionName">createUser</param>
+            <param name="pageTitle">userAdmin.title.createNewUser</param>
             <result name="input" type="tiles">.UserEdit</result>
+            <result name="success" type="redirectAction">
+                <param name="actionName">modifyUser!firstSave</param>
+                <param name="bean.id">${bean.id}</param>
+            </result>
         </action>
-        
+
         <action name="modifyUser!*" method="{1}"
-                
class="org.apache.roller.weblogger.ui.struts2.admin.ModifyUser">
+                class="org.apache.roller.weblogger.ui.struts2.admin.UserEdit">
+            <param name="actionName">modifyUser</param>
+            <param name="pageTitle">userAdmin.title.editUser</param>
             <result name="input" type="tiles">.UserEdit</result>
             <result name="error" type="chain">userAdmin</result>
             <result name="cancel" type="redirectAction">
@@ -199,6 +207,7 @@
         <action name="commonPingTargetAdd!*" method="{1}"
                 
class="org.apache.roller.weblogger.ui.struts2.admin.PingTargetEdit">
             <param name="actionName">commonPingTargetAdd</param>
+            <param name="pageTitle">pingTarget.addTarget</param>
             <result name="input" type="tiles">.PingTargetEdit</result>
             <result name="success" type="chain">commonPingTargets</result>
         </action>
@@ -206,6 +215,7 @@
         <action name="commonPingTargetEdit!*" method="{1}"
                 
class="org.apache.roller.weblogger.ui.struts2.admin.PingTargetEdit">
             <param name="actionName">commonPingTargetEdit</param>
+            <param name="pageTitle">pingTarget.editTarget</param>
             <result name="input" type="tiles">.PingTargetEdit</result>
             <result name="success" type="chain">commonPingTargets</result>
             <result name="error" type="chain">commonPingTargets</result>

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserAdmin.jsp
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserAdmin.jsp?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserAdmin.jsp (original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserAdmin.jsp Mon Aug 
11 19:33:22 2014
@@ -18,10 +18,8 @@
 <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
 
 <script>
-<!-- //
 <%@ include file="/roller-ui/scripts/ajax-user.js" %>
-// -->
-</script> 
+</script>
 
 <p class="subtitle"><s:text name="userAdmin.subtitle.searchUser" /></p>
 <p><s:text name="userAdmin.prompt.searchUser" /></p>
@@ -30,7 +28,7 @@
        <s:hidden name="salt" />
  
     <span style="margin:4px"><s:text name="inviteMember.userName" /></span>
-    <input name="userName" id="userName" size="30" maxlength="30" 
+    <input name="bean.userName" id="userName" size="30" maxlength="30"
            onfocus="onUserNameFocus(null)" onkeyup="onUserNameChange(null)" 
            style="margin:4px" />
     <input type="submit" value='<s:text name="generic.edit" />'

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserEdit.jsp
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserEdit.jsp?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserEdit.jsp (original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/admin/UserEdit.jsp Mon Aug 11 
19:33:22 2014
@@ -33,6 +33,15 @@
     </s:text>
 </p>
 
+<p class="pagetip">
+    <s:if test="actionName == 'modifyUser'">
+        <s:text name="userAdmin.editInstructions"/>
+    </s:if>
+    <s:else>
+        <s:text name="userAdmin.addInstructions"/>
+    </s:else>
+</p>
+
 <s:form>
        <s:hidden name="salt" />
     <s:if test="actionName == 'modifyUser'">
@@ -51,13 +60,13 @@
                     <s:textfield name="bean.userName" size="30" maxlength="30" 
/>
                 </s:else>
             </td>
-            <td class="description"><s:text name="userSettings.tip.username" />
-            <s:if test="actionName == 'modifyUser'">
-                <s:text name="userSettings.tip.username" />
-            </s:if>
-            <s:else>
-                <s:text name="userAdmin.tip.userName" />
-            </s:else>
+            <td class="description">
+                <s:if test="actionName == 'modifyUser'">
+                    <s:text name="userSettings.tip.username" />
+                </s:if>
+                <s:else>
+                    <s:text name="userAdmin.tip.userName" />
+                </s:else>
             </td>
         </tr>
 

Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
URL: 
http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp?rev=1617352&r1=1617351&r2=1617352&view=diff
==============================================================================
--- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp 
(original)
+++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp Mon Aug 
11 19:33:22 2014
@@ -19,7 +19,6 @@
 
 <%-- JavaScript for categories table --%> 
 <script>
-// <!-- 
 function onMove()
 {
     if ( confirm("<s:text name='categoriesForm.move.confirm' />") ) 
@@ -28,7 +27,6 @@ function onMove()
         document.categories.submit();
     }
 }
-//-->
 </script>
 
 <p class="subtitle">


Reply via email to