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/07/26 06:35:38 UTC

svn commit: r225230 [1/2] - in /incubator/roller/branches/roller_2.0: metadata/database/ src/org/roller/business/ src/org/roller/model/ src/org/roller/pojos/ src/org/roller/presentation/ src/org/roller/presentation/util/ src/org/roller/presentation/web...

Author: snoopdave
Date: Mon Jul 25 21:35:24 2005
New Revision: 225230

URL: http://svn.apache.org/viewcvs?rev=225230&view=rev
Log:
First cut of group blogging actions and JSP.

Added:
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/SslUtil.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/StrutsUtil.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/NewWebsiteForm.java
Modified:
    incubator/roller/branches/roller_2.0/metadata/database/130-to-200-migration-raw.sql
    incubator/roller/branches/roller_2.0/metadata/database/createdb-raw.sql
    incubator/roller/branches/roller_2.0/src/org/roller/business/UserManagerImpl.java
    incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java
    incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java
    incubator/roller/branches/roller_2.0/src/org/roller/pojos/WebsiteData.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/BasePageModel.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/InviteMemberAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/MemberPermissionsAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/NewWebsiteAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserBaseAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserNewAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourProfileAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourWebsitesAction.java
    incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/UserFormEx.java
    incubator/roller/branches/roller_2.0/src/org/roller/util/DateUtil.java
    incubator/roller/branches/roller_2.0/src/org/roller/util/Utilities.java
    incubator/roller/branches/roller_2.0/tests/org/roller/RollerTestBase.java
    incubator/roller/branches/roller_2.0/tests/org/roller/business/FileManagerTest.java
    incubator/roller/branches/roller_2.0/tests/org/roller/business/UserManagerTest.java
    incubator/roller/branches/roller_2.0/web/index.jsp
    incubator/roller/branches/roller_2.0/web/website/NewWebsite.jsp
    incubator/roller/branches/roller_2.0/web/website/UserNew.jsp
    incubator/roller/branches/roller_2.0/web/website/YourProfile.jsp

Modified: incubator/roller/branches/roller_2.0/metadata/database/130-to-200-migration-raw.sql
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/metadata/database/130-to-200-migration-raw.sql?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/metadata/database/130-to-200-migration-raw.sql (original)
+++ incubator/roller/branches/roller_2.0/metadata/database/130-to-200-migration-raw.sql Mon Jul 25 21:35:24 2005
@@ -19,6 +19,7 @@
 
 -- Add new handle field to uniquely identify websites in URLs
 alter table website add column handle varchar(255) @ALTER_TABLE_NOT_NULL@;
+alter table website add column datecreated  timestamp @ALTER_TABLE_NOT_NULL@;
 create index website_handle_index on userrole(handle);
 alter table website add constraint website_handle_uq unique (handle@INDEXSIZE@);
 

Modified: incubator/roller/branches/roller_2.0/metadata/database/createdb-raw.sql
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/metadata/database/createdb-raw.sql?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/metadata/database/createdb-raw.sql (original)
+++ incubator/roller/branches/roller_2.0/metadata/database/createdb-raw.sql Mon Jul 25 21:35:24 2005
@@ -98,7 +98,8 @@
     timezone          varchar(50) null,  
     defaultplugins    varchar(255) null,
     pinnedtomain      @BOOLEAN_SQL_TYPE_FALSE@ not null,
-    isenabled         @BOOLEAN_SQL_TYPE_TRUE@ not null
+    isenabled         @BOOLEAN_SQL_TYPE_TRUE@ not null,
+    datecreated     timestamp not null
 );
 create index website_id_index        on website(id);
 create index website_userid_index    on website(userid);

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/UserManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/UserManagerImpl.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/UserManagerImpl.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/UserManagerImpl.java Mon Jul 25 21:35:24 2005
@@ -222,6 +222,9 @@
     public WebsiteData createWebsite(
             UserData ud, 
             Map pages, 
+            String handle,
+            String name, 
+            String description,
             String theme, 
             String locale, 
             String timezone) throws RollerException
@@ -229,24 +232,25 @@
         Roller mRoller = RollerFactory.getRoller();
         UserManager umgr = mRoller.getUserManager();
         WeblogManager wmgr = mRoller.getWeblogManager();
