You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2007/07/03 00:25:30 UTC

svn commit: r552610 - in /portals/jetspeed-2/trunk: applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/ applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/ applications/j2-admin/src/java/org/apache/jetspeed/portl...

Author: taylor
Date: Mon Jul  2 15:25:29 2007
New Revision: 552610

URL: http://svn.apache.org/viewvc?view=rev&rev=552610
Log:
http://issues.apache.org/jira/browse/JS2-707

When creating a new user, give option to create inside a subsite
Also added the same options to the User Registration portlet
This enables us to create users directly into subsites using either the User Admin portlet, or self-reg

Modified:
    portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/UserRegistrationPortlet.java
    portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/SecurityResources.java
    portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
    portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
    portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
    portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/portlet.xml
    portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details-edit.jsp
    portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details.jsp
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/administration/PortalAdministration.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/User.java
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/min-pages/page.security
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/pages/page.security

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/UserRegistrationPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/UserRegistrationPortlet.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/UserRegistrationPortlet.java (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/registration/UserRegistrationPortlet.java Mon Jul  2 15:25:29 2007
@@ -33,6 +33,7 @@
 import javax.portlet.ActionResponse;
 import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
+import javax.portlet.PortletMode;
 import javax.portlet.PortletPreferences;
 import javax.portlet.PortletRequest;
 import javax.portlet.PortletResponse;
@@ -51,6 +52,7 @@
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.jetspeed.security.User;
 import org.apache.jetspeed.security.UserManager;
+import org.apache.portals.bridges.util.PreferencesHelper;
 import org.apache.portals.bridges.velocity.AbstractVelocityMessagingPortlet;
 import org.apache.portals.gems.util.ValidationHelper;
 import org.apache.velocity.context.Context;
@@ -235,6 +237,13 @@
         this.redirectPath = config.getInitParameter(IP_REDIRECT_PATH);
     }
 
