Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java
===================================================================
diff -u -rf2c568d218cbd23c24524c65a1e68660f4ea7561 -rc654b42528f2da059026895677d91efc86eb1876
--- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision f2c568d218cbd23c24524c65a1e68660f4ea7561)
+++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision c654b42528f2da059026895677d91efc86eb1876)
@@ -178,24 +178,27 @@
* @throws IOException
*/
public String deleteFolder(Integer folderID, Integer userID)throws IOException{
- FlashMessage flashMessage = null;
-
WorkspaceFolder workspaceFolder = (WorkspaceFolder)baseDAO.find(WorkspaceFolder.class,folderID);
User user = (User)userMgmtService.findById(User.class,userID);
+ FlashMessage flashMessage = null;
if(user!=null){
- if(!getPermissions(workspaceFolder,user).equals(WorkspaceFolder.OWNER_ACCESS)){
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,userID);
- }else{
- if(workspaceFolder!=null){
- flashMessage = deleteFolderContents(workspaceFolder, userID);
- }else
- flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_DELETE,folderID);
- }
+ flashMessage = deleteFolder(workspaceFolder, user, isSysAuthorAdmin(user));
}else
flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_DELETE,userID);
return flashMessage.serializeMessage();
}
+
+ private FlashMessage deleteFolder(WorkspaceFolder workspaceFolder, User user, boolean isSysAuthorAdmin) throws IOException {
+ if(!getPermissions(workspaceFolder,user).equals(WorkspaceFolder.OWNER_ACCESS)){
+ return FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,user.getUserId());
+ }else{
+ if(workspaceFolder!=null){
+ return deleteFolderContents(workspaceFolder, user, isSysAuthorAdmin);
+ }else
+ return FlashMessage.getNoSuchWorkspaceFolderExsists(MSG_KEY_DELETE,workspaceFolder.getWorkspaceFolderId());
+ }
+ }
/**
* This method will try to delete the folder
. If the folder is not empty
* it will attempt to delete all resources inside the folder. If the user does not
@@ -204,11 +207,9 @@
* If all resources inside that folder
are successfully deleted, then
* the folder will be deleted and a FlashMessage will be returned indicating it was
* successfully deleted.
- * TODO: put all flash messages in a message resource file so it can be
- * internationalised
* @param folder
*/
- private FlashMessage deleteFolderContents(WorkspaceFolder folder, Integer userID) throws IOException
+ private FlashMessage deleteFolderContents(WorkspaceFolder folder, User user, boolean isSysAuthorAdmin) throws IOException
{
FlashMessage flashMessage = null;
boolean isDeleteSuccessful = true;
@@ -224,7 +225,9 @@
while (subFolderIterator.hasNext())
{
WorkspaceFolder subFolder = (WorkspaceFolder)subFolderIterator.next();
- deleteFolder(subFolder.getWorkspaceFolderId(), userID);
+ flashMessage = deleteFolder(subFolder, user, isSysAuthorAdmin);
+ if ( flashMessage.getMessageType() != FlashMessage.OBJECT_MESSAGE )
+ return flashMessage;
}
}
else
@@ -246,17 +249,13 @@
while (j.hasNext())
{
LearningDesign learningDesign = (LearningDesign)j.next();
- //have to ensure that the user has permission to delete the learning design
- //method taken from deleteLearningDesign
- //code has been duplicated because it is not desirable to return a string.
- Long learningDesignID = learningDesign.getLearningDesignId();
if (learningDesign != null) {
- if (learningDesign.getUser().getUserId().equals(userID))
+ if (isSysAuthorAdmin || learningDesign.getUser().getUserId().equals(user.getUserId()))
{
if (learningDesign.getReadOnly().booleanValue()) {
isDeleteSuccessful = false;
flashMessage = new FlashMessage(MSG_KEY_DELETE,
- messageService.getMessage("delete.learningdesign.error",new Object[]{learningDesignID})
+ messageService.getMessage("delete.learningdesign.error",new Object[]{learningDesign.getLearningDesignId()})
, FlashMessage.ERROR);
}
else
@@ -268,7 +267,7 @@
}
}
- baseDAO.update(folder); //this call will delete the files and learningdesigns which were removed from the collection above.
+ baseDAO.update(folder); //this call will delete the files and learning designs which were removed from the collection above.
}
@@ -381,7 +380,7 @@
} else if (workspaceFolder.getUserID().equals(user.getUserId())) {
log.debug(user.getLogin()+" has owner access to "+workspaceFolder.getName());
permission = WorkspaceFolder.OWNER_ACCESS;
- } else if (userMgmtService.hasRoleInOrganisation(user, Role.ROLE_AUTHOR_ADMIN)){
+ } else if (isSysAuthorAdmin(user)){
log.debug(user.getLogin()+" has owner access to "+workspaceFolder.getName());
permission = WorkspaceFolder.OWNER_ACCESS;
} else if(user.hasMemberAccess(workspaceFolder)) {
@@ -394,6 +393,12 @@
return permission;
}
+
+ private boolean isSysAuthorAdmin(User user) {
+ return userMgmtService.hasRoleInOrganisation(user, Role.ROLE_AUTHOR_ADMIN) ||
+ userMgmtService.hasRoleInOrganisation(user, Role.ROLE_SYSADMIN);
+ }
+
/** This method checks if the given workspaceFolder is a subFolder of the
* given rootFolder. Returns false if they are the same folder. */
/* private boolean isSubFolder(WorkspaceFolder workspaceFolder,WorkspaceFolder rootFolder){
@@ -679,14 +684,14 @@
* @return String The acknowledgement/error message in WDDX format for FLASH
* @throws IOException
*/
- public String deleteLearningDesign(Long learningDesignID, Integer userID)throws IOException{
- FlashMessage flashMessage = null;
+ public String deleteLearningDesign(Long learningDesignID, Integer userID) throws IOException{
User user = (User)baseDAO.find(User.class,userID);
+ FlashMessage flashMessage = null;
if(user!=null){
LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID);
if(learningDesign!=null){
- if(learningDesign.getUser().getUserId().equals(user.getUserId())){
+ if(learningDesign.getUser().getUserId().equals(user.getUserId()) || isSysAuthorAdmin(user)){
if(learningDesign.getReadOnly().booleanValue()){
flashMessage = new FlashMessage(MSG_KEY_DELETE,
messageService.getMessage("learningdesign.readonly",new Object[]{learningDesignID}),
@@ -696,11 +701,11 @@
flashMessage = new FlashMessage(MSG_KEY_DELETE,messageService.getMessage("learningdesign.delete",new Object[]{learningDesignID}));
}
}else
- flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,userID);
+ flashMessage = FlashMessage.getUserNotAuthorized(MSG_KEY_DELETE,user.getUserId());
}else
flashMessage = FlashMessage.getNoSuchLearningDesignExists(MSG_KEY_DELETE,learningDesignID);
}else
- flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_DELETE,userID);
+ flashMessage = FlashMessage.getNoSuchUserExists(MSG_KEY_DELETE,user.getUserId());
return flashMessage.serializeMessage();
}