-
-        WebsiteData website = new WebsiteData(null,
-            ud.getFullName()+"'s Weblog", // name
-            ud.getUserName(),             // handle
-            ud.getFullName()+"'s Weblog", // description
-            ud,                 // userId
-            "dummy",            // defaultPageId
-            "dummy",            // weblogDayPageId
-            Boolean.TRUE,       // enableBloggerApi
-            null,               // bloggerCategory
-            null,               // defaultCategory
-            "editor-text.jsp",  // editorPage
-            "",                 // ignoreWords
-            Boolean.TRUE,       // allowComments  
-            Boolean.FALSE,      // emailComments
-            "",                 // emailFromAddress
-            Boolean.TRUE,       // isEnabled
-            "dummy@example.com");  // emailAddress
+        WebsiteData website = new WebsiteData(
+            null,                // id
+            name,                // name
+            handle,              // handle
+            description,         // description
+            ud,                  // userId
+            "dummy",             // defaultPageId
+            "dummy",             // weblogDayPageId
+            Boolean.TRUE,        // enableBloggerApi
+            null,                // bloggerCategory
+            null,                // defaultCategory
+            "editor-text.jsp",   // editorPage
+            "",                  // ignoreWords
+            Boolean.TRUE,        // allowComments  
+            Boolean.FALSE,       // emailComments
+            "",                  // emailFromAddress
+            Boolean.TRUE,        // isEnabled
+            "dummy@example.com", // emailAddress
+            new Date());
         website.setEditorTheme(theme);
         website.setLocale(locale);
         website.setTimezone(timezone);

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java Mon Jul 25 21:35:24 2005
@@ -117,19 +117,24 @@
     public void addUser(UserData user) throws RollerException;
 
     /**
-     * @param ud
-     * @param pages
-     * @param theme
-     * @param locale
-     * @param timezone
-     * @param mRoller
-     * @param wmgr
-     * @return
+     * Create a fresh new website.
+     * @param ud          User creating website
+     * @param pages       Pages to be used in theme (TODO: elim. this redundancy)
+     * @param handle      Handle of new website
+     * @param name        Name of new website
+     * @param description Description of new website
+     * @param theme       Name of theme to be used
+     * @param locale      Locale code of new website
+     * @param timezone    ID of timezone of new website
+     * @return            New website object (has been saved and committed)
      * @throws RollerException
      */
     public WebsiteData createWebsite(
             UserData ud, 
             Map pages, 
+            String handle,
+            String name, 
+            String description,
             String theme, 
             String locale, 
             String timezone) throws RollerException;

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java Mon Jul 25 21:35:24 2005
@@ -39,15 +39,15 @@
    
    static final long serialVersionUID = -6354583200913127874L;
 
-   protected java.lang.String id;
-   protected java.lang.String userName;
-   protected java.lang.String password;
-   protected java.lang.String fullName;
-   protected java.lang.String emailAddress;
-   protected java.util.Date dateCreated;
+   protected String id;
+   protected String userName;
+   protected String password;
+   protected String fullName;
+   protected String emailAddress;
+   protected Date dateCreated;
    protected String  locale;
-   protected String  timezone;
-   protected Boolean isEnabled;
+   protected String  timeZone;
+   protected Boolean isEnabled = Boolean.TRUE;
    
    private Set roles = new TreeSet();
    private List permissions = new ArrayList();
@@ -56,11 +56,11 @@
    {
    }
 