+    public void doEdit(RenderRequest request, RenderResponse response)
+    throws PortletException, IOException
+    {
+        response.setContentType("text/html");
+        doPreferencesEdit(request, response);
+    }
+    
     public void doView(RenderRequest request, RenderResponse response)
             throws PortletException, IOException
     {
@@ -488,6 +497,15 @@
         ResourceBundle resource = getPortletConfig().getResourceBundle(
                 actionRequest.getLocale());
 
+        if (actionRequest.getPortletMode() == PortletMode.EDIT)
+        {
+            PortletPreferences prefs = actionRequest.getPreferences();
+            PreferencesHelper.requestParamsToPreferences(actionRequest);
+            prefs.store();
+            actionResponse.setPortletMode(PortletMode.VIEW);
+            return;
+        }
+        
         try
         {
 
@@ -651,13 +669,37 @@
             // Ok, we think we're good to go, let's create the user!
             try
             {
+                PortletPreferences prefs = actionRequest.getPreferences();
+                String template = prefs.getValue("newUserTemplateDirectory", "");
+                if (template.trim().length() == 0)
+                    template = null;
+                String subsiteRootFolder = prefs.getValue("subsiteRootFolder", "");
+                if (subsiteRootFolder.trim().length() == 0)
+                    subsiteRootFolder = null;
+                List prefRoles = getPreferencesList(prefs, IP_ROLES);
+                if (prefRoles.isEmpty())
+                    prefRoles = this.roles;
+                List prefGroups = getPreferencesList(prefs, IP_GROUPS);
+                if (prefGroups.isEmpty())
+                    prefGroups = this.groups;
+                
+                List names = getPreferencesList(prefs, IP_RULES_NAMES);
+                List values = getPreferencesList(prefs, IP_RULES_VALUES);
+                Map profileRules = new HashMap();
+                for (int ix = 0; ix < ((names.size() < values.size()) ? names.size()
+                        : values.size()); ix++)
+                {
+                    profileRules.put(names.get(ix), values.get(ix));
+                }
+                if (profileRules.isEmpty())
+                    profileRules = this.rules;
+                
                 admin.registerUser((String) userInfo.get("user.name"),
-                        (String) userInfo.get("password"), this.roles,
-                        this.groups, userAttributes, // note use of only
+                        (String) userInfo.get("password"), prefRoles,
+                        prefGroups, userAttributes, // note use of only
                                                         // PLT.D values here.
-                        rules, null); // passing in null causes use of default
-                                        // template
-
+                        profileRules, template, subsiteRootFolder); 
+                
                 String urlGUID = ForgottenPasswordPortlet.makeGUID(
                         (String) userInfo.get("user.name"), (String) userInfo
                                 .get("password"));
@@ -670,7 +712,6 @@
                 if (templ == null) { throw new Exception(
                         "email template not available"); }
 
-                PortletPreferences prefs = actionRequest.getPreferences();
                 boolean sendEmail = prefs.getValue("SendEmail", "true").equals("true");
                 if (sendEmail)
                 {
@@ -745,6 +786,18 @@
         return Arrays.asList(temps);
     }
 
+    protected List getPreferencesList(PortletPreferences prefs, String prefName)
+    {
+        String temp = prefs.getValue(prefName, "");
+        if (temp == null || temp.trim().length() == 0) return new ArrayList();
+
+        String[] temps = temp.split("\\,");
+        for (int ix = 0; ix < temps.length; ix++)
+            temps[ix] = temps[ix].trim();
+
+        return Arrays.asList(temps);
+    }
+    
     protected String generateReturnURL(PortletRequest request,
             PortletResponse response, String urlGUID)
     {

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/SecurityResources.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/SecurityResources.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/SecurityResources.java (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/SecurityResources.java Mon Jul  2 15:25:29 2007
@@ -51,7 +51,7 @@
     public static final String MESSAGE_REFRESH_PROFILES = "refresh.profiles";
     public static final String MESSAGE_REFRESH_ROLES = "refresh.roles";
     public static final String MESSAGE_REFRESH_GROUPS = "refresh.groups";
-    
+    public static final String MESSAGE_REFRESH_SUBSITES = "refresh.subsites";    
     
     /** the selected non-leaf node in the tree view */
     public final static String REQUEST_NODE = "node";

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties Mon Jul  2 15:25:29 2007
@@ -65,10 +65,15 @@
 user.details.preference.showPasswordExpiration=Show Password Expiration
 user.details.preference.showChangePasswordRequiredForAddUser=Define default \"Change Password Required on First Login\" for new User
 user.details.preference.showRoleForAddUser=Define default Role for new User
-user.details.preference.showProfileForAddUser=Define default Profile for new User
+user.details.preference.showProfileForAddUser=Define default Profile for new User
+user.details.preference.showSubsiteForAddUser=Allow assignment of Subsite for new User
 user.details.preference.defaultChangePasswordRequired=Default \"Change Password Required on First Login\"
 user.details.preference.defaultRole=Default Role for new User
-user.details.preference.defaultProfile=Default Profile for new User
+user.details.preference.requiredRole=Required Role for new User
+user.details.preference.defaultProfile=Default Profile for new User
+user.details.preference.defaultSubsite=Default Subsite for new User
+user.details.preference.newUserTemplateDirectory=New User Template Directory
+user.details.preference.subsiteRootFolder=Subsite Root Folder
 user.details.save.preferences=Save
 
 ## tree
@@ -87,4 +92,5 @@
 security.profiling.rule=Profiling Rule:
 security.add.user.submit=Add User
 security.add.new.user=Add New User
-security.remove.user=Remove User
\ No newline at end of file
+security.remove.user=Remove User
+security.subsites=Subsites:

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties Mon Jul  2 15:25:29 2007
@@ -67,10 +67,15 @@
 user.details.preference.showPasswordExpiration=Show Password Expiration
 user.details.preference.showChangePasswordRequiredForAddUser=Define default \"Change Password Required on First Login\" for new User
 user.details.preference.showRoleForAddUser=Define default Role for new User
-user.details.preference.showProfileForAddUser=Define default Profile for new User
+user.details.preference.showProfileForAddUser=Define default Profile for new User
+user.details.preference.showSubsiteForAddUser=Allow assignment of Subsite for new User
 user.details.preference.defaultChangePasswordRequired=Default \"Change Password Required on First Login\"
-user.details.preference.defaultRole=Default Role for new User
+user.details.preference.defaultRole=Default Role for new User
+user.details.preference.requiredRole=Required Role for new User
 user.details.preference.defaultProfile=Default Profile for new User
+user.details.preference.defaultSubsite=Default Subsite for new User
+user.details.preference.newUserTemplateDirectory=New User Template Directory
+user.details.preference.subsiteRootFolder=Subsite Root Folder
 user.details.save.preferences=Save
 
 ## tree
@@ -89,7 +94,8 @@
 security.profiling.rule=Profiling Rule:
 security.add.user.submit=Add User
 security.add.new.user=Add New User
-security.remove.user=Remove User
+security.remove.user=Remove User
+security.subsites=Subsites:
 
 # forgotten password feature
 email.subject.forgotten.password = Password Notification

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java Mon Jul  2 15:25:29 2007
@@ -17,6 +17,7 @@
 package org.apache.jetspeed.portlets.security.users;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -48,7 +49,9 @@
 import org.apache.jetspeed.om.common.UserAttribute;
 import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
 import org.apache.jetspeed.om.folder.Folder;
+import org.apache.jetspeed.om.folder.FolderNotFoundException;
 import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.page.document.NodeSet;
 import org.apache.jetspeed.portlets.security.SecurityResources;
 import org.apache.jetspeed.portlets.security.SecurityUtil;
 import org.apache.jetspeed.profiler.Profiler;
@@ -115,6 +118,8 @@
     /** the id of the rules control */
     private static final String RULES_CONTROL = "jetspeedRules";
     
+    /** the id of the subsites control */
+    private static final String SUBSITES_CONTROL = "jetspeedSubsites";
 
     /** the id of the groups control */
     private static final String GROUPS_CONTROL = "jetspeedGroups";
@@ -342,7 +347,8 @@
         else
         {
             renderRoleInformation(request);
-            renderProfileInformation(request);            
+            renderProfileInformation(request);
+            renderSubsiteInformation(request);
         }
         // check for ErrorMessages
         ArrayList errorMessages = (ArrayList)PortletMessaging.consume(request, SecurityResources.TOPIC_USER, SecurityResources.ERROR_MESSAGES);
@@ -479,13 +485,62 @@
         }
         request.setAttribute(RULES_CONTROL, rules);        
     }
+
+    protected void renderSubsiteInformation(RenderRequest request)
+    {
+        // check for refresh on profiles list
+        String refreshSubsites = (String)PortletMessaging.consume(request, 
+                        SecurityResources.TOPIC_USERS, SecurityResources.MESSAGE_REFRESH_SUBSITES);
+        Collection subsites = null;        
+        if (refreshSubsites == null)
+        {        
+            subsites = (Collection) request.getPortletSession().getAttribute(SUBSITES_CONTROL);
+        }
+        
+        // build the subsites control and provide it to the view
+        if (subsites == null)
+        {
+            subsites = new ArrayList();
+            SubsiteInfo emptyone = new SubsiteInfo("","");
+            subsites.add(emptyone);
+            String subsiteRoot = request.getPreferences().getValue("subsiteRootFolder", "");
+            if (!subsiteRoot.equals(""))
+            {
+                try
+                {
+                    Folder subsiteFolder = pageManager.getFolder(subsiteRoot);
+                    NodeSet set = pageManager.getFolders(subsiteFolder);
+                    if (set != null && !set.isEmpty())
+                    {
+                        Iterator setIterator = set.iterator();
+                        while (setIterator.hasNext())
+                        {
+                            Folder f = (Folder)setIterator.next();
+                            subsites.add(new SubsiteInfo(f.getPath(), f.getTitle()));
+                        }
+                    }
+                }
+                catch (FolderNotFoundException fnfe)
+                {
+                    // subsites not used, ignore
+                }
+                catch (Exception e)
+                {
+                    
+                }
+            }
+            request.getPortletSession().setAttribute(SUBSITES_CONTROL, subsites);
+        }
+        request.setAttribute(SUBSITES_CONTROL, subsites);        
+    }
     
     public void doEdit(RenderRequest request, RenderResponse response)
     throws PortletException, IOException
     {
         response.setContentType("text/html");
         renderRoleInformation(request);
-        renderProfileInformation(request);            
+        renderProfileInformation(request);
+        renderSubsiteInformation(request);
         super.doEdit(request, response);
     }
 
@@ -499,6 +554,7 @@
             prefs.store();
             actionResponse.setPortletMode(PortletMode.VIEW);
             initPrefsAndAttr(actionRequest);
+            actionRequest.getPortletSession().removeAttribute(SUBSITES_CONTROL);
             return;
         }
         
@@ -585,13 +641,17 @@
         {
             try
             {
+                Preferences attributes = user.getUserAttributes();
+                String subsite = attributes.get(User.USER_INFO_SUBSITE, null);                
                 userManager.removeUser(userName);
                 PortletMessaging.publish(actionRequest, SecurityResources.TOPIC_USERS, SecurityResources.MESSAGE_REFRESH, "true");
-                                
-                // TODO: handle subsite roots
-                if (pageManager.folderExists(Folder.USER_FOLDER + userName))
+                if (subsite == null)
+                {
+                    subsite = Folder.USER_FOLDER + userName;
+                }
+                if (pageManager.folderExists(subsite))
                 {
-                    Folder folder = pageManager.getFolder(Folder.USER_FOLDER + userName);                    
+                    Folder folder = pageManager.getFolder(subsite);                    
                     pageManager.removeFolder(folder);
                 }
                             
@@ -1084,10 +1144,21 @@
                 }
                 
                 String templateFolder = actionRequest.getPreferences().getValue("newUserTemplateDirectory", "/_user/template/");
-
+                String subsite = actionRequest.getParameter(SUBSITES_CONTROL);
+                if (SecurityUtil.isEmpty(subsite))
+                {
+                    subsite = Folder.USER_FOLDER + userName;
+                }
+                else
+                {
+                    subsite  = subsite + Folder.USER_FOLDER +  userName;
+                    Preferences attributes = user.getUserAttributes();
+                    attributes.put(User.USER_INFO_SUBSITE, subsite);                    
+                }
+                
                 // copy the entire dir tree from the template folder
                 Folder source = pageManager.getFolder(templateFolder);                
-                pageManager.deepCopyFolder(source, Folder.USER_FOLDER + userName, userName);
+                pageManager.deepCopyFolder(source, subsite, userName);
                 
                 // TODO: send message that site tree portlet invalidated
                 
@@ -1109,6 +1180,27 @@
         }
     }
     
