. Single web-app per Web Project changes implemented in Sandbox browsing view

- the web-app folder name specified at Web Project creation time is created by default and is the root folder for all sandbox operations
 - a mechanism for selecting a different root webapp (or creating new root folders) can be easily added later (when there is time…!)
. Removal of two public workflow actions that have no params and therefore don't work as public actions in the UI
. Fix to user sandboxes component to allow any user to always have action to delete a user sandbox

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@4445 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2006-11-27 12:07:36 +00:00
parent 0f6efbd751
commit 3fb9505fe0
8 changed files with 85 additions and 64 deletions

View File

@@ -511,7 +511,8 @@ public class AVMBrowseBean implements IContextListener
{
if (this.currentPath == null)
{
this.currentPath = AVMConstants.buildAVMStoreRootPath(getSandbox());
String webapp = (String)getWebsite().getProperties().get(ContentModel.PROP_DEFAULTWEBAPP);
this.currentPath = AVMConstants.buildAVMStoreWebappPath(getSandbox(), webapp);
}
return this.currentPath;
}
@@ -532,40 +533,6 @@ public class AVMBrowseBean implements IContextListener
UIContextService.getInstance(FacesContext.getCurrentInstance()).notifyBeans();
}
/**
* @return true if the current user has the manager role in the current website
*/
public boolean getIsManagerRole()
{
boolean isManager = false;
User user = Application.getCurrentUser(FacesContext.getCurrentInstance());
if (user.isAdmin() == false)
{
String currentUser = user.getUserName();
Node websiteNode = this.navigator.getCurrentNode();
List<ChildAssociationRef> userInfoRefs = this.nodeService.getChildAssocs(
websiteNode.getNodeRef(), ContentModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : userInfoRefs)
{
NodeRef userInfoRef = ref.getChildRef();
String username = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERNAME);
String userrole = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERROLE);
if (currentUser.equals(username) && ROLE_CONTENT_MANAGER.equals(userrole))
{
isManager = true;
break;
}
}
}
else
{
isManager = true;
}
return isManager;
}
/**
* @return the AVMNode that represents the current browsing path
*/
@@ -602,6 +569,40 @@ public class AVMBrowseBean implements IContextListener
this.location = location;
}
/**
* @return true if the current user has the manager role in the current website
*/
public boolean getIsManagerRole()
{
boolean isManager = false;
User user = Application.getCurrentUser(FacesContext.getCurrentInstance());
if (user.isAdmin() == false)
{
String currentUser = user.getUserName();
Node websiteNode = this.navigator.getCurrentNode();
List<ChildAssociationRef> userInfoRefs = this.nodeService.getChildAssocs(
websiteNode.getNodeRef(), ContentModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : userInfoRefs)
{
NodeRef userInfoRef = ref.getChildRef();
String username = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERNAME);
String userrole = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERROLE);
if (currentUser.equals(username) && ROLE_CONTENT_MANAGER.equals(userrole))
{
isManager = true;
break;
}
}
}
else
{
isManager = true;
}
return isManager;
}
/**
* @return Map of avm node objects representing the folders with the current website space
*/

View File

