You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2008/06/28 21:18:57 UTC

svn commit: r672574 [12/16] - in /roller/planet/core/trunk: ./ lib/ lib/buildtime/ lib/jakarta-taglibs-standard-1.1.2/ lib/jakarta-taglibs-standard-1.1.2/lib/ lib/jakarta-taglibs-standard-1.1.2/tld/ lib/openjpa-0.9.7/ lib/rome-0.9/ lib/spring-1.2/ lib/...

Added: roller/planet/core/trunk/test/java/org/apache/roller/planet/ui/struts2/editor/SubscriptionsTest.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/test/java/org/apache/roller/planet/ui/struts2/editor/SubscriptionsTest.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/test/java/org/apache/roller/planet/ui/struts2/editor/SubscriptionsTest.java (added)
+++ roller/planet/core/trunk/test/java/org/apache/roller/planet/ui/struts2/editor/SubscriptionsTest.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,137 @@
+
+package org.apache.roller.planet.ui.struts2.editor;
+
+import org.apache.roller.planet.TestUtils;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.business.PlanetManager;
+import org.apache.roller.planet.pojos.Planet;
+import org.apache.roller.planet.pojos.PlanetGroup;
+import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.planet.pojos.User;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+/**
+ * Unit test for Subscriptions struts2 action.
+ *
+ * @author ag92114
+ */
+public class SubscriptionsTest {
+
+    private User testUser = null;
+    private Planet testPlanet = null;
+    private PlanetGroup testGroup = null;
+    private Subscription testSub = null;
+    
+    
+    @Before
+    public void setUp() throws Exception {
+        TestUtils.setupAggregator();
+        testUser = TestUtils.setupUser("SubscriptionsTest");
+        testPlanet = TestUtils.setupPlanet("SubscriptionsTest");
+        testGroup = TestUtils.setupGroup(testPlanet, "SubscriptionsTest");
+        testSub = TestUtils.setupSubscription("SubscriptionsTest");
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        TestUtils.teardownSubscription(testSub.getId());
+        TestUtils.teardownGroup(testGroup.getId());
+        TestUtils.teardownPlanet(testPlanet.getId());
+        TestUtils.teardownUser(testUser.getId());
+        TestUtils.shutdownAggregator();
+    }
+    
+
+    /**
+     * Test of add method, of class Subscriptions.
+     */
+    @Test
+    public void add() throws Exception {
+        System.out.println("add");
+        
+        Subscriptions instance = new Subscriptions();
+        instance.setPlanetConfig(AggregatorFactory.getAggregator().getConfig());
+        instance.setAuthenticatedUser(testUser);
+        instance.setActionPlanet(testPlanet);
+        instance.setActionGroup(testGroup);
+        
+        String feedUrl = "http://blogs.sun.com/main/feed/entries/atom";
+        instance.setSubUrl(feedUrl);
+        instance.add();
+        assertFalse(instance.hasActionErrors());
+        
+        // make sure sub was added to group
+        TestUtils.endSession(false);
+        PlanetManager pmgr = AggregatorFactory.getAggregator().getPlanetManager();
+        Subscription sub = pmgr.getSubscription(feedUrl);
+        PlanetGroup group = TestUtils.getManagedGroup(testGroup);
+        assertTrue(group.getSubscriptions().contains(sub));
+        
+        // cleanup after ourselves
+        TestUtils.teardownSubscription(sub.getId());
+    }
+    
+    
+    /**
+     * Test of add method with existing subscription, of class Subscriptions.
+     */
+    @Test
+    public void addExistingSubscription() throws Exception {
+        System.out.println("addExistingSubscription");
+        
+        Subscriptions instance = new Subscriptions();
+        instance.setPlanetConfig(AggregatorFactory.getAggregator().getConfig());
+        instance.setAuthenticatedUser(testUser);
+        instance.setActionPlanet(testPlanet);
+        instance.setActionGroup(testGroup);
+        
+        String feedUrl = "SubscriptionsTest";
+        instance.setSubUrl(feedUrl);
+        instance.add();
+        assertFalse(instance.hasActionErrors());
+        
+        // make sure sub was added to group
+        TestUtils.endSession(false);
+        Subscription sub = TestUtils.getManagedSubscription(testSub);
+        PlanetGroup group = TestUtils.getManagedGroup(testGroup);
+        assertTrue(group.getSubscriptions().contains(sub));
+    }
+    
+    
+    /**
+     * Test of remove method, of class Subscriptions.
+     */
+    @Test
+    public void remove() throws Exception {
+        System.out.println("remove");
+        
+        // add test sub to our group
+        PlanetManager pmgr = AggregatorFactory.getAggregator().getPlanetManager();
+        testGroup.getSubscriptions().add(testSub);
+        testSub.getGroups().add(testGroup);
+        pmgr.saveGroup(testGroup);
+        AggregatorFactory.getAggregator().flush();
+            
+        Subscriptions instance = new Subscriptions();
+        instance.setPlanetConfig(AggregatorFactory.getAggregator().getConfig());
+        instance.setAuthenticatedUser(testUser);
+        instance.setActionPlanet(testPlanet);
+        instance.setActionGroup(testGroup);
+        
+        String feedUrl = testSub.getFeedURL();
+        instance.setSubUrl(feedUrl);
+        instance.remove();
+        assertFalse(instance.hasActionErrors());
+        
+        // make sure sub was removed
+        TestUtils.endSession(false);
+        Subscription sub = TestUtils.getManagedSubscription(testSub);
+        PlanetGroup group = TestUtils.getManagedGroup(testGroup);
+        assertFalse(group.getSubscriptions().contains(sub));
+    }
+
+}

Added: roller/planet/core/trunk/test/java/org/apache/roller/planet/util/mail/PlanetMailerTest.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/test/java/org/apache/roller/planet/util/mail/PlanetMailerTest.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/test/java/org/apache/roller/planet/util/mail/PlanetMailerTest.java (added)
+++ roller/planet/core/trunk/test/java/org/apache/roller/planet/util/mail/PlanetMailerTest.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,53 @@
+
+package org.apache.roller.planet.util.mail;
+
+import org.apache.roller.planet.TestUtils;
+import org.apache.roller.planet.business.AggregatorFactory;
+import org.apache.roller.planet.business.startup.PlanetStartup;
+import org.apache.roller.planet.pojos.Planet;
+import org.apache.roller.planet.pojos.User;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+/**
+ * Unit test for PlanetMailerTest.
+ *
+ * @author ag92114
+ */
+public class PlanetMailerTest {
+
+    @Before
+    public void setUp() throws Exception {
+        TestUtils.setupAggregator();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        TestUtils.shutdownAggregator();
+    }
+    
+    
+    /**
+     * Test of sendPlanetInvitation method, of class PlanetMailer.
+     */
+    @Test
+    public void sendPlanetInvitation() throws Exception {
+        System.out.println("sendPlanetInvitation");
+        
+        String email = AggregatorFactory.getAggregator().getConfig().getProperty("testEmail");
+        
+        User invitor = new User();
+        invitor.setEmailAddress(email);
+        invitor.setFullName(email);
+        User invitee = invitor;
+        Planet planet = new Planet();
+        planet.setTitle("Test Planet");
+        
+        PlanetMailer instance = new PlanetMailer(PlanetStartup.getMailProvider(), AggregatorFactory.getAggregator().getConfig());
+        instance.sendPlanetInvitation(invitor, invitee, planet);
+    }
+
+}