+    public class SubsiteInfo implements Serializable
+    {
+        private String title;
+        private String path;
+
+        public SubsiteInfo(String path, String title)
+        {
+            this.path = path;
+            this.title = title;
+        }
+        
+        public String getPath()
+        {
+            return path;
+        }
+                
+        public String getTitle()
+        {
+            return title;
+        }        
+    }
     /*
     private void setSecurityConstraints(Folder folder, String userName)
     {
@@ -1116,5 +1208,6 @@
         constraints.setOwner(userName);
         folder.setSecurityConstraints(constraints);        
     }
-    */
+    */    
+    
 }

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/portlet.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/portlet.xml?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/portlet.xml (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/portlet.xml Mon Jul  2 15:25:29 2007
@@ -288,6 +288,10 @@
             <value>true</value>
         </preference>
         <preference>
+            <name>showSubsiteForAddUser</name>
+            <value>true</value>
+        </preference>
+        <preference>
             <name>defaultChangePasswordRequired</name>
             <value>false</value>
         </preference>
@@ -307,6 +311,14 @@
      		<name>requiredRole</name>
             <value></value>   
         </preference>
+        <preference>
+     		<name>subsiteRootFolder</name>
+            <value>/__subsite-root/_hostname/</value>   
+        </preference>        
+        <preference>
+     		<name>defaultSubsite</name>
+            <value></value>   
+        </preference>                
     </portlet-preferences>
 </portlet>
 
@@ -1098,6 +1110,10 @@
         <value>/WEB-INF/view/userreg/userRegistration.vm</value>
     </init-param>
     <init-param>
+        <name>EditPage</name>
+        <value>/WEB-INF/view/edit-prefs.vm</value>
+    </init-param>            
+    <init-param>
         <description>This option will generate a new password for each user registration</description>
         <name>Option_Generate_Passwords</name>
         <value>false</value>
@@ -1153,6 +1169,7 @@
     <supports>
         <mime-type>text/html</mime-type>
         <portlet-mode>VIEW</portlet-mode>
+        <portlet-mode>EDIT</portlet-mode>
     </supports>
     <supported-locale>en</supported-locale>
     <supported-locale>ja</supported-locale>
@@ -1167,6 +1184,30 @@
             <name>SendEmail</name>
             <value>false</value>
         </preference>    
+        <preference>
+            <name>newUserTemplateDirectory</name>
+            <value>/_user/template/</value>
+        </preference>        
+        <preference>
+     		<name>subsiteRootFolder</name>
+            <value></value>   
+        </preference>        
+        <preference>
+     		<name>roles</name>
+            <value>user</value>   
+        </preference>        
+        <preference>
+     		<name>groups</name>
+            <value></value>   
+        </preference>        
+        <preference>
+     		<name>rulesNames</name>
+            <value>page</value>   
+        </preference>        
+        <preference>
+     		<name>rulesValues</name>
+            <value>j2</value>   
+        </preference>        
     </portlet-preferences>
  </portlet>
     
@@ -1750,6 +1791,10 @@
             <value>true</value>
         </preference>
         <preference>
+            <name>showSubsiteForAddUser</name>
+            <value>true</value>
+        </preference>        
+        <preference>
             <name>defaultChangePasswordRequired</name>
             <value>false</value>
         </preference>
@@ -1769,6 +1814,14 @@
      		<name>requiredRole</name>
             <value>user</value>   
         </preference>
+        <preference>
+     		<name>subsiteRootFolder</name>
+            <value>/__subsite-root/_hostname/</value>   
+        </preference>        
+        <preference>
+     		<name>defaultSubsite</name>
+            <value></value>   
+        </preference>                        
     </portlet-preferences>
 </portlet>
 

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details-edit.jsp
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details-edit.jsp?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details-edit.jsp (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details-edit.jsp Mon Jul  2 15:25:29 2007
@@ -33,7 +33,7 @@
 <form action="<portlet:actionURL/>" method="post">
 <c:set var="prefs" value="${renderRequest.preferences.map}"/>
 <table border="0" cellspacing="2" cellpadding="3">
-  <c:forEach var="prefName" items="showUserTab,showAttributesTab,showPasswordTab,showPasswordExpiration,showRoleTab,showGroupTab,showProfileTab,showPasswordOnUserTab,showChangePasswordRequiredForAddUser,showRoleForAddUser,showProfileForAddUser,defaultChangePasswordRequired">
+  <c:forEach var="prefName" items="showUserTab,showAttributesTab,showPasswordTab,showPasswordExpiration,showRoleTab,showGroupTab,showProfileTab,showPasswordOnUserTab,showChangePasswordRequiredForAddUser,showRoleForAddUser,showProfileForAddUser,showSubsiteForAddUser,defaultChangePasswordRequired">
   <tr>
     <c:set var="prefValue" value='${prefs[prefName][0]}'/>
     <td class="portlet-section-alternate">
@@ -62,7 +62,24 @@
               </c:forEach>
           </select>      
     </td>
-  </tr>
+  </tr>
+ <tr>
+    <c:set var="prefName" value="requiredRole"/>
+    <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+    <td class="portlet-section-alternate">
+      <font class="portlet-form-field-label"><fmt:message key="user.details.preference.${prefName}"/></font>
+    </td>
+    <td class="portlet-section-body">
+      <select name="<c:out value="${prefName}"/>" class="portlet-form-field-label">     
+              <option value=""/>                
+              <c:forEach var="item" items="${jetspeedRoles}">
+                <option value="<c:out value='${item}'/>" <c:if test="${item == prefValue}">selected="true"</c:if>>
+                    <c:out value="${item}"/>
+                </option>
+              </c:forEach>
+          </select>      
+    </td>
+  </tr>  
   <tr>
     <c:set var="prefName" value="defaultProfile"/>
     <c:set var="prefValue" value='${prefs[prefName][0]}'/>
@@ -80,6 +97,36 @@
           </select>      
     </td>
   </tr>
+  <tr>
+    <c:set var="prefName" value="newUserTemplateDirectory"/>
+    <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+    <td class="portlet-section-alternate">
+      <font class="portlet-form-field-label"><fmt:message key="user.details.preference.${prefName}"/></font>
+    </td>
+    <td class="portlet-section-body">
+    	<input type="text" name="<c:out value="${prefName}"/>" value="<c:out value="${prefValue}"/>" class="portlet-form-field-label"/>
+    </td>
+  </tr>
+  <tr>
+    <c:set var="prefName" value="subsiteRootFolder"/>
+    <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+    <td class="portlet-section-alternate">
+      <font class="portlet-form-field-label"><fmt:message key="user.details.preference.${prefName}"/></font>
+    </td>
+    <td class="portlet-section-body">
+    	<input type="text" name="<c:out value="${prefName}"/>" value="<c:out value="${prefValue}"/>" class="portlet-form-field-label"/>
+    </td>
+  </tr>
+  <tr>
+    <c:set var="prefName" value="defaultSubsite"/>
+    <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+    <td class="portlet-section-alternate">
+      <font class="portlet-form-field-label"><fmt:message key="user.details.preference.${prefName}"/></font>
+    </td>
+    <td class="portlet-section-body">
+    	<input type="text" name="<c:out value="${prefName}"/>" value="<c:out value="${prefValue}"/>" class="portlet-form-field-label"/>
+    </td>
+  </tr>  
 </table>
 <input type="submit" value="<fmt:message key="user.details.save.preferences"/>" class="portlet-form-button" />
 </form>

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details.jsp
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details.jsp?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details.jsp (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/users/user-details.jsp Mon Jul  2 15:25:29 2007
@@ -655,6 +655,31 @@
       <input type="hidden" name="jetspeedRules" value="<c:out value="${defaultProfile}"/>">
     </c:otherwise>
   </c:choose>
+
+  <c:set var="defaultSubsite" value='${prefs["defaultSubsite"][0]}'/>
+
+  <c:choose>
+    <c:when test='${prefs["showSubsiteForAddUser"][0]}'>
+      <!-- Select Subsites -->
+      <tr colspan="2" align="right">
+        <td nowrap class="portlet-section-alternate" align="right"><fmt:message key="security.subsites"/>&nbsp;</td>
+        <td class="portlet-section-body" align="left">
+     		<select name="jetspeedSubsites" class="portlet-form-field-label">		
+    			<option value=""/> 		
+    			<c:forEach var="ss" items="${jetspeedSubsites}">
+    			    <option value="<c:out value='${ss.path}'/>"
+      			    <c:if test="${ss.path == defaultSubsite}">selected="true"</c:if>>
+    				  <c:out value="${ss.title}"/>
+    			    </option>
+    			</c:forEach>
+    		</select>      
+        </td>
+      </tr>
+    </c:when>
+    <c:otherwise>
+      <input type="hidden" name="jetspeedSubsites" value="<c:out value="${defaultSubsite}"/>">
+    </c:otherwise>
+  </c:choose>
   
 </table>
 <br/>

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java Mon Jul  2 15:25:29 2007
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.prefs.Preferences;
 
 import javax.portlet.PortletConfig;
 import javax.portlet.PortletRequest;
@@ -149,7 +150,20 @@
     {
         registerUser(userName, password, (List)null, null, null, null, null);
     }
-        
+
+    public void registerUser(
+            String userName, 
+            String password, 
+            List roles, 
+            List groups, 
+            Map userInfo, 
+            Map rules, 
+            String folderTemplate)
+    throws RegistrationException    
+    {
+        registerUser(userName, password, roles, groups, userInfo, rules, folderTemplate, null);
+    }
+    
     /* (non-Javadoc)
      * @see org.apache.jetspeed.administration.PortalAdministration#registerUser(java.lang.String, java.lang.String, java.util.Map, java.awt.List, java.awt.List, java.lang.String)
      */    
@@ -160,7 +174,8 @@
             List groups, 
             Map userInfo, 
             Map rules, 
-            String folderTemplate)
+            String folderTemplate,
+            String subsite)
     throws RegistrationException    
     {
         try 
@@ -225,11 +240,11 @@
                 while (ruleEntries.hasNext())
                 {           
                     Map.Entry entry = (Map.Entry)ruleEntries.next();                    
-                    ProfilingRule rule = profiler.getRule((String)entry.getKey());
+                    ProfilingRule rule = profiler.getRule((String)entry.getValue());
                     if (rule != null)
                     {
                         Principal principal = SecurityHelper.getBestPrincipal(user.getSubject(), UserPrincipal.class);
-                        profiler.setRuleForPrincipal(principal, rule, (String)entry.getValue());
+                        profiler.setRuleForPrincipal(principal, rule, (String)entry.getKey());
                     }
                 }
             }
@@ -239,13 +254,24 @@
                 folderTemplate = this.folderTemplate; 
             }
             