-	public UserData( java.lang.String id, java.lang.String userName,
-                     java.lang.String password, java.lang.String fullName,
-                     java.lang.String emailAddress, 
+	public UserData( String id, String userName,
+                     String password, String fullName,
+                     String emailAddress, 
                      String locale, String timezone,
-                     java.util.Date dateCreated,
+                     Date dateCreated,
                      Boolean isEnabled)
 	{
          this.id = id;
@@ -70,7 +70,7 @@
          this.emailAddress = emailAddress;
          this.dateCreated = (Date)dateCreated.clone();
          this.locale = locale;
-         this.timezone = timezone;
+         this.timeZone = timezone;
          this.isEnabled = isEnabled;
 	}
 
@@ -123,12 +123,12 @@
      * @hibernate.id column="id" type="string"
      *  generator-class="uuid.hex" unsaved-value="null"
      */
-   public java.lang.String getId()
+   public String getId()
    {
       return this.id;
    }
    /** @ejb:persistent-field */ 
-   public void setId( java.lang.String id )
+   public void setId( String id )
    {
       this.id = id;
    }
@@ -137,12 +137,12 @@
      * @ejb:persistent-field 
      * @hibernate.property column="username" non-null="true" unique="true"
      */
-   public java.lang.String getUserName()
+   public String getUserName()
    {
       return this.userName;
    }
    /** @ejb:persistent-field */ 
-   public void setUserName( java.lang.String userName )
+   public void setUserName( String userName )
    {
       this.userName = userName;
    }
@@ -153,7 +153,7 @@
     * @ejb:persistent-field 
     * @hibernate.property column="passphrase" non-null="true"
     */
-   public java.lang.String getPassword()
+   public String getPassword()
    {
       return this.password;
    }
@@ -162,7 +162,7 @@
     * If password encryption is turned on, then pass in an encrypted password. 
     * @ejb:persistent-field 
     */ 
-   public void setPassword( java.lang.String password )
+   public void setPassword( String password )
    {
       this.password = password;
    }
@@ -171,12 +171,12 @@
      * @ejb:persistent-field 
      * @hibernate.property column="fullname" non-null="true" unique="true"
      */
-   public java.lang.String getFullName()
+   public String getFullName()
    {
       return this.fullName;
    }
    /** @ejb:persistent-field */ 
-   public void setFullName( java.lang.String fullName )
+   public void setFullName( String fullName )
    {
       this.fullName = fullName;
    }
@@ -185,12 +185,12 @@
      * @ejb:persistent-field 
      * @hibernate.property column="emailaddress" non-null="true" unique="true"
      */
-   public java.lang.String getEmailAddress()
+   public String getEmailAddress()
    {
       return this.emailAddress;
    }
    /** @ejb:persistent-field */ 
-   public void setEmailAddress( java.lang.String emailAddress )
+   public void setEmailAddress( String emailAddress )
    {
       this.emailAddress = emailAddress;
    }
@@ -199,7 +199,7 @@
 	* @ejb:persistent-field 
 	* @hibernate.property column="datecreated" non-null="true" unique="false"
 	*/
-   public java.util.Date getDateCreated()
+   public Date getDateCreated()
    {
        if (dateCreated == null) 
        {
@@ -211,7 +211,7 @@
        }
    }
    /** @ejb:persistent-field */ 
-   public void setDateCreated(final java.util.Date date)
+   public void setDateCreated(final Date date)
    {
 	   if (date != null) 
 	   {
@@ -244,15 +244,15 @@
     * @ejb:persistent-field
     * @hibernate.property column="timezone" non-null="true" unique="false"
     */
-   public String getTimezone()
+   public String getTimeZone()
    {
-       return this.timezone;
+       return this.timeZone;
    }
 
    /** @ejb:persistent-field */
-   public void setTimezone(String timezone)
+   public void setTimeZone(String timeZone)
    {
-       this.timezone = timezone;
+       this.timeZone = timeZone;
    }
 
    //------------------------------------------------------------------- citizenship
@@ -371,7 +371,7 @@
       this.fullName = ((UserData)otherData).fullName;
       this.emailAddress = ((UserData)otherData).emailAddress;
       this.locale = ((UserData)otherData).locale;
-      this.timezone = ((UserData)otherData).timezone;
+      this.timeZone = ((UserData)otherData).timeZone;
       this.dateCreated = ((UserData)otherData).dateCreated;
    }
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/WebsiteData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/WebsiteData.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/WebsiteData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/WebsiteData.java Mon Jul 25 21:35:24 2005
@@ -1,6 +1,9 @@
 package org.roller.pojos;
 
+
+
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
@@ -49,6 +52,7 @@
     protected String  timezone;
     protected String  mDefaultPlugins;
     protected Boolean isEnabled;
+    protected Date dateCreated;
     
     // Associated objects
     protected UserData mUser = null; // TODO: decide if website.user is needed
@@ -77,7 +81,8 @@
                        final Boolean  emailComments,
                        final String   emailFromAddress,
                        final Boolean  isEnabled,
-                       final String   emailAddress)
+                       final String   emailAddress,
+                       final Date     dateCreated)
     {
         this.id = id;
         this.name = name;
@@ -96,6 +101,7 @@
         this.emailFromAddress = emailFromAddress;
         this.isEnabled = isEnabled;
         this.emailAddress = emailAddress;
+        this.dateCreated = dateCreated;
     }
 
     public WebsiteData(WebsiteData otherData)
@@ -431,6 +437,34 @@
         this.timezone = timezone;
     }
 
