You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/10/21 23:46:28 UTC

svn commit: r327589 [41/72] - in /incubator/roller/branches/roller_1.x: ./ contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/ contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/ contrib/plugins...

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerPropertiesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerPropertiesAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerPropertiesAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerPropertiesAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,178 @@
+/*
+ * RollerPropertiesAction.java
+ *
+ * Created on April 21, 2005, 2:48 PM
+ */
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.model.PropertiesManager;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.RollerPropertyData;
+import org.roller.presentation.RollerRequest;
+
+
+
+/**
+ * Struts Action class which handles requests to the Admin Properties page.
+ *
+ * @author Allen Gilliland
+ *
+ * @struts.action path="/admin/rollerConfig"
+ *  scope="request" parameter="method"
+ *
+ * @struts.action-forward name="rollerProperties.page"
+ *  path="/website/rollerProperties.jsp"
+ */
+public class RollerPropertiesAction extends DispatchAction {
+    
+    private static Log mLogger =
+            LogFactory.getFactory().getInstance(RollerPropertiesAction.class);
+    
+    
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        // make "edit" our default action
+        return this.edit(mapping, actionForm, request, response);
+    }
+    
+    
+    public ActionForward edit(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        mLogger.debug("Handling edit request");
+        
+        ActionForward forward = mapping.findForward("rollerProperties.page");
+        try {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() ) {
+                
+                // just grab our properties map and put it in the request
+                Roller mRoller = RollerFactory.getRoller();
+                PropertiesManager propsManager = mRoller.getPropertiesManager();
+                Map props = propsManager.getProperties();
+                request.setAttribute("RollerProps", props);
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+    
+    
+    public ActionForward update(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        mLogger.debug("Handling update request");
+        
+        ActionForward forward = mapping.findForward("rollerProperties.page");
+        ActionErrors errors = new ActionErrors();
+        try {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() ) {
+            
+                // just grab our properties map and put it in the request
+                Roller mRoller = RollerFactory.getRoller();
+                PropertiesManager propsManager = mRoller.getPropertiesManager();
+                Map props = propsManager.getProperties();
+                request.setAttribute("RollerProps", props);
+                
+                // only set values for properties that are already defined
+                String propName = null;
+                RollerPropertyData updProp = null;
+                String incomingProp = null;
+                Iterator propsIT = props.keySet().iterator();
+                while(propsIT.hasNext()) {
+                    propName = (String) propsIT.next();
+                    updProp = (RollerPropertyData) props.get(propName);
+                    incomingProp = request.getParameter(updProp.getName());
+                    
+                    mLogger.debug("Checking property ["+propName+"]");
+                    
+                    // some special treatment for booleans
+                    // this is a bit hacky since we are assuming that any prop
+                    // with a value of "true" or "false" is meant to be a boolean
+                    // it may not always be the case, but we should be okay for now
+                    if(updProp.getValue().equals("true") ||
+                            updProp.getValue().equals("false")) {
+                        
+                        if(incomingProp == null || !incomingProp.equals("on"))
+                            incomingProp = "false";
+                        else
+                            incomingProp = "true";
+                    }
+                    
+                    // only work on props that were submitted with the request
+                    if(incomingProp != null) {
+                        mLogger.debug("Setting new value for ["+propName+"]");
+                        
+                        // NOTE: the old way had some locale sensitive way to do this??
+                        updProp.setValue(incomingProp.trim());
+                    }
+                }
+                
+                // save it
+                propsManager.store(props);
+                mRoller.getRefererManager().applyRefererFilters();
+                mRoller.commit();
+                
+                ActionMessages uiMessages = new ActionMessages();
+                uiMessages.add(null, new ActionMessage("weblogEdit.changesSaved"));
+                saveMessages(request, uiMessages);
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+            
+        } catch (RollerPermissionsException e) {
+            errors.add(null, new ActionError("error.permissions.deniedSave"));
+            saveErrors(request, errors);
+            forward = mapping.findForward("access-denied");
+            
+        } catch (RollerException e) {
+            mLogger.error(e);
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+                    "error.update.rollerConfig",e.getClass().getName()));
+            saveErrors(request,errors);
+        }
+        
+        return forward;
+    }
+    
+}

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/ThemeEditorAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/ThemeEditorAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/ThemeEditorAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/ThemeEditorAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,435 @@
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.pojos.WeblogTemplate;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.ThemeNotFoundException;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.model.ThemeManager;
+import org.roller.model.UserManager;
+import org.roller.pojos.Theme;
+import org.roller.pojos.ThemeTemplate;
+import org.roller.presentation.pagecache.PageCacheFilter;
+
+
+/**
+ * Struts Action class that handles the website theme chooser page.
+ *
+ * @author Allen Gilliland
+ *
+ * @struts.action name="themeEditorForm" path="/editor/themeEditor"
+ *    scope="session" parameter="method"
+ *
+ * @struts.action-forward name="editTheme.page" path="/website/theme-editor.jsp"
+ */
+public class ThemeEditorAction extends DispatchAction {
+    
+    private static Log mLogger =
+            LogFactory.getFactory().getInstance(ThemeEditorAction.class);
+    
+    
+    /**
+     * Default action method.
+     */
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        // make "edit" our default action
+        return this.edit(mapping, actionForm, request, response);
+    }
+    
+    
+    /**
+     * Base action method.
+     * 
+     * Shows the theme chooser page with this users current theme selected.
+     **/
+    public ActionForward edit(
+            ActionMapping       mapping,
+            ActionForm          form,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        ActionErrors errors = new ActionErrors();
+        ActionForward forward = mapping.findForward("editTheme.page");
+        try {
+            
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() ) {
+                
+                // get users current theme and our themes list
+                Roller roller = RollerFactory.getRoller();
+                ThemeManager themeMgr = roller.getThemeManager();
+                
+                String username = rreq.getUser().getUserName();
+                WebsiteData website = roller.getUserManager().getWebsite(username);
+                String currentTheme = website.getEditorTheme();
+                List themes = themeMgr.getEnabledThemesList();
+                
+                // if we allow custom themes then add it to the end of the list
+                if(RollerRuntimeConfig.getBooleanProperty("themes.customtheme.allowed"))
+                    themes.add(Theme.CUSTOM);
+                
+                // on the first pass just show a preview of the current theme
+                request.setAttribute("previewTheme", currentTheme);
+                request.setAttribute("currentTheme", currentTheme);
+                request.setAttribute("themesList", themes);
+                
+                mLogger.debug("Previewing theme "+currentTheme+" to "+username);
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+            
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        
+        return forward;
+    }
+    
+
+    /**
+     * Preview action method.
+     *
+     * Happens when the user selects a new preview theme from the dropdown menu.
+     * Shows a new preview theme.
+     */
+    public ActionForward preview(
+            ActionMapping       mapping,
+            ActionForm          form,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        ActionErrors errors = new ActionErrors();
+        ActionForward forward = mapping.findForward("editTheme.page");
+        try {
+            
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() ) {
+
+                // get users current theme
+                Roller roller = RollerFactory.getRoller();
+                ThemeManager themeMgr = roller.getThemeManager();
+                
+                String username = rreq.getUser().getUserName();
+                WebsiteData website = roller.getUserManager().getWebsite(username);
+                String currentTheme = website.getEditorTheme();
+                List themes = themeMgr.getEnabledThemesList();
+                
+                // if we allow custom themes then add it to the end of the list
+                if(RollerRuntimeConfig.getBooleanProperty("themes.customtheme.allowed"))
+                    themes.add(Theme.CUSTOM);
+                
+                // set the current theme in the request
+                request.setAttribute("currentTheme", currentTheme);
+                request.setAttribute("themesList", themes);
+                
+                String theme = request.getParameter("theme");
+                try {
+                    Theme previewTheme = themeMgr.getTheme(theme);
+                    
+                    if(previewTheme.isEnabled()) {
+                        // make sure the view knows what theme to preview
+                        request.setAttribute("previewTheme", previewTheme.getName());
+                    
+                        mLogger.debug("Previewing theme "+previewTheme.getName()+
+                                " to "+username);
+                    } else {
+                        request.setAttribute("previewTheme", currentTheme);
+                        errors.add(null, new ActionMessage("Theme not enabled"));
+                        saveErrors(request, errors);
+                    }
+
+                } catch(ThemeNotFoundException tnfe) {
+                    // hmm ... maybe they chose "custom"?
+                    if(theme != null && theme.equals(Theme.CUSTOM)) {
+                        request.setAttribute("previewTheme", Theme.CUSTOM);
+                    } else {
+                        // we should never get here
+                        request.setAttribute("previewTheme", currentTheme);
+                        errors.add(null, new ActionMessage("Theme not found"));
+                        saveErrors(request, errors);
+                    }
+                }
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+            
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        
+        return forward;
+    }
+    
+
+    /**
+     * Save action method.
+     *
+     * Happens when the user clicks the "Save" button to set a new theme.
+     * This method simply updates the WebsiteData.editorTheme property with
+     * the value of the new theme.
+     */
+    public ActionForward save(
+            ActionMapping       mapping,
+            ActionForm          form,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        ActionErrors errors = new ActionErrors();
+        ActionForward forward = mapping.findForward("editTheme.page");
+        try {
+            
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() ) {
+                
+                String newTheme = null;
+                
+                // lookup what theme the user wants first
+                String theme = request.getParameter("theme");
+                try {
+                    Roller roller = RollerFactory.getRoller();
+                    ThemeManager themeMgr = roller.getThemeManager();
+                    Theme previewTheme = themeMgr.getTheme(theme);
+                    
+                    if(previewTheme.isEnabled()) {
+                        newTheme = previewTheme.getName();
+                    } else {
+                        errors.add(null, new ActionMessage("Theme not enabled"));
+                        saveErrors(request, errors);
+                    }
+                    
+                } catch(ThemeNotFoundException tnfe) {
+                    // possibly selected "custom"
+                    if(theme != null && theme.equals(Theme.CUSTOM)) {
+                        newTheme = Theme.CUSTOM;
+                    } else {
+                        // hmm ... that's weird
+                        mLogger.warn(tnfe);
+                        errors.add(null, new ActionMessage("Theme not found"));
+                        saveErrors(request, errors);
+                    }
+                }
+                
+                // update theme for website and save
+                if(newTheme != null) {
+                    try {
+                        Roller roller = RollerFactory.getRoller();
+                        String username = rreq.getUser().getUserName();
+                        WebsiteData website = roller.getUserManager().getWebsite(username);
+                        website.setEditorTheme(newTheme);
+                        website.save();
+                        
+                        mLogger.debug("Saved theme "+newTheme+
+                                " for "+username);
+                        
+                        // make sure to flush the page cache so ppl can see the change
+                        PageCacheFilter.removeFromCache(request, rreq.getUser());
+                
+                        // update complete ... now just send them back to edit
+                        return this.edit(mapping, form, request, response);
+                        
+                    } catch(RollerException re) {
+                        mLogger.error(re);
+                        errors.add(null, new ActionMessage("Error setting theme"));
+                        saveErrors(request, errors);
+                    }
+                }
+                
+                // if we got down here then there was an error :(
+                // send the user back to preview page with errors already set
+                return this.preview(mapping, form, request, response);
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+   
+    
+    /**
+     * Customize action method.
+     *
+     * Happens when a user clicks the "Customize" button on their current theme.
+     * This method copies down all the theme templates from the currently
+     * selected theme into the users custom template pages and updates the users
+     * theme to "custom".
+     */
+    public ActionForward customize(
+            ActionMapping       mapping,
+            ActionForm          form,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException {
+        
+        ActionErrors errors = new ActionErrors();
+        ActionForward forward = mapping.findForward("editTheme.page");
+        try {
+            
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() ) {
+                
+                // copy down current theme to weblog templates
+                Roller roller = RollerFactory.getRoller();
+                ThemeManager themeMgr = roller.getThemeManager();
+                
+                String username = rreq.getUser().getUserName();
+                WebsiteData website = roller.getUserManager().getWebsite(username);
+                
+                try {
+                    Theme usersTheme = themeMgr.getTheme(website.getEditorTheme());
+                    
+                    // only if custom themes are allowed
+                    if(RollerRuntimeConfig.getBooleanProperty("themes.customtheme.allowed")) {
+                        try {
+                            this.saveThemePages(website, usersTheme);
+                        } catch(RollerException re) {
+                            mLogger.error(re);
+                            errors.add(null, new ActionMessage("Error customizing theme"));
+                            saveErrors(request, errors);
+                        }
+                        
+                        // make sure to flush the page cache so ppl can see the change
+                        PageCacheFilter.removeFromCache(request, rreq.getUser());
+                    }
+                    
+                } catch(ThemeNotFoundException tnfe) {
+                    // this catches the potential case where someone customizes
+                    // a theme and has their theme as "custom" but then hits the
+                    // browser back button and presses the button again, so
+                    // they are basically trying to customize a "custom" theme
+                    
+                    // log this as a warning just in case
+                    mLogger.warn(tnfe);
+                    
+                    // show the user an error message and let things go back
+                    // to the edit page
+                    errors.add(null, new ActionMessage("Oops!  You already have a custom theme."));
+                }
+                
+                // just take the user back home to the edit theme page
+                return this.edit(mapping, form, request, response);
+                
+            } else {
+                forward = mapping.findForward("access-denied");
+            }
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+    
+    
+    /**
+     * Helper method that copies down the pages from a given theme into a
+     * users weblog templates.
+     *
+     * @param rreq Request wrapper.
+     * @param theme Name of theme to save.
+     * @throws RollerException
+     */
+    private void saveThemePages(WebsiteData website, Theme theme)
+        throws RollerException {
+        
+        mLogger.debug("Setting custom templates for website: "+website.getName());
+        
+        try {
+            UserManager userMgr = RollerFactory.getRoller().getUserManager();
+            
+            Collection templates = theme.getTemplates();
+            Iterator iter = templates.iterator();
+            ThemeTemplate theme_template = null;
+            while ( iter.hasNext() ) {
+                theme_template = (ThemeTemplate) iter.next();
+                //String pageContent = (String) templates.get( pageName );
+                
+                WeblogTemplate template = 
+                        userMgr.getPageByName(website, theme_template.getName());
+                if (template != null) {
+                    // User already has page by that name, so overwrite it.
+                    template.setContents(theme_template.getContents());
+                    
+                } else {
+                    // User does not have page by that name, so create new page.
+                    template = new WeblogTemplate( null,
+                            website,                            // website
+                            theme_template.getName(),           // name
+                            theme_template.getDescription(),    // description
+                            theme_template.getName(),           // link
+                            theme_template.getContents(),       // contents
+                            new Date()                          // last mod
+                            );
+                    userMgr.storePage( template );
+                }
+            }
+            
+            // now update this website's theme to custom
+            website.setEditorTheme(Theme.CUSTOM);
+            
+            // if this is the first time someone is customizing a theme then
+            // we need to set a default page
+            if(website.getDefaultPageId() == null ||
+                    website.getDefaultPageId().equals("dummy")) {
+                // we have to go back to the db to figure out the id
+                WeblogTemplate template = userMgr.getPageByName(website, "Weblog");
+                if(template != null) {
+                    mLogger.debug("Setting default page to "+template.getId());
+                    website.setDefaultPageId(template.getId());
+                }
+                
+                // we also want to set the weblogdayid
+                WeblogTemplate dayTemplate = userMgr.getPageByName(website, "_day");
+                if(dayTemplate != null) {
+                    mLogger.debug("Setting default day page to "+dayTemplate.getId());
+                    website.setWeblogDayPageId(dayTemplate.getId());
+                }
+            }
+            
+            // save our updated website
+            userMgr.storeWebsite(website);
+            
+            // commit?  i still don't understand when this is needed :/
+            RollerFactory.getRoller().commit();
+            
+        } catch (Exception e) {
+            mLogger.error("ERROR in action",e);
+            throw new RollerException( e );
+        }
+        
+    }
+}

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UploadFileFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UploadFileFormAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UploadFileFormAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UploadFileFormAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,221 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.upload.FormFile;
+import org.roller.RollerException;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.model.FileManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.website.formbeans.UploadFileForm;
+import org.roller.util.RollerMessages;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * @struts.action name="uploadFiles" path="/editor/uploadFiles"
+ *  	parameter="method" scope="request" validate="false"
+ * 
+ * @struts.action-forward name="uploadFiles.page" path="/website/upload-file.jsp"
+ */
+public final class UploadFileFormAction extends DispatchAction
+{
+    private static Log mLogger = 
+        LogFactory.getFactory().getInstance(UploadFileFormAction.class);
+
+    /**
+     * Request to upload files
+     */
+    public ActionForward upload(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        RollerRequest rreq = null;
+        ActionForward fwd = mapping.findForward("uploadFiles.page");
+        UserData user = null;
+        WebsiteData website = null;
+        RollerMessages msgs = new RollerMessages();
+        try
+        {
+            rreq = RollerRequest.getRollerRequest(request);
+            if ( !rreq.isUserAuthorizedToEdit() )
+            {
+                return mapping.findForward("access-denied");
+            }
+            website = rreq.getWebsite();
+            user = website.getUser();
+        }
+        catch (Exception e)
+        {
+            mLogger.warn("Unable to find user.");
+            return fwd;
+        }
+
+        ActionErrors errors = new ActionErrors();
+        UploadFileForm theForm = (UploadFileForm)actionForm;
+        if ( theForm.getUploadedFile() != null )
+        {
+            ServletContext app = servlet.getServletConfig().getServletContext();
+
+            boolean uploadEnabled = 
+                    RollerRuntimeConfig.getBooleanProperty("uploads.enabled");
+            
+            if ( !uploadEnabled )
+            {
+                errors.add(ActionErrors.GLOBAL_ERROR,
+                    new ActionError("error.upload.disabled", ""));
+                saveErrors(request, errors);
+                return fwd;
+            }
+
+            //this line is here for when the input page is upload-utf8.jsp,
+            //it sets the correct character encoding for the response
+            String encoding = request.getCharacterEncoding();
+            if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
+            {
+                response.setContentType("text/html; charset=utf-8");
+            }
+
+            //retrieve the file representation
+            //FormFile[] files = theForm.getUploadedFiles();
+            FormFile[] files = new FormFile[]{theForm.getUploadedFile()};
+            int fileSize = 0;
+            try
+            {
+                for (int i=0; i<files.length; i++)
+                {
+                    if (files[i] == null) continue;
+
+                    // retrieve the file name
+                    String fileName= files[i].getFileName();
+                	   int terminated = fileName.indexOf("\000");
+                	   if (terminated != -1) 
+                    {
+                		  // disallow sneaky null terminated strings
+                		  fileName = fileName.substring(0, terminated).trim();
+                    }
+                    
+                    fileSize = files[i].getFileSize();
+                    
+                    //retrieve the file data
+                    FileManager fmgr = rreq.getRoller().getFileManager();
+                    if (fmgr.canSave(website, fileName, fileSize, msgs))
+                    {
+                        InputStream stream = files[i].getInputStream();
+                        fmgr.saveFile(website, fileName, fileSize, stream);
+                    }
+
+                    //destroy the temporary file created
+                    files[i].destroy();
+                }
+            }
+            catch (Exception e)
+            {
+                errors.add(ActionErrors.GLOBAL_ERROR,
+                    new ActionError("error.upload.file",e.toString()));
+            }
+        }
+        Iterator iter = msgs.getErrors();
+        while (iter.hasNext())
+        {
+            RollerMessages.RollerMessage error = 
+                (RollerMessages.RollerMessage) iter.next();
+            errors.add(ActionErrors.GLOBAL_ERROR, 
+                new ActionError(error.getKey(), error.getArgs()));
+        }
+        saveErrors(request, errors);
+        return fwd;
+    }
+
+    /**
+     * Request to delete files
+     */
+    public ActionForward delete(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionErrors errors = new ActionErrors();
+        UploadFileForm theForm = (UploadFileForm)actionForm;
+        ActionForward fwd = mapping.findForward("uploadFiles.page");
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        try
+        {
+            FileManager fmgr = rreq.getRoller().getFileManager();
+            WebsiteData website = rreq.getWebsite();
+            String[] deleteFiles = theForm.getDeleteFiles();
+            for (int i=0; i<deleteFiles.length; i++)
+            {
+                if (    deleteFiles[i].trim().startsWith("/")
+            	        || deleteFiles[i].trim().startsWith("\\")
+                     || deleteFiles[i].indexOf("..") != -1)
+            	   {
+            		   // ignore absolute paths, or paths that contiain '..'
+            	   }
+            	   else 
+            	   {
+                    fmgr.deleteFile(website, deleteFiles[i]);
+            	   }
+            }
+        }
+        catch (Exception e)
+        {
+            errors.add(ActionErrors.GLOBAL_ERROR,
+                new ActionError("error.upload.file",e.toString()));
+            saveErrors(request,errors);
+        }
+        return fwd;
+    }
+
+
+    /**
+     * Load file-listings page.
+     */
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+        throws IOException, ServletException
+    {       
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( !rreq.isUserAuthorizedToEdit() )
+            {
+                return mapping.findForward("access-denied");
+            }
+        }
+        catch (RollerException re)
+        {
+            mLogger.error("Unexpected exception",re.getRootCause());
+            throw new ServletException(re);
+        }
+        return mapping.findForward("uploadFiles.page"); 
+    }
+
+}
+

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserAdminAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserAdminAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserAdminAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserAdminAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,267 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.roller.RollerException;
+import org.roller.business.search.operations.RebuildUserIndexOperation;
+import org.roller.business.search.operations.RemoveUserIndexOperation;
+import org.roller.model.IndexManager;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.presentation.website.formbeans.UserAdminForm;
+import org.roller.util.StringUtils;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Actions for administering a user allow user query, edit, and delete of users.
+ * 
+ * @struts.action name="userAdminForm" path="/admin/user"
+ *  	scope="request" parameter="method"
+ * 
+ * @struts.action-forward name="adminUser.page" path="/website/UserAdmin.jsp"
+ */
+public final class UserAdminAction extends UserBaseAction
+{
+    private static Log mLogger = 
+        LogFactory.getFactory().getInstance(UserAdminAction.class);
+
+    //-----------------------------------------------------------------------
+    /** 
+     * Show query for user page or, if userName specified in request, show
+     * the admin user page for the specified user.
+     */
+    public ActionForward edit(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("adminUser.page");
+        ActionMessages msgs = new ActionMessages();
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() )
+            {
+                UserAdminForm userForm = (UserAdminForm)actionForm;
+                UserManager mgr = rreq.getRoller().getUserManager();
+                
+                if (userForm != null && userForm.getUserName() != null)
+                {
+                    UserData user = mgr.getUser( userForm.getUserName(), false );                    
+                    if (user != null)
+                    {
+                        userForm.copyFrom(user, request.getLocale());
+                        
+                        // User must set new password twice
+                        userForm.setPasswordText(null);
+                        userForm.setPasswordConfirm(null);
+                        
+                        // Join in the website enabled field
+                        WebsiteData website = 
+                            mgr.getWebsite(userForm.getUserName(), false);
+                        userForm.setUserEnabled(website.getIsEnabled());
+                    }
+                    else
+                    {
+                        msgs.add(ActionMessages.GLOBAL_MESSAGE,
+                            new ActionMessage("userAdmin.invalidNewUserName"));
+                        userForm.setUserName("");
+                    }
+                }
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        
+        if (request.getSession().getAttribute("cookieLogin") != null) 
+        {
+            // TODO: make it possible to change passwords regardless of remember me
+            msgs.add(ActionMessages.GLOBAL_MESSAGE, 
+                    new ActionMessage("userAdmin.cookieLogin"));
+        }
+        
+         saveMessages(request, msgs);
+         return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /** 
+     * Process POST of edited user data, may cause delete of user. 
+     */
+    public ActionForward update(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("adminUser.page");
+        ActionMessages msgs = new ActionMessages();
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() )
+            {
+                UserAdminForm userForm = (UserAdminForm)actionForm;
+                UserManager mgr = rreq.getRoller().getUserManager();
+                
+                // Need system user to update user
+                rreq.getRoller().setUser(UserData.SYSTEM_USER);
+
+			   UserData user = mgr.retrieveUser(userForm.getId());
+                userForm.copyTo(user, request.getLocale()); // doesn't copy password
+
+                if (userForm.getDelete())
+                {
+                    // TODO: ask are you sure before deleting user
+                    PageCacheFilter.removeFromCache( request, user );
+                    user = deleteUser(mapping, request, rreq, userForm, mgr, user);
+                    
+                    msgs.add(ActionMessages.GLOBAL_MESSAGE,
+                            new ActionMessage("userSettings.deleted"));
+                    saveMessages(request, msgs);
+                }
+                else
+                {
+                    // If user set both password and passwordConfirm then reset 
+                    if (    !StringUtils.isEmpty(userForm.getPasswordText()) 
+                         && !StringUtils.isEmpty(userForm.getPasswordConfirm()))
+                    {
+                        try
+                        {
+                            user.resetPassword(rreq.getRoller(), 
+                               userForm.getPasswordText(), 
+                               userForm.getPasswordConfirm());
+                        }
+                        catch (RollerException e)
+                        {
+                            msgs.add(ActionMessages.GLOBAL_MESSAGE, 
+                              new ActionMessage("userSettings.passwordResetError"));
+                        }
+                    }
+                    
+                    // Persist changes to user
+                    mgr.storeUser( user );
+                    rreq.getRoller().commit(); 
+                    
+                    // Flush both main page and regular page caches
+                    refreshIndexCache(request, rreq, userForm);      
+                    PageCacheFilter.removeFromCache( request, user );
+                    
+                    msgs.add(ActionMessages.GLOBAL_MESSAGE,
+                        new ActionMessage("userSettings.saved"));
+                    saveMessages(request, msgs);
+                }
+                
+                // Operation complete, return to edit action
+                userForm.setUserName(null); 
+                return edit(mapping, actionForm, request, response);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+	/** Delete specified user and remove associated entries from the cache. */
+    private UserData deleteUser(
+            ActionMapping mapping, 
+            HttpServletRequest request, 
+            RollerRequest rreq, 
+            UserAdminForm uaf, 
+            UserManager mgr, 
+            UserData ud) throws RollerException
+    {
+        // remove user's Entries from Lucene index
+        IndexManager indexManager = rreq.getRoller().getIndexManager();
+        indexManager.removeUserIndex(ud); 
+        
+        // delete user from database
+        ud.remove();
+        rreq.getRoller().commit();
+        PageCacheFilter.removeFromCache( request, ud );
+        ud = null;
+
+        request.getSession().setAttribute(
+            RollerSession.STATUS_MESSAGE,
+                uaf.getUserName() + " has been deleted");
+
+        uaf.reset(mapping, request);
+        
+        List users = mgr.getUsers(false);
+        request.setAttribute("users", users);
+        return ud;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+	 * Rebuild a user's search index.
+	 */
+	public ActionForward index(
+		ActionMapping       mapping,
+		ActionForm          actionForm,
+		HttpServletRequest  request,
+		HttpServletResponse response)
+		throws IOException, ServletException
+	{
+		try
+		{
+			RollerRequest rreq = RollerRequest.getRollerRequest(request);
+			if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() )
+			{
+				UserAdminForm uaf = (UserAdminForm)actionForm;
+				
+				// if admin requests an index be re-built, do it
+				IndexManager manager = rreq.getRoller().getIndexManager();								 
+				manager.rebuildUserIndex();
+ 				request.getSession().setAttribute(
+					RollerSession.STATUS_MESSAGE,
+						"Successfully scheduled rebuild of index for '" 
+						+ uaf.getUserName() + "'");
+			}
+		}
+		catch (Exception e)
+		{
+			mLogger.error("ERROR in action",e);
+			throw new ServletException(e);
+		}
+		return edit(mapping, actionForm, request, response);
+	}
+
+}
+

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserBaseAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserBaseAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserBaseAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserBaseAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,255 @@
+
+package org.roller.presentation.website.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.website.formbeans.UserAdminForm;
+import org.roller.presentation.website.formbeans.UserFormEx;
+import org.roller.util.Utilities;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.TreeSet;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import org.roller.model.RollerFactory;
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Base class for user actions.
+ */
+public class UserBaseAction extends DispatchAction
+{
+    private static Log mLogger =
+        LogFactory.getFactory().getInstance(UserBaseAction.class);
+
+    protected static Collection locales = null;
+    protected static Collection timezones = null;
+
+    //------------------------------------------------------------------------
+    /** Validate user form. TODO: replace with Struts validation. */
+    protected ActionMessages validate( UserFormEx form, ActionMessages errors ) {
+
+        String safe = Utilities.replaceNonAlphanumeric(form.getUserName());
+        if ( "".equals(form.getUserName().trim()))
+        {
+            errors.add( ActionErrors.GLOBAL_ERROR,
+               new ActionError("error.add.user.missingUserName"));
+        }
+        else if ( !safe.equals(form.getUserName()) )
+        {
+            errors.add( ActionErrors.GLOBAL_ERROR,
+               new ActionError("error.add.user.badUserName"));
+        }
+
+        if ( "".equals(form.getEmailAddress().trim()))
+        {
+            errors.add( ActionErrors.GLOBAL_ERROR,
+               new ActionError("error.add.user.missingEmailAddress"));
+        }
+        return errors;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Load Themes, Timezones, and Locales into the
+     * request for use in the UI.  As possible, also
+     * set the User's Website's Timezone and Locale
+     * into the Form object.
+     *
+     * @param request
+     * @param rreq
+     * @param ud
+     * @param form
+     * @throws RollerException
+     */
+    protected void loadRequestObjects(
+        HttpServletRequest request,
+        RollerRequest rreq,
+        UserData ud,
+        UserFormEx form)
+        throws RollerException
+    {
+        // prepare themes for interface
+        ServletContext ctx = rreq.getServletContext();
+        RollerContext rollerContext = RollerContext.getRollerContext(ctx);
+        List themes = 
+                RollerFactory.getRoller().getThemeManager().getEnabledThemesList();
+        request.setAttribute( "themes", themes );
+
+        // prepare locales & timezones
+        if (ud != null)
+        {
+            UserManager mgr = rreq.getRoller().getUserManager();
+            WebsiteData website = mgr.getWebsite(ud.getUserName());
+            form.setLocale( website.getLocale() );
+            form.setTimezone( website.getTimezone() );
+            form.setTheme( website.getEditorTheme() );
+        }
+        else
+        {
+            form.setLocale( Locale.getDefault().getDisplayName() );
+            form.setTimezone( TimeZone.getDefault().getID() );
+        }
+        loadOptionLists(request);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * If necessary, load the available Locales and Timezones
+     * into the static members.
+     * As a convenience this method places the Collections into
+     * request attributes roller.locales and roller.timezones.
+     *
+     * @author lance.lavandowska
+     */
+    protected void loadOptionLists(HttpServletRequest request)
+    {
+        // load Locales if necessary
+        if (UserBaseAction.locales == null)
+        {
+			loadLocaleCollection();
+        }
+        request.setAttribute("roller.locales", UserBaseAction.locales);
+
+        // load Timezones if necessary
+        if (UserBaseAction.timezones == null)
+        {
+			loadTimeZoneCollection();
+        }
+        request.setAttribute("roller.timezones", UserBaseAction.timezones);
+    }
+
+    //-----------------------------------------------------------------------
+	/**
+     * LabelValueBeans are Comparable but violate the
+     * equals() part of the TreeSet requirements.
+     * And the html:options tag won't recognize
+     * toString as a property.  So we have to put the
+     * Locales into a TreeSet to sort them, then convert
+     * them to LabelValueBeans to display them.
+     * Glad we only have to do this once.
+	 * 
+	 */
+    protected void loadLocaleCollection() 
+    {
+		java.util.ArrayList myLocales = new java.util.ArrayList();
+		TreeSet locTree = new TreeSet(new org.roller.util.LocaleComparator());
+		Locale[] localeArray = Locale.getAvailableLocales();
+		for (int i=0; i<localeArray.length; i++)
+		{
+			locTree.add(localeArray[i]);
+		}
+		java.util.Iterator it = locTree.iterator();
+		while (it.hasNext())
+		{
+			Locale loc = (Locale)it.next();
+		    myLocales.add(new org.apache.struts.util.LabelValueBean(
+		       loc.getDisplayName(),
+		       loc.toString()));
+		}
+		UserBaseAction.locales = myLocales;
+	}
+
+    //-----------------------------------------------------------------------
+    /**
+     * html:options tag recognizes "ID" as a property
+     * so we don't have to go through all the rigamarole (sp?)
+     * that we did for Locales.
+     * 
+     */
+    protected void loadTimeZoneCollection() 
+    {
+        Date today = new Date();
+        java.util.ArrayList myZones = new java.util.ArrayList();
+        TreeSet zoneTree = new TreeSet(new org.roller.util.TimeZoneComparator());
+        String[] zoneArray = TimeZone.getAvailableIDs();
+        for (int i=0; i<zoneArray.length; i++)
+        {
+            zoneTree.add((TimeZone)TimeZone.getTimeZone(zoneArray[i]));
+        }
+        java.util.Iterator it = zoneTree.iterator();
+        while (it.hasNext())
+        {
+            StringBuffer sb = new StringBuffer();
+            TimeZone zone = (TimeZone)it.next();
+            sb.append(zone.getDisplayName(zone.inDaylightTime(today), TimeZone.SHORT));
+            sb.append(" - ");
+            sb.append(zone.getID());
+            myZones.add(new org.apache.struts.util.LabelValueBean(
+               sb.toString(),
+               zone.getID()));
+        }
+        UserBaseAction.timezones = myZones;
+    }
+    
+    //-----------------------------------------------------------------------
+    /**
+     * Check to see if the value of "userEnabled" has changed.
+     * If so, update User's Website and save, and refresh the Index page cache.
+     * 
+     * @param request
+     * @param rreq
+     * @param uaf
+     * @throws RollerException
+     */
+    protected void refreshIndexCache(HttpServletRequest request,
+            RollerRequest rreq, UserAdminForm uaf) throws RollerException
+    {
+        WebsiteData website = rreq.getRoller().getUserManager().getWebsite(
+                uaf.getUserName(), false);
+        boolean refreshIndexCache = false;
+        if (request.getParameter("userEnabled") == null)
+        {
+            // only change it if it is a change
+            if (uaf.getUserEnabled() == null
+                    || website.getIsEnabled().booleanValue())
+            {
+                uaf.setUserEnabled(Boolean.FALSE);
+                refreshIndexCache = true;
+            }
+        }
+        else
+        {
+            // only change it if it is a change
+            if (uaf.getUserEnabled() == null
+                    || website.getIsEnabled().booleanValue() == false)
+            {
+                uaf.setUserEnabled(Boolean.TRUE);
+                refreshIndexCache = true;
+            }
+        }
+
+        if (refreshIndexCache)
+        {
+            // set Website.isEnabled to match uaf.getUserEnabled()
+            website.setIsEnabled(uaf.getUserEnabled());
+            website.save();
+
+            // refresh the front page cache
+            MainPageAction.flushMainPageCache();
+        }
+    }
+}
+
+
+
+
+
+

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserEditAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserEditAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserEditAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserEditAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,179 @@
+package org.roller.presentation.website.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.roller.RollerException;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.presentation.website.formbeans.UserFormEx;
+import org.roller.util.StringUtils;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Actions for editing your user information.
+ * 
+ * @struts.action name="userFormEx" path="/editor/user" 
+ * 		scope="session" parameter="method"
+ * 
+ * @struts.action-forward name="editUser.page" path="/website/UserEdit.jsp"
+ */
+public class UserEditAction extends UserBaseAction
+{
+    private static Log mLogger =
+        LogFactory.getFactory().getInstance(UserEditAction.class);
+
+    //-----------------------------------------------------------------------
+    /** Handle GET for user edit page */
+    public ActionForward edit(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editUser.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                UserData ud = rreq.getUser();
+                request.setAttribute("user",ud);
+
+                UserFormEx form = (UserFormEx)actionForm;
+                form.copyFrom(ud, request.getLocale());
+                
+                // User must set new password twice
+                form.setPasswordText(null);
+                form.setPasswordConfirm(null);
+
+                loadRequestObjects(request, rreq, ud, form);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        
+        // if user logged in with a cookie, display a warning that they
+        // can't change passwords
+        if (mLogger.isDebugEnabled()) 
+        {
+            log.debug("checking for cookieLogin...");
+        }
+
+        if (request.getSession().getAttribute("cookieLogin") != null) {
+            ActionMessages messages = new ActionMessages();
+
+            // add warning messages
+            messages.add(ActionMessages.GLOBAL_MESSAGE,
+                         new ActionMessage("userSettings.cookieLogin"));
+            saveMessages(request, messages);
+        }
+        
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /** Handle POST from user edit form */
+    public ActionForward update(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        UserFormEx form = (UserFormEx)actionForm;
+        ActionForward forward = mapping.findForward("editUser.page");
+        ActionMessages msgs = new ActionMessages();
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if (rreq.isUserAuthorizedToEdit())
+            {
+                ActionMessages errors = validate(form, new ActionErrors());
+                if (errors.size() == 0)
+                {
+                    UserManager mgr = rreq.getRoller().getUserManager();
+                    UserData data = mgr.getUser( form.getUserName() );
+                    
+                    // Need system user to update new user
+                    rreq.getRoller().setUser(UserData.SYSTEM_USER);
+                    
+                    // Copy data from form to persistent object (won't copy over password)
+                    form.copyTo(data, request.getLocale());
+                    
+                    // If user set both password and passwordConfirm then reset password
+                    if (    !StringUtils.isEmpty(form.getPasswordText()) 
+                         && !StringUtils.isEmpty(form.getPasswordConfirm()))
+                    {
+                        try
+                        {
+                            data.resetPassword(rreq.getRoller(), 
+                               form.getPasswordText(), 
+                               form.getPasswordConfirm());
+                        }
+                        catch (RollerException e)
+                        {
+                            msgs.add(ActionMessages.GLOBAL_MESSAGE, 
+                                new ActionMessage("userSettings.passwordResetError"));
+                        }
+                    } 
+                
+                    // Set website fields
+                    WebsiteData website = mgr.getWebsite(data.getUserName());
+                    website.setEditorTheme(form.getTheme());
+                    website.setLocale(form.getLocale());
+                    website.setTimezone(form.getTimezone());
+    
+                    // Persist changes
+                    mgr.storeUser( data );
+                    mgr.storeWebsite( website );
+                    rreq.getRoller().commit();
+                    PageCacheFilter.removeFromCache( request,data );
+    
+                    msgs.add(null, new ActionMessage("userSettings.saved"));
+                    saveMessages(request, msgs);
+                }
+                else 
+                {
+                    saveErrors(request, errors);
+                }
+                return edit(mapping, actionForm, request, response);
+            }
+            return mapping.findForward("access-denied");
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+    }
+    
+}
+
+
+
+
+
+

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserNewAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserNewAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserNewAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/UserNewAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,206 @@
+
+package org.roller.presentation.website.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.roller.RollerException;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.presentation.website.formbeans.UserFormEx;
+import org.roller.util.StringUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.roller.config.RollerRuntimeConfig;
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Actions for creating a new user.
+ * 
+ * @struts.action name="userFormEx" path="/user" 
+ * 		scope="session" parameter="method"
+ * 
+ * @struts.action-forward name="registerUser.page" path="/website/UserNew.jsp"
+ * @struts.action-forward name="welcome.page" path="/website/welcome.jsp"
+ */
+public class UserNewAction extends UserBaseAction
+{
+    private static Log mLogger =
+        LogFactory.getFactory().getInstance(UserNewAction.class);
+
+    //------------------------------------------------------------------------
+    /** Process GET of new user page (allows admin to create a user) */
+    public ActionForward createUser(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        UserFormEx userForm = (UserFormEx)actionForm;
+        userForm.setAdminCreated(true);
+        return registerUser(mapping, actionForm, request, response);
+    }
+    
+    //------------------------------------------------------------------------
+    /** Process GET of user registration page (allows users to register themselves. */
+    public ActionForward registerUser(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("registerUser.page");
+        ActionErrors errors = new ActionErrors();
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        try
+        {
+            UserFormEx userForm = (UserFormEx)actionForm;
+            loadRequestObjects(request, rreq, null, userForm);
+            userForm.setLocale(request.getLocale().toString());
+                
+            // User must set new password twice
+            userForm.setPasswordText(null);
+            userForm.setPasswordConfirm(null);           
+        }
+        catch (Exception e)
+        {
+            errors.add(ActionErrors.GLOBAL_ERROR,
+                new ActionError("error.editing.user", e.toString()));
+            mLogger.error("ERROR in newUser", e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /** Process POST of new user information. */
+    public ActionForward add(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        UserFormEx form = (UserFormEx)actionForm;
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        ServletContext ctx = rreq.getServletContext();
+        RollerContext rollerContext = RollerContext.getRollerContext(ctx);
+
+        boolean reg_allowed = 
+                RollerRuntimeConfig.getBooleanProperty("users.registration.enabled");
+
+        if ( !reg_allowed && !request.isUserInRole("admin"))
+        {
+            throw new ServletException("New users disabled!");
+        }
+
+        ActionMessages msgs = new ActionMessages();
+        ActionMessages errors = validate(form, new ActionErrors());
+        if (!errors.isEmpty())
+        {
+            saveErrors(request, errors);
+        }
+        else try
+        {
+            // Add new user
+            UserManager mgr = rreq.getRoller().getUserManager(); 
+            
+            // Need system user to add new user
+            rreq.getRoller().setUser(UserData.SYSTEM_USER);
+
+            UserData ud = new UserData();
+            form.copyTo(ud, request.getLocale()); // doesn't copy password
+            ud.setId(null);
+            ud.setDateCreated(new java.util.Date());
+
+            // If user set both password and passwordConfirm then reset password
+            if (    !StringUtils.isEmpty(form.getPasswordText()) 
+                 && !StringUtils.isEmpty(form.getPasswordConfirm()))
+            {
+               ud.resetPassword(rreq.getRoller(), 
+                  form.getPasswordText(), form.getPasswordConfirm());
+            }
+            
+            String theme = form.getTheme();
+            // this used to have theme pages before we had shared themes -- Allen G
+            HashMap pages = new HashMap();
+            mgr.addUser( ud, pages, theme, form.getLocale(), form.getTimezone() );
+            rreq.getRoller().commit();
+
+			// Flush cache so user will immediately appear on index page
+            PageCacheFilter.removeFromCache( request, ud );
+            MainPageAction.flushMainPageCache();
+
+            if (form.getAdminCreated()) 
+            {
+                // User created for admin, so return to new user page with empty form
+                msgs.add(ActionMessages.GLOBAL_MESSAGE, 
+                    new ActionMessage("newUser.created"));
+                saveMessages(request, msgs);
+                form.reset(mapping, request);
+                return createUser(mapping, actionForm, request, response);
+            }
+            else 
+            {
+                // User registered, so go to welcome page
+                String weblogURL = rollerContext.getAbsoluteContextUrl(request)
+                                 + "/page/"+ud.getUserName();
+                request.setAttribute("weblogURL",weblogURL);   
+                String rssURL = rollerContext.getAbsoluteContextUrl(request)
+                              + "/rss/"+ud.getUserName();
+                request.setAttribute("rssURL",rssURL);  
+                request.setAttribute("contextURL", 
+                                 rollerContext.getAbsoluteContextUrl(request));
+                return mapping.findForward("welcome.page");
+            }
+        }
+        catch (RollerException e)
+        {
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(e.getMessage()));
+            saveErrors(request,errors);          
+            mLogger.error("ERROR in addUser", e);
+            form.setUserName("");
+        }
+
+        if (form.getAdminCreated()) 
+        {
+            return mapping.findForward("createUser");
+        }
+        else 
+        {
+            // Error occured, send user back to new user form
+            return mapping.findForward("registerUser");
+        }
+    }
+
+    //------------------------------------------------------------------------
+    /** Validate user form. TODO: replace with Struts validation. */
+    protected ActionMessages validate( UserFormEx form, ActionMessages errors ) {
+        super.validate(form, errors);
+        if (    StringUtils.isEmpty(form.getPasswordText())
+             && StringUtils.isEmpty(form.getPasswordConfirm()))
+        {
+            errors.add( ActionErrors.GLOBAL_ERROR,
+               new ActionError("error.add.user.missingPassword"));
+        }
+        return errors;
+    }
+}
\ No newline at end of file

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WeblogTemplateFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WeblogTemplateFormAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WeblogTemplateFormAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WeblogTemplateFormAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,373 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.model.UserManager;
+import org.roller.pojos.Template;
+import org.roller.pojos.WeblogTemplate;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.forms.WeblogTemplateForm;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.util.StringUtils;
+import org.roller.util.Utilities;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Page form action.
+ * @struts.action name="weblogTemplateForm" path="/editor/page"
+ *  	scope="session" parameter="method"
+ * 
+ * @struts.action-forward name="removePage.page" path="/website/remove-page.jsp"
+ * @struts.action-forward name="editPage.page" path="/website/edit-page.jsp"
+ * @struts.action-forward name="editPages.page" path="/website/edit-pages.jsp"
+ */
+public final class WeblogTemplateFormAction extends DispatchAction
+{
+    private static Log mLogger = 
+        LogFactory.getFactory().getInstance(WeblogTemplateFormAction.class);
+        
+    public ActionForward add(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editPages.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+                WeblogTemplate data = new WeblogTemplate();
+                form.copyTo(data, request.getLocale());
+                WebsiteData hd = rreq.getWebsite();
+
+                data.setWebsite( hd );
+                data.setLastModified( new java.util.Date() );
+                data.setDescription("");
+                data.setContents("");
+                validateLink( data );
+
+                UserManager mgr = rreq.getRoller().getUserManager();
+                mgr.storePage( data );
+                rreq.getRoller().commit();
+
+                ActionMessages uiMessages = new ActionMessages();
+                uiMessages.add(ActionMessages.GLOBAL_MESSAGE, 
+                        new ActionMessage("pagesForm.addNewPage.success", 
+                                data.getName()));
+                saveMessages(request, uiMessages);
+                
+                UserData user = rreq.getUser();
+                PageCacheFilter.removeFromCache( request, user );
+                    
+                actionForm.reset(mapping,request);                
+                
+                addModelObjects(rreq);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward edit(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editPage.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                UserData ud = rreq.getUser();
+                WeblogTemplate pd = (WeblogTemplate) rreq.getPage();
+                WeblogTemplateForm pf = (WeblogTemplateForm)actionForm;
+                pf.copyFrom(pd, request.getLocale());
+
+                PageCacheFilter.removeFromCache( request,ud );
+                
+                addModelObjects(rreq);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward editPages(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editPages.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                addModelObjects(rreq);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward remove(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editPages");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+                WeblogTemplate data = new WeblogTemplate();
+                form.copyTo(data, request.getLocale());
+
+                UserManager mgr = rreq.getRoller().getUserManager();
+                mgr.removePageSafely( data.getId() );
+                rreq.getRoller().commit();
+
+                UserData user = rreq.getUser();
+                PageCacheFilter.removeFromCache( request,user );
+                    
+                addModelObjects(rreq);
+
+                actionForm.reset(mapping,request);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (RollerException e)
+        {
+            ActionErrors errors = new ActionErrors();
+            errors.add(null, new ActionError(
+                    "error.internationalized",e.getRootCauseMessage()));
+            saveErrors(request, errors);       
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward removeOk(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("removePage.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogTemplate cd = (WeblogTemplate) rreq.getPage();
+                WeblogTemplateForm pf = (WeblogTemplateForm)actionForm;
+                pf.copyFrom(cd, request.getLocale());
+
+                UserData ud = rreq.getUser();
+                request.setAttribute("user",ud);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward update(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("editPage.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+                UserManager mgr = rreq.getRoller().getUserManager();
+                WeblogTemplate data = mgr.retrievePage(form.getId());
+                data.save(); // should through exception if no save permission
+                form.copyTo(data, request.getLocale());
+                data.setLastModified( new java.util.Date() );
+                data.setWebsite( rreq.getWebsite() );
+
+                validateLink( data );
+
+                mgr.storePage( data );
+                rreq.getRoller().commit();
+
+                // set the (possibly) new link back into the Form bean
+                ((WeblogTemplateForm)actionForm).setLink( data.getLink() );
+
+                ActionMessages uiMessages = new ActionMessages();
+                uiMessages.add(ActionMessages.GLOBAL_MESSAGE, 
+                        new ActionMessage("pageForm.save.success", 
+                                data.getName()));
+                saveMessages(request, uiMessages);
+
+                UserData user = rreq.getUser();
+                PageCacheFilter.removeFromCache( request,user );
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+              
+            // Don't reset this form. Allow user to keep on tweaking.        
+            //actionForm.reset(mapping,request);
+        }
+        catch (RollerPermissionsException e)
+        {
+            ActionErrors errors = new ActionErrors();
+            errors.add(null, new ActionError("error.permissions.deniedSave"));
+            saveErrors(request, errors);
+            forward = mapping.findForward("access-denied");
+        }
+        catch (Exception e)
+        {
+            mLogger.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Ensures that the page has a safe value for the link
+     * field.  "Safe" is defined as containing no html
+     * or any other non-alphanumeric characters.
+     * While this is overly strict (there are non-alphanum
+     * characters that are web-safe), this is a much easier
+     * test-and-correct.  Otherwise we would need a RegEx package.
+     */
+    private void validateLink( WeblogTemplate data )
+    {
+        // if data.getLink() is null or empty
+        // use the title ( data.getName() )
+        if ( StringUtils.isEmpty( data.getLink() ) )
+        {
+            data.setLink( data.getName() );
+        }
+
+        // if link contains any nonAlphanumeric, strip them
+        // first we must remove any html, as this is
+        // non-instructional markup.  Then do a straight
+        // removeNonAlphanumeric.
+        if ( !StringUtils.isAlphanumeric( data.getLink() ) )
+        {
+            String link = Utilities.removeHTML( data.getLink() );
+            link = Utilities.removeNonAlphanumeric( link );
+            data.setLink( link );
+        }
+    }
+    
+    //-----------------------------------------------------------------------
+    public ActionForward cancel(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        return (mapping.findForward("editPages"));
+    }
+    
+    //-----------------------------------------------------------------------
+    private void addModelObjects( RollerRequest rreq ) 
+        throws RollerException {  
+            
+        HttpServletRequest request = rreq.getRequest();
+            
+        UserManager mgr = rreq.getRoller().getUserManager();
+
+        UserData user = rreq.getUser();
+        request.setAttribute("user",user);
+
+        WebsiteData wd = rreq.getWebsite();
+        request.setAttribute("website", wd);
+
+        List pages = mgr.getPages(wd);
+        request.setAttribute("pages",pages);
+    }
+}
+