Added: roller/planet/core/trunk/test/java/org/apache/roller/util/RegexUtilTest.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/test/java/org/apache/roller/util/RegexUtilTest.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/test/java/org/apache/roller/util/RegexUtilTest.java (added)
+++ roller/planet/core/trunk/test/java/org/apache/roller/util/RegexUtilTest.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.util;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.apache.roller.planet.util.RegexUtil;
+
+
+/**
+ * Test regex utils.
+ */
+public class RegexUtilTest extends TestCase {
+    
+    /**
+     *
+     */
+    public RegexUtilTest() {
+        super();
+    }
+    
+    /**
+     * @param arg0
+     */
+    public RegexUtilTest(String arg0) {
+        super(arg0);
+    }
+    
+    /**
+     * @see TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+    
+    /**
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    
+    public void testEncodingEmail() {
+        // test mailto: escaping
+        String test = "test <a href='mailto:this@email.com'>email</a> string";
+        String expect = "test <a href='mailto:%74%68%69%73%40%65%6d%61%69%6c%2e%63%6f%6d'>email</a> string";
+        String result = RegexUtil.encodeEmail(test) ;
+        //System.out.println(result);
+        assertEquals(expect, result);
+    }
+    
+    public void testObfuscateEmail() {
+        // test "plaintext" escaping
+        String test = "this@email.com";
+        String expect = "this-AT-email-DOT-com";
+        String result = RegexUtil.encodeEmail(test);
+        assertEquals(expect, result);
+    }
+    
+    public void testHexEmail() {
+        // test hex & obfuscate together
+        String test = "test <a href='mailto:this@email.com'>this@email.com</a> string, and this@email.com";
+        String expect = "test <a href='mailto:%74%68%69%73%40%65%6d%61%69%6c%2e%63%6f%6d'>this-AT-email-DOT-com</a> string, and this-AT-email-DOT-com";
+        String result = RegexUtil.encodeEmail(test);
+        //System.out.println(result);
+        assertEquals(expect, result);
+    }
+    
+    public static Test suite() {
+        return new TestSuite(RegexUtilTest.class);
+    }
+
+}

Added: roller/planet/core/trunk/test/java/org/apache/roller/util/UtilitiesTestSuite.java
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/test/java/org/apache/roller/util/UtilitiesTestSuite.java?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/test/java/org/apache/roller/util/UtilitiesTestSuite.java (added)
+++ roller/planet/core/trunk/test/java/org/apache/roller/util/UtilitiesTestSuite.java Sat Jun 28 12:18:17 2008
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.util;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+
+/**
+ * Test various utility classes that do not require a database or container.
+ */
+public class UtilitiesTestSuite {
+    
+    public static Test suite() {
+
+        TestSuite suite = new TestSuite();
+        
+        suite.addTestSuite(RegexUtilTest.class);
+        
+        return suite;
+    }
+    
+}

Modified: roller/planet/core/trunk/web/WEB-INF/classes/log4j.properties
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/classes/log4j.properties?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/classes/log4j.properties (original)
+++ roller/planet/core/trunk/web/WEB-INF/classes/log4j.properties Sat Jun 28 12:18:17 2008
@@ -19,7 +19,7 @@
 log4j.rootCategory=INFO, planet
 
 log4j.appender.planet=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.planet.File=${catalina.base}/logs/planet.log
+log4j.appender.planet.File=${catalina.base}/logs/roller-planet.log
 log4j.appender.planet.layout=org.apache.log4j.PatternLayout
 log4j.appender.planet.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} %C{1}:%M - %m%n
 

Modified: roller/planet/core/trunk/web/WEB-INF/classes/struts.properties
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/classes/struts.properties?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/classes/struts.properties (original)
+++ roller/planet/core/trunk/web/WEB-INF/classes/struts.properties Sat Jun 28 12:18:17 2008
@@ -1,9 +1,23 @@
 
-struts.objectFactory = spring
+# use spring as the object factory
+struts.objectFactory=spring
 
-struts.devMode = true
+# use the simple theme
+struts.ui.theme=xhtml
 
-struts.enable.DynamicMethodInvocation = true
+# set the struts action extension to 'rol'
+struts.action.extension=rol
+
+# dev mode options
+struts.devMode=false
+struts.configuration.xml.reload=false
+struts.i18n.reload=false
+
+# this enables the translation of action="foo!method" to work nicely
+struts.enable.DynamicMethodInvocation=true
 
 # prevent the damn s:url calls from including undesired query params by default
 struts.url.includeParams=none
+
+# add our global application properties resource bundle into the mix
+struts.custom.i18n.resources=application

Modified: roller/planet/core/trunk/web/WEB-INF/classes/struts.xml
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/classes/struts.xml?rev=672574&r1=672573&r2=672574&view=diff
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/classes/struts.xml (original)
+++ roller/planet/core/trunk/web/WEB-INF/classes/struts.xml Sat Jun 28 12:18:17 2008
@@ -2,45 +2,205 @@
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
 <struts>
+
     <!-- core package space -->
     <package name="planet" namespace="/planet-ui" extends="struts-default">
