diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java index 069ed53bb323311d76b937f91e30645b07602890..71ab79f992be22c13917c478b68811b772b04d12 100644 --- a/src/main/java/org/olat/collaboration/CollaborationTools.java +++ b/src/main/java/org/olat/collaboration/CollaborationTools.java @@ -856,6 +856,11 @@ public class CollaborationTools implements Serializable { return write; } + @Override + public boolean canCreateFolder() { + return write; + } + public boolean canDelete() { return write; } diff --git a/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java b/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java index bc1645bcd75babaf1cfd3cbe7e03c0a829d6ba90..84374fc7c12527f95cb4c22eec991e317767538e 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java +++ b/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java @@ -94,6 +94,11 @@ public class FolderComponentRenderer implements ComponentRenderer { VFSContainer currentContainer = fc.getCurrentContainer(); boolean canWrite = currentContainer.canWrite() == VFSConstants.YES; + boolean canCreateFolder = true; + if(currentContainer.getLocalSecurityCallback() != null && !currentContainer.getLocalSecurityCallback().canCreateFolder()) { + canCreateFolder = false; + } + boolean canDelete = false; boolean canVersion = FolderConfig.versionsEnabled(fc.getCurrentContainer()); boolean canMail = fc.isCanMail(); @@ -167,18 +172,20 @@ public class FolderComponentRenderer implements ComponentRenderer { target.append(translator.translate("ul")); target.append("</a></li>"); - // option new folder - target.append("<li><a class=\"b_briefcase_newfolder\" href=\""); - ubu.buildURI(target, new String[] { VelocityContainer.COMMAND_ID }, new String[] { "cf" }, iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); - target.append("\""); - if (iframePostEnabled) { // add ajax iframe target - StringOutput so = new StringOutput(); - ubu.appendTarget(so); - target.append(so.toString()); + if(canCreateFolder) { + // option new folder + target.append("<li><a class=\"b_briefcase_newfolder\" href=\""); + ubu.buildURI(target, new String[] { VelocityContainer.COMMAND_ID }, new String[] { "cf" }, iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); + target.append("\""); + if (iframePostEnabled) { // add ajax iframe target + StringOutput so = new StringOutput(); + ubu.appendTarget(so); + target.append(so.toString()); + } + target.append(">"); + target.append(translator.translate("cf")); + target.append("</a></li>"); } - target.append(">"); - target.append(translator.translate("cf")); - target.append("</a></li>"); // option new file target.append("<li><a class=\"b_briefcase_newfile\" href=\""); diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java index 2bd18c21f4eaa4a87cc4b4437de76eccdf0e3053..b97736342a43dc0b02dcba9b98b3bdf1665bac2f 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java @@ -39,6 +39,11 @@ public class FullAccessCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + public boolean canDelete() { return true; } diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java index 5101bc327f16b5e0d4d938ab64c0349de818e6b1..d4dc2e69dd72df47d606314ff33aa471164b6578 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java @@ -51,6 +51,11 @@ public class FullAccessWithQuotaCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + public boolean canDelete() { return true; } diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java index 587b6f5d3a9a62441362f56ec61b0e2c7684a1bc..ecfca7cfecec0ceab3400dc4cb0490f0e0913c16 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java @@ -52,6 +52,11 @@ public class ReadOnlyCallback implements VFSSecurityCallback { return false; } + @Override + public boolean canCreateFolder() { + return false; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java index 234fd752a9c9024d8ade778ae80daff75f909f88..152982f470e4040fe3829fc084ac273de5f18f89 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java @@ -51,6 +51,12 @@ public interface VFSSecurityCallback { * @return True if writing is allowed. */ public boolean canWrite(); + + /** + * + * @return True if creating new folders is allowed + */ + public boolean canCreateFolder(); /** * @return True if deleting is allowed. diff --git a/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java b/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java index 671038cad481f931ed979c634477c4841623e9b9..f3d43b1b3d301accf683ecb924c26190a72039a9 100644 --- a/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java +++ b/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java @@ -56,6 +56,11 @@ public class VFSWebServiceSecurityCallback implements VFSSecurityCallback { return canWrite; } + @Override + public boolean canCreateFolder() { + return canWrite; + } + @Override public boolean canDelete() { return canDelete; diff --git a/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java b/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java index 22b1fc1ea8e9762970d830a949f7e2aef3b00df2..8db430b9015daecda5f9d595794f1ecdb39b565a 100644 --- a/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java +++ b/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java @@ -88,6 +88,11 @@ public class FolderNodeCallback implements VFSSecurityCallback { return ne.isCapabilityAccessible("upload") || isOlatAdmin; } + @Override + public boolean canCreateFolder() { + return canWrite(); + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java index 7aca8cc362d1984154fa2b226d5e510eaeb2cf43..7b4da992ba10c08becaaf607c7545c1c54369694 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java @@ -426,6 +426,11 @@ class FolderCallback implements VFSSecurityCallback { return !folderLocked; } + @Override + public boolean canCreateFolder() { + return !folderLocked; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java index afccb20ca92414bb985306bd470b1e2ae3c4389d..7c36b0e2237b678f06155980c7131c6ee1bce89f 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java @@ -125,6 +125,9 @@ class ReturnboxFullAccessCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return true; } + @Override + public boolean canCreateFolder() { return true; } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java b/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java index 3439dc73f062c91904cce8ce22143727d05917eb..9cf2fbb5a967fb377df3dc0a572663628e028a9d 100644 --- a/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java +++ b/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java @@ -373,6 +373,8 @@ class ReadOnlyAndDeleteCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return false; } + @Override + public boolean canCreateFolder() { return false; } /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ @@ -428,6 +430,8 @@ class ReturnboxFullAccessCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return true; } + @Override + public boolean canCreateFolder() { return true; } /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java b/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java index bf8fd1481102f0e4a4786f8cf83ccd115e76fb57..f25a2095f8e16d40433a44329159defe68d4153f 100644 --- a/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java +++ b/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java @@ -639,6 +639,11 @@ class TaskFolderCallback implements VFSSecurityCallback { return !folderLocked; } + @Override + public boolean canCreateFolder() { + return false; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java index 251b391bfed92f3770941d67d1aa75af9b31d461..768e186a86da1731c7521a70c592acf6552f2890 100644 --- a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java +++ b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java @@ -63,6 +63,11 @@ public class SharedFolderSecurityCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + /** * @return boolean */