+    /** 
+    * @ejb:persistent-field 
+    * @hibernate.property column="datecreated" non-null="true" unique="false"
+    */
+   public Date getDateCreated()
+   {
+       if (dateCreated == null) 
+       {
+           return null;
+       }
+       else 
+       {
+           return (Date)dateCreated.clone();
+       }
+   }
+   /** @ejb:persistent-field */ 
+   public void setDateCreated(final Date date)
+   {
+       if (date != null) 
+       {
+           dateCreated = (Date)date.clone();
+       }
+       else
+       {
+           dateCreated = null;
+       }
+   }
+
     /**
      * Comma-delimited list of user's default Plugins.
      * @ejb:persistent-field
@@ -595,6 +629,7 @@
         this.timezone = other.timezone;
         this.mDefaultPlugins = other.mDefaultPlugins;
         this.isEnabled = other.isEnabled;
+        this.dateCreated = dateCreated;
     }
     
     /**

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/BasePageModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/BasePageModel.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/BasePageModel.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/BasePageModel.java Mon Jul 25 21:35:24 2005
@@ -5,12 +5,14 @@
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.struts.action.ActionMapping;
 import org.roller.RollerException;
+import org.roller.presentation.util.StrutsUtil;
 
 /**
  * Re-usable base for page models.
@@ -30,6 +32,8 @@
         this.request = request;
         this.response = response;
         this.mapping = mapping;
+        request.setAttribute("locales", StrutsUtil.getLocaleBeans());        
+        request.setAttribute("timezones", StrutsUtil.getTimeZoneBeans());        
     }
 
     public String getBaseURL()
@@ -86,5 +90,15 @@
     public boolean getIsAdmin() throws RollerException
     {
         return RollerSession.getRollerSession(request).isAdminUser(); 
+    }
+
+    public List getLocales()
+    {
+        return StrutsUtil.getLocaleBeans();
+    }
+
+    public List getTimeZones()
+    {
+        return StrutsUtil.getTimeZoneBeans();
     }
 }

Added: incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/SslUtil.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/SslUtil.java?rev=225230&view=auto
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/SslUtil.java (added)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/SslUtil.java Mon Jul 25 21:35:24 2005
@@ -0,0 +1,131 @@
+package org.roller.presentation.util;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.roller.config.RollerConfig;
+
+/**
+ * SslUtil utility class Good ol' copy-n-paste from  <a
+ * href="http://www.javaworld.com/javaworld/jw-02-2002/ssl/utilityclass.txt">
+ * http://www.javaworld.com/javaworld/jw-02-2002/ssl/utilityclass.txt</a>
+ * which is referenced in the following article: <a
+ * href="http://www.javaworld.com/javaworld/jw-02-2002/jw-0215-ssl.html">
+ * http://www.javaworld.com/javaworld/jw-02-2002/jw-0215-ssl.html</a>
+ */
+public class SslUtil {
+    //~ Static fields/initializers =============================================
+
+    public static final String HTTP = "http";
+    public static final String HTTPS = "https";
+    public static final String HTTP_PORT_PARAM = "listenPort_http";
+    public static final String HTTPS_PORT_PARAM = "listenPort_https";
+    private static String HTTP_PORT = null;
+    private static String HTTPS_PORT = null;
+    public static final String STD_HTTP_PORT = "80";
+    public static final String STD_HTTPS_PORT = "443";
+
+    //~ Methods ================================================================
+
+    public static String getRedirectString(HttpServletRequest request,
+                                           ServletContext ctx, boolean isSecure) {
+        // get the port numbers from the application context
+        HTTP_PORT = RollerConfig.getProperty("securelogin.http.port");
+        HTTPS_PORT = RollerConfig.getProperty("securelogin.https.port");
+
+        // get the scheme we want to use for this page and
+        // get the scheme used in this request
+        String desiredScheme = isSecure ? HTTPS : HTTP;
+        String usingScheme = request.getScheme();
+
+        // Determine the port number we want to use
+        // and the port number we used in this request
+        String desiredPort = isSecure ? HTTPS_PORT : HTTP_PORT;
+        String usingPort = String.valueOf(request.getServerPort());
+
+        String urlString = null;
+
+        // Must also check ports, because of IE multiple redirect problem
+        if (!desiredScheme.equals(usingScheme) ||
+                !desiredPort.equals(usingPort)) {
+            urlString =
+                buildNewUrlString(request, desiredScheme, usingScheme,
+                                  desiredPort, usingPort);
+
+            // Temporarily store attributes in session
+            RequestUtil.stowRequestAttributes(request);
+        } else {
+            // Retrieve attributes from session
+            RequestUtil.reclaimRequestAttributes(request);
+        }
+
+        return urlString;
+    }
+
+    /**
+     * Builds the URL that we will redirect to
+     *
+     * @param request DOCUMENT ME!
+     * @param desiredScheme DOCUMENT ME!
+     * @param usingScheme DOCUMENT ME!
+     * @param desiredPort DOCUMENT ME!
+     * @param usingPort DOCUMENT ME!
+     *
+     * @return DOCUMENT ME!
+     */
+    private static String buildNewUrlString(HttpServletRequest request,
+                                            String desiredScheme,
+                                            String usingScheme,
+                                            String desiredPort, String usingPort) {
+        StringBuffer url = request.getRequestURL();
+
+        url.replace(0, usingScheme.length(), desiredScheme);
+
+        // Find the port used within the URL string
+        int startIndex = url.toString().indexOf(usingPort);
+
+        if (startIndex == -1) { // Port not found in URL
+
+            if ((!(STD_HTTPS_PORT.equals(desiredPort) &&
+                    HTTPS.equals(desiredScheme))) &&
+                    (!(STD_HTTP_PORT.equals(desiredPort) &&
+                    HTTP.equals(desiredScheme)))) {
+                startIndex =
+                    url.toString().indexOf("/",
+                                           url.toString().indexOf("/",
+                                                                  url.toString()
+                                                                     .indexOf("/") +
+                                                                  1) + 1);
+                url.insert(startIndex, ":" + desiredPort);
+            }
+        } else { // Port found in URL
+
+            if ((STD_HTTPS_PORT.equals(desiredPort) &&
+                    HTTPS.equals(desiredScheme)) ||
+                    (STD_HTTP_PORT.equals(desiredPort) &&
+                    HTTP.equals(desiredScheme))) {
+                url.delete(startIndex - 1, startIndex + usingPort.length());
+            } else { // desired port is not a default port
+
+                // Replace requested port with desired port number in URL string
+                url.replace(startIndex, startIndex + usingPort.length(),
+                            desiredPort);
+            }
+        }
+
+        // add query string, if any
+        String queryString = request.getQueryString();
+
+        if ((queryString != null) && (queryString.length() != 0)) {
+            url.append("?" + queryString);
+        } else {
+            queryString = RequestUtil.getRequestParameters(request);
+
+            if ((queryString != null) && (queryString.length() != 0)) {
+                url.append("?" + queryString);
+            }
+        }
+
+        return url.toString();
+    }
+}