-        <action name="Login" class="org.apache.roller.planet.ui.core.struts2.Login">
-            <result>/WEB-INF/jsps/login.jsp</result>
+        
+        <!-- Define Tiles result type -->
+        <result-types>
+            <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
+        </result-types>
+        
+        <!-- define our own interceptors and a custom interceptor stack -->
+        <interceptors>
+            <interceptor name="UIActionInterceptor" 
+                         class="org.apache.roller.planet.ui.struts2.util.UIActionInterceptor" />
+            <interceptor name="UISecurityInterceptor" 
+                         class="org.apache.roller.planet.ui.struts2.util.UISecurityInterceptor" />
+            <interceptor name="UIActionPrepareInterceptor" 
+                         class="org.apache.roller.planet.ui.struts2.util.UIActionPrepareInterceptor" />
+                         
+            <!-- Define a custom interceptor stack for Roller so that we can 
+                 add in our own custom interceptors.  We basically copy the 
+                 default stack from struts2 rather than extend it because we
+                 need to have our custom interceptors go in the middle of the
+                 default stack -->
+            <interceptor-stack name="rollerStack">
+                <interceptor-ref name="exception"/>
+                <interceptor-ref name="alias"/>
+                <interceptor-ref name="servlet-config"/>
+                <interceptor-ref name="prepare"/>
+                <interceptor-ref name="i18n"/>
+                <interceptor-ref name="chain"/>
+                <interceptor-ref name="debugging"/>
+                <interceptor-ref name="profiling"/>
+                <interceptor-ref name="scoped-model-driven"/>
+                <interceptor-ref name="model-driven"/>
+                <interceptor-ref name="fileUpload"/>
+                <interceptor-ref name="checkbox"/>
+                <interceptor-ref name="static-params"/>
+                <interceptor-ref name="params">
+                  <param name="excludeParams">dojo\..*</param>
+                </interceptor-ref>
+                <interceptor-ref name="conversionError"/>
+                
+                <!-- custom Roller interceptors -->
+                <interceptor-ref name="UIActionInterceptor"/>
+                <interceptor-ref name="UISecurityInterceptor"/>
+                <interceptor-ref name="UIActionPrepareInterceptor"/>
+                
+                <!-- validation interceptors, MUST come after our custom interceptors -->
+                <interceptor-ref name="validation">
+                    <param name="excludeMethods">input,back,cancel,browse</param>
+                </interceptor-ref>
+                <interceptor-ref name="workflow">
+                    <param name="excludeMethods">input,back,cancel,browse</param>
+                </interceptor-ref>
+                
+            </interceptor-stack>
+        </interceptors>
+        
+        <!-- use our own interceptor stack which extends the default stack -->
+        <default-interceptor-ref name="rollerStack"/>
+        
+        
+        <!-- results made available to all actions -->
+        <global-results>
+            <result name="access-denied" type="chain">denied</result>
+        </global-results>
+        
+        
+        <action name="denied">
+            <result type="tiles">.denied</result>
+        </action>
+        
+        <action name="home">
+            <result type="redirect">/</result>
+        </action>
+        
+        <action name="login-redirect">
+            <result>/planet-ui/login-redirect.jsp</result>
+        </action>
+        
+        <action name="logout">
+            <result>/planet-ui/logout-redirect.jsp</result>
+        </action>
+        
+        <action name="setup"
+                class="org.apache.roller.planet.ui.struts2.core.Setup">
+            <result name="success" type="tiles">.Setup</result>
+            <result name="access-disabled" type="tiles">.SetupDisabled</result>
+        </action>
+                        
+        <action name="login"
+                class="org.apache.roller.planet.ui.struts2.core.Login">
+            <result type="tiles">.Login</result>
+            <result name="access-disabled" type="tiles">.LoginDisabled</result>
+        </action>
+        
+        <action name="register!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.core.Register">
+            <result name="input" type="tiles">.Register</result>
+            <result name="access-disabled" type="tiles">.RegisterDisabled</result>
+            <result name="success" type="tiles">.Welcome</result>
+        </action>
+        
+        <action name="profile!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.core.Profile">
+            <result name="input" type="tiles">.Profile</result>
+            <result name="access-disabled" type="tiles">.ProfileDisabled</result>
+            <result name="cancel" type="redirect-action">menu</result>
+            <result name="success" type="tiles">.Profile</result>
+        </action>
+        
+        <action name="createPlanet!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.core.CreatePlanet">
+            <result name="input" type="tiles">.CreatePlanet</result>
+            <result name="success" type="chain">menu</result>
+        </action>
+        
+        <action name="menu!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.core.MainMenu">
+            <result type="tiles">.MainMenu</result>
+        </action>
+
+    </package>
+    
+    
+    <package name="planet-editor" namespace="/planet-ui/editor" extends="planet">
+        
+        <action name="planetConfig!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.PlanetConfig">
+            <result name="input" type="tiles">.PlanetConfig</result>
+        </action>
+        
+        <action name="planetRemove!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.PlanetRemove">
+            <result name="confirm" type="tiles">.PlanetRemove</result>
+            <result name="success" type="chain">menu</result>
+        </action>
+        
+        <action name="members!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.Members">
+            <result name="input" type="tiles">.Members</result>
+        </action>
+        
+        <action name="groups!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.Groups">
+            <result name="list" type="tiles">.Groups</result>
+        </action>
+        
+        <action name="groupAdd!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.GroupAdd">
+            <result name="input" type="tiles">.GroupAdd</result>
+            <result name="success" type="chain">groups</result>
         </action>
-        <action name="Logout" class="org.apache.roller.planet.ui.core.struts2.Logout">
-            <result>/WEB-INF/jsps/logout.jsp</result>
+        
+        <action name="groupEdit!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.GroupEdit">
+            <result name="input" type="tiles">.GroupEdit</result>
+        </action>
+        
+        <action name="groupRemove!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.GroupRemove">
+            <result name="confirm" type="tiles">.GroupRemove</result>
+            <result name="success" type="chain">groups</result>
         </action>
-        <action name="MainMenu" class="org.apache.roller.planet.ui.core.struts2.MainMenu">
-            <result>/WEB-INF/jsps/MainMenu.jsp</result>
+        
+        <action name="subscriptions!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.editor.Subscriptions">
+            <result name="list" type="tiles">.Subscriptions</result>
         </action>
+        
     </package>
     
+    
     <!-- site admin package space -->
-    <package name="planetadmin" namespace="/planet-ui/admin" extends="planet">
+    <package name="planet-admin" namespace="/planet-ui/admin" extends="planet">
         
-        <!-- use stack which supports the use of the Preparable interface on actions -->
-        <default-interceptor-ref name="paramsPrepareParamsStack"/>
+        <action name="globalConfig!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.admin.GlobalConfig">
+            <result name="input" type="tiles">.GlobalConfig</result>
+        </action>
+        
+        <action name="userAdmin"
+                class="org.apache.roller.planet.ui.struts2.admin.UserAdmin">
+            <result name="success" type="tiles">.UserAdmin</result>
+            <result name="error" type="tiles">.UserAdmin</result>
+            <result name="input" type="tiles">.UserAdmin</result>
+        </action>
         
-        <action name="ConfigForm!*" method="{1}"
-                class="org.apache.roller.planet.ui.admin.struts2.ConfigForm">
-            <result name="input">/WEB-INF/jsps/admin/ConfigForm.jsp</result>
-        </action>
-        <action name="PlanetsList!*" method="{1}"
-                class="org.apache.roller.planet.ui.admin.struts2.PlanetsList">
-            <result name="list">/WEB-INF/jsps/admin/PlanetsList.jsp</result>
-            <interceptor-ref name="basicStack"/>
-        </action>
-        <action name="PlanetForm!*" method="{1}"
-                class="org.apache.roller.planet.ui.admin.struts2.PlanetForm">
-            <result name="input">/WEB-INF/jsps/admin/PlanetForm.jsp</result>
-        </action>
-        <action name="PlanetGroupForm!*" method="{1}"
-                class="org.apache.roller.planet.ui.admin.struts2.PlanetGroupForm">
-            <result name="input">/WEB-INF/jsps/admin/PlanetGroupForm.jsp</result>
-        </action>
-        <action name="PlanetSubscriptionForm!*" method="{1}"
-                class="org.apache.roller.planet.ui.admin.struts2.PlanetSubscriptionForm">
-            <result name="input">/WEB-INF/jsps/admin/PlanetSubscriptionForm.jsp</result>
+        <action name="createUser!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.admin.CreateUser">
+            <result name="input" type="tiles">.CreateUser</result>
         </action>
+        
+        <action name="modifyUser!*" method="{1}"
+                class="org.apache.roller.planet.ui.struts2.admin.ModifyUser">
+            <result name="input" type="tiles">.ModifyUser</result>
+            <result name="error" type="chain">userAdmin</result>
+        </action>
+        
     </package>
+
 </struts>
\ No newline at end of file