+            if (subsite == null)
+            {
+                subsite = Folder.USER_FOLDER + userName;
+            }
+            else
+            {
+                subsite  = subsite + Folder.USER_FOLDER +  userName;
+            }            
+            
+            
             // This next chunk of code is the fancy way to force the creation of the user
             // template pages to be created with subject equal to the new user
             // otherwise it would be created as guest, and guest does not have enough privs.
             final String innerFolderTemplate = folderTemplate;
-            final String innerUserName = userName;
+            final String innerSubsite = subsite;
             final PageManager innerPageManager = pageManager;
-            final String innerUser = userName;
+            final String innerUserName = userName;
+            final User innerUser = user;
             User powerUser = userManager.getUser(this.adminUser);
             JetspeedException pe = (JetspeedException) JSSubject.doAsPrivileged(powerUser.getSubject(), new PrivilegedAction()
                 {
@@ -253,12 +279,19 @@
                     {
                          try
                         {
-//                           create user's home folder                        
+                             if (innerSubsite != null)
+                             {
+                                 Preferences attributes = innerUser.getUserAttributes();
+                                 attributes.put(User.USER_INFO_SUBSITE, innerSubsite);                                    
+                             }                                         
+                             // create user's home folder                        
                              // deep copy from the default folder template tree, creating a deep-copy of the template
                              // in the new user's folder tree
-                            Folder source = innerPageManager.getFolder(innerFolderTemplate);                            
-                            innerPageManager.deepCopyFolder(source, Folder.USER_FOLDER + innerUserName, innerUser);
-                            Folder newFolder = pageManager.getFolder(Folder.USER_FOLDER + innerUserName);                            
+                            Folder source = innerPageManager.getFolder(innerFolderTemplate);
+                            
+                            
+                            innerPageManager.deepCopyFolder(source, innerSubsite, innerUserName);
+                            Folder newFolder = pageManager.getFolder(innerSubsite);                            
                             newFolder.setTitle("Home Folder");
                             newFolder.setShortTitle("Home");
                              

Modified: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/administration/PortalAdministration.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/administration/PortalAdministration.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/administration/PortalAdministration.java (original)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/administration/PortalAdministration.java Mon Jul  2 15:25:29 2007
@@ -51,6 +51,8 @@
      *              Well known rules names are 'page' and 'menu' 
      * @param folderTemplate The full PSML path name of a folder to be deep
      *               copied as the new user's set of folders, pages, links
+     * @param subsite The subsite folder to place the new user in
+     * @since 2.1.1              
      */
     void registerUser(String userName, 
                       String password, 
@@ -58,7 +60,17 @@
                       List groups,
                       Map userInfo,                       
                       Map rules,
-                      String template)
+                      String template,
+                      String subsiteFolder)
+        throws RegistrationException;
+
+    void registerUser(String userName, 
+            String password, 
+            List roles, 
+            List groups,
+            Map userInfo,                       
+            Map rules,
+            String template)
         throws RegistrationException;
  
     /**

Modified: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/User.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/User.java?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/User.java (original)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/User.java Mon Jul  2 15:25:29 2007
@@ -34,6 +34,11 @@
     final static String USER_INFO_PROPERTY_SET = "userinfo";
     
     /**
+     * the subsite path for a given user stored as a user attribute
+     */
+    final static String USER_INFO_SUBSITE = "subsite";
+    
+    /**
      * <p>Getter for the user {@link Subject} populated with the 
      * application principals.</p>
      * @return The {@link Subject}.

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/min-pages/page.security
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/WEB-INF/min-pages/page.security?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/min-pages/page.security (original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/min-pages/page.security Mon Jul  2 15:25:29 2007
@@ -34,6 +34,10 @@
       <users>*</users>
       <permissions>view</permissions>
     </security-constraint>
+    <security-constraint>
+      <roles>admin</roles>
+      <permissions>view, edit</permissions>
+    </security-constraint>    
   </security-constraints-def>
   
   <security-constraints-def name="public-edit">

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/pages/page.security
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/WEB-INF/pages/page.security?view=diff&rev=552610&r1=552609&r2=552610
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/pages/page.security (original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/pages/page.security Mon Jul  2 15:25:29 2007
@@ -50,6 +50,10 @@
       <users>*</users>
       <permissions>view</permissions>
     </security-constraint>
+    <security-constraint>
+      <roles>admin</roles>
+      <permissions>view, edit</permissions>
+    </security-constraint>    
   </security-constraints-def>
   <security-constraints-def name="public-edit">
     <security-constraint>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org