Added: incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/StrutsUtil.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/StrutsUtil.java?rev=225230&view=auto
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/StrutsUtil.java (added)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/util/StrutsUtil.java Mon Jul 25 21:35:24 2005
@@ -0,0 +1,88 @@
+package org.roller.presentation.util;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.TreeSet;
+
+import org.apache.struts.util.LabelValueBean;
+import org.roller.util.LocaleComparator;
+import org.roller.util.TimeZoneComparator;
+
+public class StrutsUtil
+{
+    public static ArrayList locales;
+    public static ArrayList 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.
+     * 
+     * @return List of LabelValueBeans, one for each locale available from the JVM
+     */
+    public static List getLocaleBeans() 
+    {
+        if (locales == null)
+        {
+            locales = new ArrayList();
+            TreeSet locTree = new TreeSet(new 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();
+                locales.add(new LabelValueBean(
+                   loc.getDisplayName(),
+                   loc.toString()));
+            }
+
+        }
+        return locales;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * 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.
+     */
+    public static List getTimeZoneBeans() 
+    {
+        if (timezones == null)
+        {
+            Date today = new Date();
+            timezones = new ArrayList();
+            TreeSet zoneTree = new TreeSet(new 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());
+                timezones.add(new LabelValueBean(
+                   sb.toString(),
+                   zone.getID()));
+            }
+        }
+        return timezones;
+    }
+}

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/InviteMemberAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/InviteMemberAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/InviteMemberAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/InviteMemberAction.java Mon Jul 25 21:35:24 2005
@@ -32,6 +32,6 @@
         throws IOException, ServletException
     {
         ActionForward forward = mapping.findForward("inviteMembers.page");
-        return forward;
+        return forward; 
     }
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/MemberPermissionsAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/MemberPermissionsAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/MemberPermissionsAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/MemberPermissionsAction.java Mon Jul 25 21:35:24 2005
@@ -16,7 +16,7 @@
 /**
  * Allows website admin to change website member permissions.
  * 
- * @struts.action path="/editor/memberPermissions" parameter="method"
+ * @struts.action path="/editor/memberPermissions" parameter="method" 
  * @struts.action-forward name="memberPermissions.page" path="/website/MemberPermissions.jsp"
  */
 public class MemberPermissionsAction extends DispatchAction

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/NewWebsiteAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/NewWebsiteAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/NewWebsiteAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/NewWebsiteAction.java Mon Jul 25 21:35:24 2005
@@ -1,37 +1,192 @@
 package org.roller.presentation.website.actions;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
 