Added: roller/planet/core/trunk/web/WEB-INF/jsps/admin/CreateUser.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/admin/CreateUser.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/admin/CreateUser.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/admin/CreateUser.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,34 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle"><s:text name="CreateUser.prompt" /></p>
+
+<s:form action="createUser!save" >
+    <s:textfield name="bean.userName" label="%{getText('CreateUser.userName')}" size="30" maxlength="30" />
+    <s:password name="bean.password" label="%{getText('CreateUser.password')}" size="20" maxlength="20" />
+    <s:textfield name="bean.fullName" label="%{getText('CreateUser.fullName')}" size="30" maxlength="30" />
+    <s:textfield name="bean.emailAddress" label="%{getText('CreateUser.emailAddress')}" size="40" maxlength="40" />
+    <s:checkbox name="bean.enabled" label="%{getText('CreateUser.enabled')}" />
+    <s:checkbox name="bean.administrator" label="%{getText('CreateUser.administrator')}" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="CreateUser.button.save" />
+        <input type="button" value="<s:text name="CreateUser.button.cancel"/>" onclick="window.location='<s:url action="userAdmin"/>'" />
+    </td></tr>
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/admin/GlobalConfig.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/admin/GlobalConfig.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/admin/GlobalConfig.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/admin/GlobalConfig.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,79 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle"><s:text name="GlobalConfig.prompt" /></p>
+
+<s:form theme="simple" action="globalConfig!save">
+
+    <table class="formtableNoDesc">
+    
+    <s:iterator id="dg" value="globalConfigDef.displayGroups">
+    
+        <tr>
+            <td colspan="3"><h2><s:text name="%{#dg.key}" /></h2></td>
+        </tr>
+    
+        <s:iterator id="pd" value="#dg.propertyDefs">
+            
+            <tr>
+                <td class="label"><s:text name="%{#pd.key}" /></td>
+                  
+                  <%-- "string" type means use a simple textbox --%>
+                  <s:if test="#pd.type == 'string'">
+                    <td class="field"><input type="text" name='<s:property value="#pd.name"/>' value='<s:property value="properties[#pd.name].value"/>' size="35" /></td>
+                  </s:if>
+                  
+                  <%-- "text" type means use a full textarea --%>
+                  <s:elseif test="#pd.type == 'text'">
+                    <td class="field">
+                      <textarea name='<s:property value="#pd.name"/>' rows="<s:property value="#pd.rows"/>" cols="<s:property value="#pd.cols"/>"><s:property value="properties[#pd.name].value"/></textarea>
+                    </td>
+                  </s:elseif>
+                  
+                  <%-- "boolean" type means use a checkbox --%>
+                  <s:elseif test="#pd.type == 'boolean'">
+                      <s:if test="properties[#pd.name].value == 'true'">
+                          <td class="field"><input type="checkbox" name='<s:property value="#pd.name"/>' CHECKED></td>
+                      </s:if>
+                      <s:else>
+                          <td class="field"><input type="checkbox" name='<s:property value="#pd.name"/>'></td>
+                      </s:else>
+                  </s:elseif>
+                  
+                  <%-- if it's something we don't understand then use textbox --%>
+                  <s:else>
+                    <td class="field"><input type="text" name='<s:property value="#pd.name"/>' size="50" /></td>
+                  </s:else>
+                
+                <td class="description"><%-- <s:text name="" /> --%></td>
+            </tr>
+          
+        </s:iterator>
+      
+        <tr>
+            <td colspan="2">&nbsp;</td>
+        </tr>
+        
+    </s:iterator>
+        
+    </table>
+    
+    <s:submit theme="simple" />
+    
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/admin/ModifyUser.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/admin/ModifyUser.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/admin/ModifyUser.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/admin/ModifyUser.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,84 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> 
+
+<p class="subtitle">
+    <s:text name="ModifyUser.subtitle">
+        <s:param value="bean.userName" />
+    </s:text>
+</p>
+
+<p class="subtitle">
+    <s:text name="ModifyUser.prompt" />
+</p>
+
+<s:form action="modifyUser!save" >
+    <s:hidden name="bean.id" />
+    
+    <s:textfield name="bean.userName" label="%{getText('CreateUser.userName')}" size="30" maxlength="30" readonly="true" cssStyle="background: #e5e5e5" />
+    <s:password name="bean.password" label="%{getText('CreateUser.password')}" size="20" maxlength="20" />
+    <s:textfield name="bean.fullName" label="%{getText('CreateUser.fullName')}" size="30" maxlength="30" />
+    <s:textfield name="bean.emailAddress" label="%{getText('CreateUser.emailAddress')}" size="40" maxlength="40" />
+    <s:checkbox name="bean.enabled" label="%{getText('CreateUser.enabled')}" />
+    <s:checkbox name="bean.administrator" label="%{getText('CreateUser.administrator')}" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="CreateUser.button.save" />
+        <input type="button" value="<s:text name="CreateUser.button.cancel"/>" onclick="window.location='<s:url action="userAdmin"/>'" />
+    </td></tr>
+</s:form>
+
+<br />
+
+<h4><s:text name="ModifyUser.userPlanets" /></h4>
+
+<s:if test="existingPermissions"> 
+    
+    <p><s:text name="ModifyUser.userMemberOf" /></p>  
+    <table class="data" style="width: 80%">
+        <s:iterator id="perms" value="user.permissions">
+            <tr>
+                <td width="%30">
+                    <a href='<s:property value="baseURL" />/<s:property value="#perms.planet.handle" />/'>
+                        <s:property value="#perms.planet.title" /> [<s:property value="#perms.planet.handle" />] 
+                    </a>
+                </td>
+                <td width="%15">
+                    <s:url action="planetConfig" namespace="/planet-ui/editor" id="config">
+                        <s:param name="planet" value="#perms.planet.handle" />
+                    </s:url>
+                    <img src='<s:url value="/planet-ui/images/cog.png"/>' />
+                    <s:a href="%{config}"><s:text name="ModifyUser.config" /></s:a>
+                </td>
+                <td width="%15">
+                    <s:url action="groups" namespace="/planet-ui/editor" id="groups">
+                        <s:param name="planet" value="#perms.planet.handle" />
+                    </s:url>
+                    <img src='<s:url value="/planet-ui/images/table_multiple.png"/>' />
+                    <s:a href="%{groups}"><s:text name="ModifyUser.groups" /></s:a>
+                </td>
+            </tr>
+        </s:iterator>    
+    </table>
+    
+</s:if>
+
+<s:else>
+    <s:text name="ModifyUser.userHasNoPlanets" />
+</s:else>
+    
\ No newline at end of file

