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);
+ }
+}
+