+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.action.ActionMessages;
 import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.model.RollerFactory;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.BasePageModel;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.website.formbeans.NewWebsiteForm;
 
 /**
  * Allows user to create a new website.
  * 
- * @struts.action path="/editor/newWebsite" parameter="method"
+ * @struts.action path="/editor/newWebsite" parameter="method" name="newWebsiteForm"
  * @struts.action-forward name="newWebsite.page" path="/website/NewWebsite.jsp"
+ * @struts.action-forward name="newWebsiteDone.page" path="/website/NewWebsiteDone.jsp"
  */
 public class NewWebsiteAction extends DispatchAction
 {
     private static Log mLogger =
         LogFactory.getFactory().getInstance(NewWebsiteAction.class);
     
-    public ActionForward edit(
-        ActionMapping       mapping,
-        ActionForm          actionForm,
-        HttpServletRequest  request,
-        HttpServletResponse response)
-        throws IOException, ServletException
+    /** If method param is not specified, use HTTP verb to pick method to call */
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws Exception
     {
+        if (request.getMethod().equals("GET"))
+        {
+            return create(mapping, actionForm, request, response);
+        }
+        return save(mapping, actionForm, request, response);
+    }
+    
+    /** Present new website form to user */
+    public ActionForward create(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException
+    {
+        NewWebsiteForm form = (NewWebsiteForm)actionForm;
+        form.setLocale( Locale.getDefault().toString() );
+        form.setTimeZone( TimeZone.getDefault().getID() );      
+
+        request.setAttribute("model", 
+            new NewWebsitePageModel(request, response, mapping, null));
+        
         ActionForward forward = mapping.findForward("newWebsite.page");
         return forward;
+    }
+    
+    /** Save new website created by user */    
+    public ActionForward save(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws IOException, ServletException
+    {
+        NewWebsiteForm form = (NewWebsiteForm)actionForm;
+        ActionMessages msgs = new ActionMessages();
+        ActionMessages errors = validate(form, new ActionErrors());
+        if (!errors.isEmpty())
+        {
+            saveErrors(request, errors);
+        }
+        else try
+        {
+            // Add new user
+            RollerContext rollerContext = RollerContext.getRollerContext(request);
+            UserData user = 
+                RollerSession.getRollerSession(request).getAuthenticatedUser();
+            UserManager mgr = RollerFactory.getRoller().getUserManager(); 
+            
+            // Need system user to add new user
+            RollerFactory.getRoller().setUser(UserData.SYSTEM_USER);
+            HashMap pages = rollerContext.readThemeMacros(form.getTheme());
+            WebsiteData website = mgr.createWebsite(
+               user, 
+               pages, 
+               form.getHandle(), 
+               form.getName(), 
+               form.getDescription(), 
+               form.getTheme(), 
+               form.getLocale(), 
+               form.getTimeZone());
+            RollerFactory.getRoller().commit();
+
+            // Flush cache so user will immediately appear on index page
+            //PageCacheFilter.removeFromCache( request, ud );
+            //MainPageAction.flushMainPageCache();
+            
+            request.setAttribute("model", 
+                    new NewWebsitePageModel(request, response, mapping, website));                
+        }
+        catch (RollerException e)
+        {
+            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(e.getMessage()));
+            saveErrors(request,errors);          
+            mLogger.error("ERROR in createWebsite", e);
+        }
+        ActionForward forward = mapping.findForward("newWebsiteDone.page");
+        return forward;
+    }
+        
+    private ActionMessages validate(NewWebsiteForm form, ActionErrors errors)
+    {
+        return new ActionMessages();
+    }
+
+    public static class NewWebsitePageModel extends BasePageModel
+    {
+        private List themes; 
+        private String contextURL = null;
+        private String weblogURL = null;
+        private String rssURL = null;
+        public NewWebsitePageModel(HttpServletRequest request,
+                HttpServletResponse response, ActionMapping mapping, WebsiteData wd)
+        {
+            super(request, response, mapping);
+            RollerContext rollerContext = RollerContext.getRollerContext(request);
+            themes = Arrays.asList(rollerContext.getThemeNames());
+            if (wd != null) 
+            {
+                contextURL = rollerContext.getAbsoluteContextUrl(request);
+                weblogURL = contextURL + "/page/" + wd.getHandle();   
+                rssURL =    contextURL + "/rss/" + wd.getHandle();         
+            }
+        }
+        public String getContextURL()
+        {
+            return contextURL;
+        }
+        public void setContextURL(String contextURL)
+        {
+            this.contextURL = contextURL;
+        }
+        public String getRssURL()
+        {
+            return rssURL;
+        }
+        public void setRssURL(String rssURL)
+        {
+            this.rssURL = rssURL;
+        }
+        public List getThemes()
+        {
+            return themes;
+        }
+        public void setThemes(List themes)
+        {
+            this.themes = themes;
+        }
+        public String getWeblogURL()
+        {
+            return weblogURL;
+        }
+        public void setWeblogURL(String weblogURL)
+        {
+            this.weblogURL = weblogURL;
+        }
     }
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserBaseAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserBaseAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserBaseAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserBaseAction.java Mon Jul 25 21:35:24 2005
@@ -2,10 +2,8 @@
 package org.roller.presentation.website.actions;
 
 import java.util.Collection;
-import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
-import java.util.TreeSet;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
@@ -24,6 +22,7 @@
 import org.roller.presentation.RollerContext;
 import org.roller.presentation.RollerRequest;
 import org.roller.presentation.website.formbeans.UserFormEx;
+import org.roller.util.DateUtil;
 import org.roller.util.Utilities;
 
 
@@ -37,9 +36,6 @@
     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 ) {
@@ -63,188 +59,6 @@
         }
         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);
-        String[] themes = rollerContext.getThemeNames();
-        request.setAttribute( "themes", themes );
-
-        // prepare locales & timezones
-        if (ud != null)
-        {
-            UserManager mgr = RollerFactory.getRoller().getUserManager();
-            WebsiteData website = (WebsiteData)mgr.getWebsites(ud, null).get(0);
-            //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.
-	 * 
-     * ROLLER_2.0: Website form needs these locale options too
-	 */
-    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.
-     * 
-     * ROLLER_2.0: Website form needs these locale options too
-     */
-    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 = RollerFactory.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();
-//        }
-//    }
 }
 
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserNewAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserNewAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserNewAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/UserNewAction.java Mon Jul 25 21:35:24 2005
@@ -3,6 +3,8 @@
 
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.Locale;
+import java.util.TimeZone;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -23,6 +25,7 @@
 import org.roller.model.RollerFactory;
 import org.roller.model.UserManager;
 import org.roller.pojos.UserData;
+import org.roller.presentation.BasePageModel;
 import org.roller.presentation.RollerContext;
 import org.roller.presentation.RollerRequest;
 import org.roller.presentation.website.formbeans.UserFormEx;
@@ -72,12 +75,12 @@
         try
         {
             UserFormEx userForm = (UserFormEx)actionForm;
-            loadRequestObjects(request, rreq, null, userForm);
-            userForm.setLocale(request.getLocale().toString());
-                
-            // User must set new password twice
+            userForm.setLocale( Locale.getDefault().getDisplayName() );
+            userForm.setTimeZone( TimeZone.getDefault().getID() );
             userForm.setPasswordText(null);
-            userForm.setPasswordConfirm(null);           
+            userForm.setPasswordConfirm(null);            
+            request.setAttribute(
+                    "model", new BasePageModel(request, response, mapping));
         }
         catch (Exception e)
         {
@@ -138,10 +141,10 @@
                   form.getPasswordText(), form.getPasswordConfirm());
             }
             
-            String theme = form.getTheme();
-            HashMap pages = rollerContext.readThemeMacros(theme);
+            //String theme = form.getTheme();
+            //HashMap pages = rollerContext.readThemeMacros(theme);
             mgr.addUser(ud);