Added: roller/planet/core/trunk/web/WEB-INF/jsps/admin/UserAdmin.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/admin/UserAdmin.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/admin/UserAdmin.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/admin/UserAdmin.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,53 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<script type="text/javascript">
+<!-- //
+<%@ include file="/planet-ui/scripts/ajax-user.js" %>
+// -->
+</script> 
+
+<p><s:text name="UserAdmin.prompt" /></p>
+
+<s:form theme="simple" action="modifyUser" method="GET">
+    
+    <span style="margin:4px"><s:text name="UserAdmin.search" /></span>
+    <input name="userName" id="userName" size="30" maxlength="30" 
+           onfocus="onUserNameFocus(null)" onkeyup="onUserNameChange(null)" 
+           style="margin:4px" />
+    <input type="submit" value='<s:text name="UserAdmin.button.edit" />' 
+           style="margin:4px" />
+    <br />
+    <select id="userList" size="10" onchange="onUserSelected()" 
+            style="width:300px; margin:4px" ></select>
+    
+</s:form>
+
+<s:text name="UserAdmin.prompt.orYouCan" />
+<s:url action="createUser" id="createUser" />
+<a href="<s:property value="createUser" />">
+    <s:text name="UserAdmin.prompt.createANewUser" />
+</a>
+
+<%-- this forces focus to the userName field --%>
+<script type="text/javascript">
+<!--
+    $('userName').focus();
+// -->
+</script>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/CreatePlanet.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/CreatePlanet.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/CreatePlanet.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/CreatePlanet.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,57 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<script type="text/javascript">
+<!--
+function handlePreview(handle) {
+    previewSpan = $("handlePreview");
+    var n1 = previewSpan.childNodes[0];
+    var n2 = document.createTextNode(handle.value);
+    if (handle.value == null) {
+	    previewSpan.appendChild(n2);
+    } else {
+	    previewSpan.replaceChild(n2, n1);
+    }
+}
+-->
+</script>
+
+<p class="subtitle"><s:text name="CreatePlanet.prompt" /></p>
+
+<br /> 
+
+<s:form action="createPlanet!save" >
+    <tr><td></td><td><span style="text-size:70%">
+            <s:text name="CreatePlanet.planetUrl" />:&nbsp;
+            <s:property value="siteURL" />/<span id="handlePreview" style="color:red"><s:if test="bean.handle != null"><s:property value="bean.handle"/></s:if><s:else>handle</s:else></span>/
+    </span></td></tr>
+    <s:textfield name="bean.handle" label="%{getText('CreatePlanet.handle')}" size="30" maxlength="30" onkeyup="handlePreview(this)" />
+    <s:textfield name="bean.title" label="%{getText('CreatePlanet.title')}" size="30" maxlength="30" />
+    <s:textarea name="bean.description" label="%{getText('CreatePlanet.description')}" rows="5" cols="35" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="CreatePlanet.button.save" />
+        <input type="button" value="<s:text name="CreatePlanet.button.cancel"/>" onclick="window.location='<s:url action="menu"/>'" />
+    </td></tr>
+</s:form>
+
+<script type="text/javascript">
+    document.forms[0].elements[0].focus();
+</script>
+    
\ No newline at end of file

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/Login.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/Login.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/Login.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/Login.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,90 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+-->
+
+<%-- Body of the login page, invoked from login.jsp --%>
+
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p><s:text name="Login.prompt" /></p>
+
+<form method="post" id="loginForm" 
+      action="<c:url value="/roller_j_security_check"/>"
+      onsubmit="saveUsername(this)">
+      
+    <table>
+        
+        <tr>
+            <th><s:text name="Login.userName" />:</th>
+            <td>
+                <input type="text" name="j_username" id="j_username" size="25" />
+            </td>
+        </tr>
+        
+        <tr>
+            <th><s:text name="Login.password" />:</th>
+            <td>
+                <input type="password" name="j_password" id="j_password" size="25" />
+            </td>
+        </tr>
+        
+        <c:if test="${rememberMeEnabled}">
+        <tr>
+            <td></td>
+            <td>
+                <input type="checkbox" name="rememberMe" id="rememberMe" />
+                <label for="rememberMe">
+                    <s:text name="Login.rememberMe" />
+                </label>
+            </td>
+        </tr>
+        </c:if>
+        
+        <tr>
+            <td></td>
+            <td>
+                <input type="submit" name="login" id="login" value="<s:text name="Login.login" />" />
+                <input type="reset" name="reset" id="reset" value="<s:text name="Login.reset" />" 
+                    onclick="$('j_username').focus()" />
+            </td>
+        </tr>
+        
+    </table>
+    
+</form>
+
+<script type="text/javascript">
+<!--
+
+if (document.getElementById) {
+    if (getCookie("username") != null) {
+        if (document.getElementById) {
+            $("j_username").value = getCookie("username");
+            $("j_password").focus();
+        }
+    } else {
+        $("j_username").focus();
+    }
+}
+
+function saveUsername(theForm) {
+    var expires = new Date();
+    expires.setTime(expires.getTime() + 24 * 30 * 60 * 60 * 1000); // sets it for approx 30 days.
+    setCookie("username",theForm.j_username.value,expires);
+}
+//-->
+</script>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/MainMenu.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/MainMenu.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/MainMenu.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/MainMenu.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,149 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<%-- PROMPT: Welcome... you have no blog --%>
+<s:if test="existingPermissions.isEmpty && pendingPermissions.isEmpty"> 
+    <p><s:text name="MainMenu.prompt.noPlanets" />
+    <a href="<s:url action="createPlanet"/>"><s:text name="MainMenu.createOne" /></a></p>
+</s:if>    
+
+<%-- PROMPT: You have invitation(s) --%>
+<s:elseif test="! pendingPermissions.isEmpty">
+    <p><s:text name="MainMenu.invitationsPrompt" /></p>
+    
+    <s:iterator id="invite" value="pendingPermissions">
+        <s:text name="MainMenu.youAreInvited" >
+            <s:param value="#invite.planet.handle" />
+        </s:text>
+        
+        <s:url action="menu!accept" id="acceptInvite">
+            <s:param name="inviteId" value="#invite.id" />
+        </s:url>
+        <a href='<s:property value="acceptInvite" />'>
+            <s:text name="MainMenu.accept" />
+        </a> 
+        &nbsp;|&nbsp;
+        <s:url action="menu!decline" id="declineInvite">
+            <s:param name="inviteId" value="#invite.id" />
+        </s:url>
+        <a href='<s:property value="declineInvite" />'>
+            <s:text name="MainMenu.decline" />
+        </a><br />
+    </s:iterator>
+    <br />
+</s:elseif>
+
+<%-- PROMPT: default ... select a planet to edit --%>
+<s:else> 
+    <p><s:text name="MainMenu.prompt.hasPlanet" />
+    <a href="<s:url action="createPlanet"/>"><s:text name="MainMenu.createAdditionalOne" /></a></p>
+</s:else>
+
+<%-- if we have planets, then loop through and list them --%>
+<s:if test="! existingPermissions.isEmpty">
+    
+    <s:iterator id="perms" value="existingPermissions">
+
+        <div class="planetBox">  
+
+            <span class="mm_planet_name"><img src='<c:url value="/planet-ui/images/world_go.png"/>' />&nbsp;<s:property value="#perms.planet.title" /></span>
+            
+            <table class="mm_table" cellpadding="0" cellspacing="0">
+               <tr>
+               <td valign="top">
+
+                   <table cellpadding="0" cellspacing="0">
+                       
+                       <tr>
+                           <td class="mm_subtable_label"><s:text name='MainMenu.planet' /></td>
+                           <td><a href='<s:url value="/%{planet.handle}/" />'>
+                               <s:property value="%{getProp('site.absoluteurl')}" />/<s:property value="#perms.planet.handle" />/
+                           </a></td>                          
+                       </tr>
+                       
+                       <tr>
+                           <td class="mm_subtable_label"><s:text name='MainMenu.permission' /></td>
+                           <td><s:if test="#perms.permissionMask == 0" >LIMITED</s:if>
+                           <s:if test="#perms.permissionMask == 1" >AUTHOR</s:if>
+                           <s:if test="#perms.permissionMask == 3" >ADMIN</s:if></td>
+                       </tr>
+                       
+                       <tr>
+                           <td class="mm_subtable_label"><s:text name='MainMenu.description' /></td>   
+                           <td><s:property value="#perms.planet.description" escape="false" /></td>
+                       </tr>
+                       
+                   </table>
+
+               </td>
+               
+               <td class="mm_table_actions">
+                   
+                       <%-- Planet Configuration --%>
+                       <s:url action="planetConfig" namespace="/planet-ui/editor" id="config">
+                           <s:param name="planet" value="#perms.planet.handle" />
+                       </s:url>
+                       <img src='<s:url value="/planet-ui/images/cog.png"/>' />
+                       <s:a href="%{config}"><s:text name="MainMenu.config" /></s:a>
+                       <br />
+                       
+                       <%-- Manage Groups --%>
+                       <s:url action="groups" namespace="/planet-ui/editor" id="groups">
+                           <s:param name="planet" value="#perms.planet.handle" />
+                       </s:url>
+                       <img src='<s:url value="/planet-ui/images/folder_feed.png"/>' />
+                       <s:a href="%{groups}"><s:text name="MainMenu.subscriptions" /></s:a>
+                       <br />
+                       
+                       <%-- Members --%>
+                       <s:url action="members" namespace="/planet-ui/editor" id="members">
+                           <s:param name="planet" value="#perms.planet.handle" />
+                       </s:url>
+                       <img src='<s:url value="/planet-ui/images/table_multiple.png"/>' />
+                       <s:a href="%{members}"><s:text name="MainMenu.members" /></s:a> 
+                       <br />
+                       
+                       <%-- Delete Planet --%>
+                       <s:url action="planetRemove" namespace="/planet-ui/editor" id="removePlanet">
+                           <s:param name="planet" value="#perms.planet.handle" />
+                       </s:url>
+                       <img src='<s:url value="/planet-ui/images/delete.png"/>' />
+                       <s:a href="%{removePlanet}"><s:text name="MainMenu.remove" /></s:a>
+                       <br />
+                       
+                       <%-- Resign, if allowed --%>
+                       <s:if test="#perms.permissionMask == 0 || #perms.permissionMask == 1 || #perms.planet.adminUserCount > 1">
+                          <img src='<c:url value="/planet-ui/images/delete.png"/>' />
+                          <s:url action="menu!resign" id="resignplanet">
+                               <s:param name="planetId" value="#perms.planet.id" />
+                          </s:url>
+                          <a href='<s:property value="resignplanet" />'>
+                              <s:text name='MainMenu.resign' />
+                          </a>
+                       </s:if>
+
+               </td>
+               </tr>
+            </table>
+            
+        </div>
+        
+    </s:iterator>
+
+</s:if>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/Profile.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/Profile.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/Profile.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/Profile.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,33 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p><s:text name="Profile.prompt" /></p>
+
+<s:form action="profile!save" >
+    <s:textfield name="bean.userName" label="%{getText('Register.userName')}" size="30" maxlength="30" readonly="true" cssStyle="background: #e5e5e5" />
+    <s:password name="bean.passwordText" label="%{getText('Register.password')}" size="20" maxlength="20" />
+    <s:password name="bean.passwordConfirm" label="%{getText('Register.passwordConfirm')}" size="20" maxlength="20" />
+    <s:textfield name="bean.fullName" label="%{getText('Register.fullName')}" size="30" maxlength="30" />
+    <s:textfield name="bean.emailAddress" label="%{getText('Register.emailAddress')}" size="40" maxlength="40" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="Profile.button.save" />
+        <input type="button" value="<s:text name="Register.button.cancel"/>" onclick="window.location='<s:url action="menu"/>'" />
+    </td></tr>
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/Register.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/Register.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/Register.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/Register.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,33 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+-->
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p><s:text name="Register.prompt" /></p>
+
+<s:form action="register!save" >
+    <s:textfield name="bean.userName" label="%{getText('Register.userName')}" size="30" maxlength="30" />
+    <s:password name="bean.passwordText" label="%{getText('Register.password')}" size="20" maxlength="20" />
+    <s:password name="bean.passwordConfirm" label="%{getText('Register.passwordConfirm')}" size="20" maxlength="20" />
+    <s:textfield name="bean.fullName" label="%{getText('Register.fullName')}" size="30" maxlength="30" />
+    <s:textfield name="bean.emailAddress" label="%{getText('Register.emailAddress')}" size="40" maxlength="40" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="Register.button.save" />
+        <input type="button" value="<s:text name="Register.button.cancel"/>" onclick="window.location='<s:url value="/"/>'" />
+    </td></tr>
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/RegisterDisabled.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/RegisterDisabled.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/RegisterDisabled.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/RegisterDisabled.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,20 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<div class="notification"><s:text name="Register.disabled" /></div>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/Setup.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/Setup.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/Setup.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/Setup.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,72 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<s:text name="index.prompt" /><br /><br />
+<div style="width:75%">
+    <ul>
+        <%-- 
+                 Tell the user how to complete their Roller install, with helpful
+                 notes and links to the appropriate places in the Roller UI.
+            --%>
+
+        <%-- STEP 1: Create a user if you don't already have one --%>
+        <li><b><s:text name="index.createUser" />
+                <s:if test="userCount > 0"> - 
+                    <s:text name="index.createUserDone">
+                        <s:param value="userCount" />
+                    </s:text>
+                </s:if>
+            </b><br /><br />
+            <s:text name="index.createUserHelp" /><br /><br />
+            <s:text name="index.createUserBy" /> 
+            <a href='<s:url action="register"/>'>
+                <s:text name="index.createUserPage" />
+            </a>.
+            <br /><br /><br />
+        </li>
+        
+        <%-- STEP 2: Create a weblog if you don't already have one --%>
+        <li><b><s:text name="index.createWeblog" />
+                <s:if test="blogCount > 0"> - 
+                    <s:text name="index.createWeblogDone">
+                        <s:param value="blogCount" />
+                    </s:text>
+                </s:if>
+            </b><br /><br />
+            <s:text name="index.createWeblogHelp" /><br /><br />
+            <s:text name="index.createWeblogBy" /> 
+            <a href='<s:url action="createWeblog"/>'>
+                <s:text name="index.createWeblogPage" />
+            </a>
+            <br /><br /><br />
+        </li>
+        
+        <%-- STEP 3: Designate a weblog to be the frontpage weblot --%>
+        <li><b><s:text name="index.setFrontpage" /></b><br />
+            <br />
+            <s:text name="index.setFrontpageHelp" /><br />
+            <br />
+            <s:text name="index.setFrontpageBy" /> 
+            <a href='<s:url action="globalConfig" namespace="/roller-ui/admin" />'>
+                <s:text name="index.setFrontpagePage" />
+            </a>
+        </li>
+        
+    </ul>
+</div>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/core/Welcome.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/core/Welcome.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/core/Welcome.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/core/Welcome.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,26 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+-->
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p><s:text name="welcome.accountCreated" /></p>
+<p><a href="<s:url action="login-redirect"/>" ><s:text name="welcome.clickHere" /></a>
+    <s:text name="welcome.toLoginAndPost" /></p>
+
+<br />
+<br />
+<br />

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupAdd.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupAdd.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupAdd.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupAdd.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,41 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+   <s:text name="GroupAdd.prompt" >
+       <s:param value="actionPlanet.title" />
+   </s:text>
+</p>
+
+<s:form action="groupAdd!save">
+    <s:hidden name="planet" value="%{actionPlanet.handle}" />
+    
+    <s:textfield name="bean.handle" label="%{getText('GroupAdd.field.handle')}" size="30" maxlength="30" />
+    <s:textfield name="bean.title" label="%{getText('GroupAdd.field.title')}" size="30" maxlength="30" />
+    <s:textarea name="bean.description" label="%{getText('GroupAdd.field.description')}" rows="5" cols="35" />
+    <s:textfield name="bean.pageEntries" label="%{getText('GroupAdd.field.pageEntries')}" size="4" maxlength="2" />
+    <s:textfield name="bean.feedEntries" label="%{getText('GroupAdd.field.feedEntries')}" size="4" maxlength="2" />
+    
+    <tr><td></td><td>
+    <s:submit theme="simple" key="GroupAdd.button.save" />
+    <s:url id="cancelurl" action="groups"><s:param name="planet" value="%{planet}"/></s:url>
+    <input type="button" value="<s:text name="GroupAdd.button.cancel"/>" onclick="window.location='<s:url value="%{cancelurl}"/>'" />
+    </td></tr>
+</s:form>
+

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupEdit.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupEdit.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupEdit.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupEdit.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,43 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p class="subtitle">
+   <s:text name="GroupEdit.prompt" >
+       <s:param value="actionGroup.title" />
+   </s:text>
+</p>
+
+<s:form action="groupEdit!save">
+    <s:hidden name="planet" value="%{actionPlanet.handle}" />
+    <s:hidden name="group" value="%{actionGroup.handle}" />
+    
+    <s:textfield name="bean.handle" label="%{getText('GroupAdd.field.handle')}" size="30" maxlength="30" readonly="true" cssStyle="background: #e5e5e5" />
+    <s:textfield name="bean.title" label="%{getText('GroupAdd.field.title')}" size="30" maxlength="30" />
+    <s:textarea name="bean.description" label="%{getText('GroupAdd.field.description')}" rows="5" cols="35" />
+    <s:textfield name="bean.pageEntries" label="%{getText('GroupAdd.field.pageEntries')}" size="4" maxlength="2" />
+    <s:textfield name="bean.feedEntries" label="%{getText('GroupAdd.field.feedEntries')}" size="4" maxlength="2" />
+    
+    <tr><td></td><td>
+        <s:submit theme="simple" key="GroupEdit.button.save" />
+        <s:url id="cancelurl" action="groups"><s:param name="planet" value="%{planet}"/></s:url>
+        <input type="button" value="<s:text name="GroupAdd.button.cancel"/>" onclick="window.location='<s:url value="%{cancelurl}"/>'" />
+    </td></tr>
+    
+</s:form>
+

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupRemove.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupRemove.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupRemove.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/GroupRemove.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,53 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p>
+    <s:text name="GroupRemove.youSure">
+        <s:param value="actionGroup.title" />
+    </s:text>
+    <br/>
+    <br/>
+    <span class="warning">
+        <s:text name="GroupRemove.removeGroupWarning" />
+    </span>
+</p>
+
+<p>
+    <s:text name="GroupRemove.groupId" /> = [<s:property value="actionGroup.id" />]
+    <br />
+    <s:text name="GroupRemove.groupTitle" /> = [<s:property value="actionGroup.title" />]
+</p>
+
+<table>
+    <tr>
+        <td>
+            <s:form action="groupRemove!remove">
+                <s:hidden name="planet" value="%{actionPlanet.handle}" />
+                <s:hidden name="group" value="%{actionGroup.handle}" />
+                <s:submit key="yes" />
+            </s:form>
+        </td>
+        <td>
+            <s:form action="groups" method="get">
+                <s:hidden name="planet" value="%{actionPlanet.handle}" />
+                <s:submit key="no" />
+            </s:form>
+        </td>
+    </tr>
+</table>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/Groups.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/Groups.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/Groups.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/Groups.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,58 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<p class="subtitle">
+    <s:text name="Groups.prompt">
+        <s:param value="%{planet}" />
+    </s:text>
+</p>
+
+<s:url id="addurl" action="groupAdd">
+    <s:param name="planet"><s:property value="actionPlanet.handle"/></s:param>
+</s:url>
+<p><img src='<s:url value="/planet-ui/images/folder_add.png"/>' /><s:a href="%{addurl}"><s:text name="Groups.addGroup"><s:param value="%{planet}" /></s:text></s:a></p>
+
+<table class="data">
+    <tr>
+        <th><s:text name="Groups.groupTitle" /></th>
+        <th colspan="3"><s:text name="Groups.action" /></th>
+    </tr>
+    
+    <s:iterator id="group" value="actionPlanet.groups" status="status">
+        <s:url id="editgroupurl" action="groupEdit" >
+            <s:param name="planet"><s:property value="actionPlanet.handle"/></s:param>
+            <s:param name="group"><s:property value="#group.handle"/></s:param>
+        </s:url>
+        <s:url id="editsubs" action="subscriptions" >
+            <s:param name="planet"><s:property value="actionPlanet.handle"/></s:param>
+            <s:param name="group"><s:property value="#group.handle"/></s:param>
+        </s:url>
+        <s:url id="removegroupurl" action="groupRemove" >
+            <s:param name="planet"><s:property value="actionPlanet.handle"/></s:param>
+            <s:param name="group"><s:property value="#group.handle"/></s:param>
+        </s:url>
+        <tr class='<s:if test="#status.even">evenRow</s:if><s:else>oddRow</s:else>'>
+            <td><a href='<s:url value="/%{planet.handle}/group/%{handle}/" />'><s:property value="#group.title"/></a></td>
+            <td class="narrowColumn"><s:a href="%{editgroupurl}"><img src='<s:url value="/planet-ui/images/cog.png"/>' title="<s:text name="Groups.tip.editGroup"/>" /></s:a></td>
+            <td class="narrowColumn"><s:a href="%{editsubs}"><img src='<s:url value="/planet-ui/images/feed_add.png"/>' title="<s:text name="Groups.tip.subscriptions"/>" /></s:a></td>
+            <td class="narrowColumn"><s:a href="%{removegroupurl}"><img src='<s:url value="/planet-ui/images/delete.png"/>' title="<s:text name="Groups.tip.deleteGroup"/>" /></s:a></td>
+        </tr>
+    </s:iterator>
+</table>
+

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/Members.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/Members.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/Members.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/Members.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,77 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<script type="text/javascript">
+<!-- //
+<%@ include file="/planet-ui/scripts/ajax-user.js" %>
+// -->
+</script> 
+        
+<p class="subtitle">
+    <s:text name="Members.prompt.revoke">
+        <s:param value="%{actionPlanet.title}" />
+    </s:text>
+</p>
+
+<s:form theme="simple" action="members!revoke">
+    <s:hidden name="planet" value="%{planet}" />
+    
+<table class="data">
+    <tr>
+        <th><s:text name="Members.tableHeading.name" /></th>
+        <th><s:text name="Members.tableHeading.action" /></th>
+    </tr>
+    
+    <s:iterator id="permission" value="actionPlanet.permissions" status="status">
+        <tr class='<s:if test="#status.even">evenRow</s:if><s:else>oddRow</s:else>'>
+            <td><s:property value="#permission.user.fullName" /> <s:if test="#permission.pending"><b>(pending)</b></s:if></td>
+            <td class="narrowColumn" style="width:15%">
+                <input type="checkbox" name="revokeIds" value="<s:property value="#permission.id" />">
+            </td>
+        </tr>
+    </s:iterator>
+    
+    <tr>
+        <td class="submit" colspan="2"><s:submit theme="simple" key="Members.submit.revoke" /></td>
+    </tr>
+</table>
+
+</s:form>
+
+<br/><br/>
+
+<p class="subtitle">
+    <s:text name="Members.prompt.invite">
+        <s:param value="%{actionPlanet.title}" />
+    </s:text>
+</p>
+
+<s:form theme="simple" action="members!invite">
+    <s:hidden name="planet" value="%{actionPlanet.handle}" />
+    
+    <span style="margin:4px"><s:text name="Members.search" /></span>
+    <input name="userName" id="userName" size="30" 
+           onfocus="onUserNameFocus(null)" onkeyup="onUserNameChange(null)" 
+           style="margin:4px" />
+    <br />
+    <select id="userList" size="10" onchange="onUserSelected()" 
+            style="width:300px; margin:4px" ></select>
+    <br />
+    <s:submit key="Members.submit.invite" />
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetConfig.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetConfig.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetConfig.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetConfig.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,31 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<s:form action="planetConfig!save">
+    <s:hidden name="planet" value="%{actionPlanet.handle}" />
+    
+    <s:textfield name="bean.handle" label="%{getText('PlanetConfig.field.handle')}" size="30" maxlength="30" readonly="true" cssStyle="background: #e5e5e5" />
+    <s:textfield name="bean.title" label="%{getText('PlanetConfig.field.title')}" size="30" maxlength="30" />
+    <s:textarea name="bean.description" label="%{getText('PlanetConfig.field.description')}" rows="5" cols="35" />
+    
+    <tr><td></td><td>
+    <s:submit theme="simple" key="PlanetConfig.button.save" />
+    <input type="button" value='<s:text name="PlanetConfig.button.cancel"/>' onclick="window.location='<s:url action="menu"/>'" />
+    </td></tr>
+</s:form>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetRemove.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetRemove.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetRemove.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/PlanetRemove.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,49 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<p>
+    <s:text name="PlanetRemove.youSure">
+        <s:param value="actionPlanet.title" />
+    </s:text>
+    <br/>
+    <br/>
+    <span class="warning">
+        <s:text name="PlanetRemove.warning" />
+    </span>
+</p>
+
+<p>
+    <s:text name="PlanetRemove.planetId" /> = [<s:property value="actionPlanet.id" />]
+    <br />
+    <s:text name="PlanetRemove.planetTitle" /> = [<s:property value="actionPlanet.title" />]
+</p>
+
+<table>
+    <tr>
+        <td>
+            <s:form action="planetRemove!remove">
+                <s:hidden name="planet" value="%{actionPlanet.handle}" />
+                <s:submit key="yes" />
+            </s:form>
+        </td>
+        <td>
+            <input type="button" value='<s:text name="no"/>' onclick="window.location='<s:url action="menu"/>'" />
+        </td>
+    </tr>
+</table>