@@ -67,6 +67,11 @@ public final class AVMConstants
return store + ":/" + DIR_APPBASE + '/' + DIR_WEBAPPS;
}
public static String buildAVMStoreWebappPath(String store, String webapp)
{
return store + ":/" + DIR_APPBASE + '/' + DIR_WEBAPPS + '/' + webapp;
}
public static String buildAVMStoreUrl(String store)
{
if (store.indexOf(':') != -1)
@@ -144,12 +149,10 @@ public final class AVMConstants
{
return parent;
}
if (path.charAt(0) == '/')
{
final Pattern p = Pattern.compile("([^:]+:/" + AVMConstants.DIR_APPBASE +
"/[^/]+/[^/]+).*");
final Matcher m = p.matcher(parent);
final Matcher m = absoluteAVMPath.matcher(parent);
if (m.matches())
{
parent = m.group(1);
@@ -189,4 +192,8 @@ public final class AVMConstants
// URLs for preview of sandboxes and assets
private final static String PREVIEW_SANDBOX_URL = "http://www-{0}.avm.{1}:{2}";
private final static String PREVIEW_ASSET_URL = "http://www-{0}.avm.{1}:{2}{3}";
// patter for absolute AVM Path
private final static Pattern absoluteAVMPath = Pattern.compile(
"([^:]+:/" + AVMConstants.DIR_APPBASE + "/[^/]+/[^/]+).*");
}

View File

@@ -181,10 +181,14 @@ public class CreateWebsiteWizard extends BaseWizardBean
outcome = wiz.finish();
if (outcome != null)
{
// create the AVM stores to represent the newly created location website
// create the AVM staging store to represent the newly created location website
SandboxFactory.createStagingSandbox(avmStore, wiz.getManagers());
// set the property on the node to reference the AVM store
// create the default webapp folder under the hidden system folders
String stagingStore = AVMConstants.buildAVMStagingStoreName(avmStore);
this.avmService.createDirectory(AVMConstants.buildAVMStoreRootPath(stagingStore), webapp);
// set the property on the node to reference the root AVM store
this.nodeService.setProperty(nodeRef, ContentModel.PROP_AVMSTORE, avmStore);
// persist the forms, templates, workflows and workflow defaults to the model for this web project

View File

@@ -52,6 +52,7 @@ import org.alfresco.web.app.AlfrescoNavigationHandler;
import org.alfresco.web.app.Application;
import org.alfresco.web.bean.FileUploadBean;
import org.alfresco.web.bean.NavigationBean;
import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.ui.common.Utils;
import org.apache.tools.zip.ZipEntry;
@@ -198,15 +199,16 @@ public class ImportWebsiteDialog
// TODO: explicit permission check for WRITE on website node for this user
// import the content into the appropriate store for the website
String storeRoot = (String)this.navigationBean.getCurrentNode().getProperties().get(
ContentModel.PROP_AVMSTORE);
if (storeRoot != null)
Node website = this.navigationBean.getCurrentNode();
String storeRoot = (String)website.getProperties().get(ContentModel.PROP_AVMSTORE);
String webapp = (String)website.getProperties().get(ContentModel.PROP_DEFAULTWEBAPP);
if (storeRoot != null && webapp != null)
{
String store = AVMConstants.buildAVMStagingStoreName(storeRoot);
if (this.avmService.getAVMStore(store) != null)
{
// get the root path to the webapps import area of the store
String rootPath = AVMConstants.buildAVMStoreRootPath(store);
// get the path to the root webapp import area of the store
String rootPath = AVMConstants.buildAVMStoreWebappPath(store, webapp);
// convert the AVM path to a NodeRef so we can use the NodeService to perform import
NodeRef importRef = AVMNodeConverter.ToNodeRef(-1, rootPath);
@@ -218,7 +220,7 @@ public class ImportWebsiteDialog
}
else
{
// TODO: output an error to indicate we cannot find the store property on the website
throw new IllegalStateException("Unable to find root store/webapp property for website!");
}
tx.commit();

View File

@@ -50,6 +50,7 @@ import org.alfresco.web.app.Application;
import org.alfresco.web.app.servlet.DownloadContentServlet;
import org.alfresco.web.bean.BrowseBean;
import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.bean.repository.User;
import org.alfresco.web.bean.wcm.AVMConstants;
import org.alfresco.web.bean.wcm.AVMNode;
import org.alfresco.web.config.ClientConfigElement;
@@ -426,19 +427,23 @@ public class UIUserSandboxes extends SelfRenderingComponent
*/
private static boolean isManagerRole(FacesContext context, NodeService nodeService, NodeRef websiteRef)
{
boolean isManager = false;
String currentUser = Application.getCurrentUser(context).getUserName();
List<ChildAssociationRef> userInfoRefs = nodeService.getChildAssocs(
websiteRef, ContentModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : userInfoRefs)
User user = Application.getCurrentUser(context);
boolean isManager = user.isAdmin();
if (isManager == false)
{
NodeRef userInfoRef = ref.getChildRef();
String username = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERNAME);
String userrole = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERROLE);
if (currentUser.equals(username) && ROLE_CONTENT_MANAGER.equals(userrole))
String currentUser = user.getUserName();
List<ChildAssociationRef> userInfoRefs = nodeService.getChildAssocs(
websiteRef, ContentModel.ASSOC_WEBUSER, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : userInfoRefs)
{
isManager = true;
break;
NodeRef userInfoRef = ref.getChildRef();
String username = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERNAME);
String userrole = (String)nodeService.getProperty(userInfoRef, ContentModel.PROP_WEBUSERROLE);
if (currentUser.equals(username) && ROLE_CONTENT_MANAGER.equals(userrole))
{
isManager = true;
break;
}
}
}
return isManager;