-            mgr.createWebsite(ud, pages, theme, form.getLocale(), form.getTimezone());
+            //mgr.createWebsite(ud, pages, theme, form.getLocale(), form.getTimezone());
             RollerFactory.getRoller().commit();
 
 			// Flush cache so user will immediately appear on index page

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourProfileAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourProfileAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourProfileAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourProfileAction.java Mon Jul 25 21:35:24 2005
@@ -1,6 +1,8 @@
 package org.roller.presentation.website.actions;
 
 import java.io.IOException;
+import java.util.Locale;
+import java.util.TimeZone;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -18,6 +20,7 @@
 import org.roller.model.RollerFactory;
 import org.roller.model.UserManager;
 import org.roller.pojos.UserData;
+import org.roller.presentation.BasePageModel;
 import org.roller.presentation.RollerRequest;
 import org.roller.presentation.RollerSession;
 import org.roller.presentation.website.formbeans.UserFormEx;
@@ -34,8 +37,22 @@
     private static Log mLogger =
         LogFactory.getFactory().getInstance(YourProfileAction.class);
 
-    //-----------------------------------------------------------------------
-    /** Handle GET for user edit page */
+    /** If method param is not specified, use HTTP verb to pick method to call */
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws Exception
+    {
+        if (request.getMethod().equals("GET"))
+        {
+            return edit(mapping, actionForm, request, response);
+        }
+        return save(mapping, actionForm, request, response);
+    }
+    
+    /** Load form with authenticated user and forward to your-profile page */
     public ActionForward edit(
         ActionMapping       mapping,
         ActionForm          actionForm,
@@ -46,55 +63,41 @@
         ActionForward forward = mapping.findForward("yourProfile.page");
         try
         {
-            RollerRequest rreq = RollerRequest.getRollerRequest(request);
             RollerSession rollerSession = RollerSession.getRollerSession(request);
-            if ( rollerSession.isUserAuthorizedToEdit() )
-            {
-                UserData ud = RollerSession.getRollerSession(request).getAuthenticatedUser();
-                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");
-            }
+            UserData ud = rollerSession.getAuthenticatedUser();
+            UserFormEx form = (UserFormEx)actionForm;
+            form.copyFrom(ud, request.getLocale());
+            form.setPasswordText(null);
+            form.setPasswordConfirm(null);
+            form.setLocale(ud.getLocale());
+            form.setTimeZone(ud.getTimeZone());
+            request.setAttribute(
+                    "model", new BasePageModel(request, response, mapping));
         }
         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"));
+                         new ActionMessage("yourProfile.cookieLogin"));
             saveMessages(request, messages);
         }
-        
         return forward;
     }
 
-    //-----------------------------------------------------------------------
-    /** Handle POST from user edit form */
-    public ActionForward update(
+    /** Update user based on posted form data */
+    public ActionForward save(
         ActionMapping       mapping,
         ActionForm          actionForm,
         HttpServletRequest  request,
@@ -106,64 +109,51 @@
         ActionMessages msgs = new ActionMessages();
         try
         {
-            RollerRequest rreq = RollerRequest.getRollerRequest(request);
-            RollerSession rollerSession = RollerSession.getRollerSession(request);
-            if (rollerSession.isUserAuthorizedToEdit())
+            ActionMessages errors = validate(form, new ActionErrors());
+            if (errors.size() == 0)
             {
-                ActionMessages errors = validate(form, new ActionErrors());
-                if (errors.size() == 0)
+                UserManager mgr = RollerFactory.getRoller().getUserManager();
+                UserData data = mgr.getUser( form.getUserName() );
+                
+                // Need system user to update user
+                RollerFactory.getRoller().setUser(UserData.SYSTEM_USER);
+                
+                // Copy data from form to 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()))
                 {
-                    UserManager mgr = RollerFactory.getRoller().getUserManager();
-                    UserData data = mgr.getUser( form.getUserName() );
-                    
-                    // Need system user to update new user
-                    RollerFactory.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(RollerFactory.getRoller(), 
+                           form.getPasswordText(), 
+                           form.getPasswordConfirm());
+                    }
+                    catch (RollerException e)
                     {
-                        try
-                        {
-                            data.resetPassword(RollerFactory.getRoller(), 
-                               form.getPasswordText(), 
-                               form.getPasswordConfirm());
-                        }
-                        catch (RollerException e)
-                        {
-                            msgs.add(ActionMessages.GLOBAL_MESSAGE, 
-                                new ActionMessage("userSettings.passwordResetError"));
-                        }
-                    } 
+                        msgs.add(ActionMessages.GLOBAL_MESSAGE, 
+                            new ActionMessage("yourProfile.passwordResetError"));
+                    }
+                } 
+                RollerSession rses = RollerSession.getRollerSession(request);
+                rses.setAuthenticatedUser(data);
+                mgr.storeUser( data );
                 
-                    // ROLLER_2.0: user needs locale and timezone 
-                    
-//                    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 );
-                    RollerFactory.getRoller().commit();
-                    
-                    // Changing user no longer requires cache flush
-                    //PageCacheFilter.removeFromCache(request, data);
-    
-                    msgs.add(null, new ActionMessage("userSettings.saved"));
-                    saveMessages(request, msgs);
-                }
-                else 
-                {
-                    saveErrors(request, errors);
-                }
-                return edit(mapping, actionForm, request, response);
+                RollerFactory.getRoller().commit();
+
+                request.setAttribute(
+                        "model", new BasePageModel(request, response, mapping));
+                
+                msgs.add(null, new ActionMessage("yourProfile.saved"));
+                saveMessages(request, msgs);
+            }
+            else 
+            {
+                saveErrors(request, errors);
             }