Added: roller/planet/core/trunk/web/WEB-INF/jsps/editor/Subscriptions.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/editor/Subscriptions.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/editor/Subscriptions.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/editor/Subscriptions.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,59 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+
+<script type="text/javascript">
+function confirmSubDelete(subUrl, title) {
+  if (window.confirm('Are you sure you want to remove subscription: ' + title)) {
+    document.location.href='<s:url action="subscriptions!remove" />?planet=<s:property value="planet"/>&group=<s:property value="group"/>&subUrl='+subUrl;
+  }
+}
+</script>
+        
+<p class="subtitle">
+    <s:url id="groupsurl" action="groups">
+        <s:param name="planet" value="%{planet}" />
+    </s:url>
+    <s:a href="%{groupsurl}"><s:text name="Subscriptions.backToGroups" /></s:a>
+</p>
+
+<div class="addSub">
+    <s:form theme="simple" action="subscriptions!add">
+        <s:hidden name="planet" />
+        <s:hidden name="group" />
+        <img src='<s:url value="/planet-ui/images/feed_add.png"/>' /><s:text name="Subscriptions.addSub"/>
+        <s:textfield theme="simple" name="subUrl" size="60" />
+        <s:submit theme="simple" />
+    </s:form>
+</div>
+
+<table class="data" style="width:80%">
+    <tr>
+        <th><s:text name="Subscriptions.subsTitle" /></th>
+        <th colspan="2"><s:text name="Subscriptions.action" /></th>
+    </tr>
+    
+    <s:iterator id="sub" value="actionGroup.subscriptions" status="status">
+        <tr class='<s:if test="#sub.errorCount > 0">errorRow</s:if><s:elseif test="#status.even">evenRow</s:elseif><s:else>oddRow</s:else>'>
+            <td><a href='<s:property value="#sub.siteURL"/>'><s:property value="title"/></a></td>
+            <td class="narrowColumn"><a href='<s:property value="#sub.feedURL"/>'><img src='<s:url value="/planet-ui/images/feed_link.png"/>' title="<s:text name="Subscriptions.tip.visitFeed"/>" /></a></td>
+            <td class="narrowColumn"><a href="javascript: void(0);" onclick="confirmSubDelete('<s:url value="%{#sub.encodedFeedURL}"/>', '<s:property value="%{escapeJavascript(#sub.title)}"/>');"><img src='<s:url value="/planet-ui/images/delete.png"/>' title="<s:text name="Subscriptions.tip.deleteSub"/>" /></a></td>
+        </tr>
+    </s:iterator>
+</table>
+

Added: roller/planet/core/trunk/web/WEB-INF/jsps/errors/403.jsp
URL: http://svn.apache.org/viewvc/roller/planet/core/trunk/web/WEB-INF/jsps/errors/403.jsp?rev=672574&view=auto
==============================================================================
--- roller/planet/core/trunk/web/WEB-INF/jsps/errors/403.jsp (added)
+++ roller/planet/core/trunk/web/WEB-INF/jsps/errors/403.jsp Sat Jun 28 12:18:17 2008
@@ -0,0 +1,55 @@
+<%--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  The ASF licenses this file to You
+  under the Apache License, Version 2.0 (the "License"); you may not
+  use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+--%>
+<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title><s:text name="error.title.403" /></title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    </head>
+    <body>
+        
+        <h2 class="error"><s:text name="error.title.403" /></h2>
+        
+        <c:set var="status_code" value="${requestScope['javax.servlet.error.status_code']}" />
+        <c:set var="message"     value="${requestScope['javax.servlet.error.message']}" />
+        <c:set var="type"        value="${requestScope['javax.servlet.error.type']}" />
+        
+        <table width="80%" border="1px" style="border-collapse: collapse;">
+            <tr>
+                <td width="20%">Status Code</td>
+                <td><c:out value="${status_code}" /></td>
+            </tr>
+            <tr>
+                <td width="20%">Message</td>
+                <td><c:out value="${message}" /></td>
+            </tr>
+            <tr>
+                <td width="20%">Type</td>
+                <td><c:out value="${type}" /></td>
+            </tr>
+            <tr>
+                <td width="20%">Exception</td>
+                <td><s:text name="error.text.403" /></td>
+            </tr>
+        </table>
+        
+        <br />
+        <br />
+    </body>
+</html>