-            return mapping.findForward("access-denied");
+            return edit(mapping, actionForm, request, response);
         }
         catch (Exception e)
         {

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourWebsitesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourWebsitesAction.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourWebsitesAction.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/actions/YourWebsitesAction.java Mon Jul 25 21:35:24 2005
@@ -30,8 +30,23 @@
  */
 public class YourWebsitesAction extends DispatchAction
 {
-    private static Log mLogger =
+    private static Log mLogger = 
         LogFactory.getFactory().getInstance(YourWebsitesAction.class);
+    
+    /** If method param is not specified, use HTTP verb to pick method to call */
+    public ActionForward unspecified(
+            ActionMapping       mapping,
+            ActionForm          actionForm,
+            HttpServletRequest  request,
+            HttpServletResponse response)
+            throws Exception
+    {
+        if (request.getMethod().equals("GET"))
+        {
+            return edit(mapping, actionForm, request, response);
+        }
+        return select(mapping, actionForm, request, response);
+    }
     
     public ActionForward edit(
             ActionMapping       mapping,

Added: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/NewWebsiteForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/NewWebsiteForm.java?rev=225230&view=auto
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/NewWebsiteForm.java (added)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/NewWebsiteForm.java Mon Jul 25 21:35:24 2005
@@ -0,0 +1,95 @@
+package org.roller.presentation.website.formbeans;
+
+import java.util.Locale;
+
+import org.apache.struts.action.ActionForm;
+import org.roller.pojos.WebsiteData;
+
+/**
+ * @struts.form name="newWebsiteForm"
+ * @author Dave M Johnson
+ */
+public class NewWebsiteForm extends ActionForm
+{
+    private String handle;
+    private String name;
+    private String description;
+    private String emailAddress;
+    private String locale;
+    private String timezone;
+    private String theme;
+    
+    public NewWebsiteForm()
+    {
+        
+    }
+    public String getDescription()
+    {
+        return description;
+    }
+    public void setDescription(String description)
+    {
+        this.description = description;
+    }
+    public String getEmailAddress()
+    {
+        return emailAddress;
+    }
+    public void setEmailAddress(String emailAddress)
+    {
+        this.emailAddress = emailAddress;
+    }
+    public String getHandle()
+    {
+        return handle;
+    }
+    public void setHandle(String handle)
+    {
+        this.handle = handle;
+    }
+    public String getLocale()
+    {
+        return locale;
+    }
+    public void setLocale(String locale)
+    {
+        this.locale = locale;
+    }
+    public String getName()
+    {
+        return name;
+    }
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+    public String getTheme()
+    {
+        return theme;
+    }
+    public void setTheme(String theme)
+    {
+        this.theme = theme;
+    }
+    public String getTimeZone()
+    {
+        return timezone;
+    }
+    public void setTimeZone(String timezone)
+    {
+        this.timezone = timezone;
+    }
+    
+    /**
+     * @param wd
+     * @param locale2
+     */
+    public void copyTo(WebsiteData wd, Locale locale)
+    {
+        wd.setHandle(handle);
+        wd.setName(name);
+        wd.setDescription(description);
+        wd.setLocale(this.locale);
+        wd.setTimezone(timezone);
+    }
+}

Modified: incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/UserFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/UserFormEx.java?rev=225230&r1=225229&r2=225230&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/UserFormEx.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/presentation/website/formbeans/UserFormEx.java Mon Jul 25 21:35:24 2005
@@ -16,9 +16,6 @@
  */ 
 public class UserFormEx extends UserForm
 {
-	private String mTheme = null;
-    private String mLocale = null;
-    private String mTimezone = null;
     private String mPasswordText = null;
     private String mPasswordConfirm = null;
     private boolean adminCreated = false;
@@ -31,35 +28,6 @@
 	public UserFormEx( UserData userData, java.util.Locale locale ) throws RollerException
 	{
 		super(userData, locale);
-	}
-
-	public String getTheme()
-	{
-		return mTheme; 
-	}
-
-	public void setTheme( String theme )
-	{
-		mTheme = theme;
-	}
-	public String getLocale() 
-	{
-		return mLocale;
-	}
-
-	public void setLocale(String locale) 
-	{
-		mLocale = locale;
-	}
-
-	public String getTimezone() 
-	{
-		return mTimezone;
-	}
-
-	public void setTimezone(String timezone) 
-	{
-		mTimezone = timezone;
 	}
     
     /**