From 7d17a07e66e97bbc60233efdb38db0d749d4ca9e Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 17 Jan 2019 14:50:32 +0100 Subject: [PATCH] OO-3818: allow to pick a page from shared folder in multi SP tool --- .../course/editor/EditorMainController.java | 3 +- .../olat/course/editor/MultiSPController.java | 37 ++----------------- .../run/environment/CourseEnvironment.java | 3 ++ .../environment/CourseEnvironmentImpl.java | 33 +++-------------- .../run/preview/PreviewCourseEnvironment.java | 6 +++ 5 files changed, 20 insertions(+), 62 deletions(-) diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index 0c6159ff9e2..8266f673596 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -92,6 +92,7 @@ import org.olat.course.CourseFactory; import org.olat.course.DisposedCourseRestartController; import org.olat.course.ICourse; import org.olat.course.assessment.AssessmentModeManager; +import org.olat.course.folder.CourseContainerOptions; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.CourseNodeConfiguration; @@ -1131,7 +1132,7 @@ public class EditorMainController extends MainLayoutBasicController implements G removeAsListenerAndDispose(multiSPChooserCtr); removeAsListenerAndDispose(cmc); - VFSContainer rootContainer = course.getCourseEnvironment().getCourseFolderContainer(); + VFSContainer rootContainer = course.getCourseEnvironment().getCourseFolderContainer(CourseContainerOptions.withoutElements()); CourseEditorTreeNode selectedNode = (CourseEditorTreeNode)menuTree.getSelectedNode(); multiSPChooserCtr = new MultiSPController(ureq, getWindowControl(), rootContainer, ores, selectedNode); listenTo(multiSPChooserCtr); diff --git a/src/main/java/org/olat/course/editor/MultiSPController.java b/src/main/java/org/olat/course/editor/MultiSPController.java index 278d13e1df3..a442b06916f 100644 --- a/src/main/java/org/olat/course/editor/MultiSPController.java +++ b/src/main/java/org/olat/course/editor/MultiSPController.java @@ -40,11 +40,10 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.util.CSSHelper; import org.olat.core.id.OLATResourceable; -import org.olat.core.util.vfs.MergeSource; -import org.olat.core.util.vfs.NamedContainerImpl; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; +import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.filters.VFSItemFilter; import org.olat.course.CourseFactory; import org.olat.course.ICourse; @@ -84,19 +83,9 @@ public class MultiSPController extends FormBasicController { public MultiSPController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, OLATResourceable ores, CourseEditorTreeNode selectedNode) { super(ureq, wControl, "choosesps"); - this.ores = ores; this.selectedNode = selectedNode; - - if(rootContainer instanceof MergeSource) { - //we cannot link to files from course elements or groups folders without single page BB update - VFSContainer realContainer = ((MergeSource)rootContainer).getRootWriteContainer(); - VFSContainer namedRoot = new NamedContainerImpl(rootContainer.getName(), realContainer); - this.rootContainer = namedRoot; - } else { - this.rootContainer = rootContainer; - } - + this.rootContainer = rootContainer; initForm(ureq); } @@ -219,7 +208,7 @@ public class MultiSPController extends FormBasicController { //create node newNode = createCourseNode(item, "sp"); ModuleConfiguration moduleConfig = newNode.getModuleConfiguration(); - String path = getRelativePath(item); + String path = VFSManager.getRelativeItemPath(item, rootContainer, null); moduleConfig.set(SPEditController.CONFIG_KEY_FILE, path); moduleConfig.setBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS, true); } else if (item instanceof VFSContainer) { @@ -265,26 +254,6 @@ public class MultiSPController extends FormBasicController { return newNode; } - private String getRelativePath(VFSItem item) { - String path = ""; - while(item != null && !isSameAsRootContainer(item)) { - path = "/" + item.getName() + path; - item = item.getParentContainer(); - } - return path; - } - - private boolean isSameAsRootContainer(VFSItem item) { - if(item instanceof VFSContainer) { - VFSContainer blocker = rootContainer; - if(blocker instanceof MergeSource) { - blocker = ((MergeSource)blocker).getRootWriteContainer(); - } - return blocker.isSame(item); - } - return false; - } - /** * @param nodeSelection The node that should be selected recursively * @param select true: select the node and its children; false: deselect the node and its children diff --git a/src/main/java/org/olat/course/run/environment/CourseEnvironment.java b/src/main/java/org/olat/course/run/environment/CourseEnvironment.java index 67b124d0d8c..32a41de8ca8 100644 --- a/src/main/java/org/olat/course/run/environment/CourseEnvironment.java +++ b/src/main/java/org/olat/course/run/environment/CourseEnvironment.java @@ -31,6 +31,7 @@ import org.olat.course.Structure; import org.olat.course.assessment.AssessmentManager; import org.olat.course.auditing.UserNodeAuditManager; import org.olat.course.config.CourseConfig; +import org.olat.course.folder.CourseContainerOptions; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.properties.CoursePropertyManager; import org.olat.repository.RepositoryEntry; @@ -103,6 +104,8 @@ public interface CourseEnvironment { */ public VFSContainer getCourseFolderContainer(); + public VFSContainer getCourseFolderContainer(CourseContainerOptions options); + /** * Return the course base path. * @return the course base path diff --git a/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java b/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java index 8cf000dcf0c..ca55685f358 100644 --- a/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java +++ b/src/main/java/org/olat/course/run/environment/CourseEnvironmentImpl.java @@ -35,6 +35,7 @@ import org.olat.course.assessment.manager.CourseAssessmentManagerImpl; import org.olat.course.auditing.UserNodeAuditManager; import org.olat.course.auditing.UserNodeAuditManagerImpl; import org.olat.course.config.CourseConfig; +import org.olat.course.folder.CourseContainerOptions; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.groupsandrights.PersistingCourseGroupManager; import org.olat.course.properties.CoursePropertyManager; @@ -80,9 +81,6 @@ public class CourseEnvironmentImpl implements CourseEnvironment { cgm.updateRepositoryEntry(courseEntry); } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCurrentTimeMillis() - */ @Override public long getCurrentTimeMillis() { return System.currentTimeMillis(); @@ -93,41 +91,26 @@ public class CourseEnvironmentImpl implements CourseEnvironment { return false; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCourseGroupManager() - */ @Override public CourseGroupManager getCourseGroupManager() { return cgm; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCourseResourceableId() - */ @Override public Long getCourseResourceableId() { return course.getResourceableId(); } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCoursePropertyManager() - */ @Override public CoursePropertyManager getCoursePropertyManager() { return propertyManager; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getAssessmentManager() - */ @Override public AssessmentManager getAssessmentManager() { return assessmentManager; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getAuditManager() - */ @Override public UserNodeAuditManager getAuditManager() { /** @@ -139,9 +122,6 @@ public class CourseEnvironmentImpl implements CourseEnvironment { return this.auditManager; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getRunStructure() - */ @Override public Structure getRunStructure() { Structure runStructure = course.getRunStructure(); @@ -149,17 +129,11 @@ public class CourseEnvironmentImpl implements CourseEnvironment { return runStructure; } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCourseTitle() - */ @Override public String getCourseTitle() { return course.getCourseTitle(); } - /** - * @see org.olat.course.run.environment.CourseEnvironment#getCourseConfig() - */ @Override public CourseConfig getCourseConfig() { return course.getCourseConfig(); @@ -170,6 +144,11 @@ public class CourseEnvironmentImpl implements CourseEnvironment { return course.getCourseFolderContainer(); } + @Override + public VFSContainer getCourseFolderContainer(CourseContainerOptions options) { + return course.getCourseFolderContainer(options); + } + @Override public LocalFolderImpl getCourseBaseContainer() { return course.getCourseBaseContainer(); diff --git a/src/main/java/org/olat/course/run/preview/PreviewCourseEnvironment.java b/src/main/java/org/olat/course/run/preview/PreviewCourseEnvironment.java index 37a65b2b096..001afb5bc86 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewCourseEnvironment.java +++ b/src/main/java/org/olat/course/run/preview/PreviewCourseEnvironment.java @@ -33,6 +33,7 @@ import org.olat.course.Structure; import org.olat.course.assessment.AssessmentManager; import org.olat.course.auditing.UserNodeAuditManager; import org.olat.course.config.CourseConfig; +import org.olat.course.folder.CourseContainerOptions; import org.olat.course.groupsandrights.CourseGroupManager; import org.olat.course.properties.CoursePropertyManager; import org.olat.course.run.environment.CourseEnvironment; @@ -138,6 +139,11 @@ final class PreviewCourseEnvironment implements CourseEnvironment { public VFSContainer getCourseFolderContainer() { return courseFolderContainer; } + + @Override + public VFSContainer getCourseFolderContainer(CourseContainerOptions options) { + return courseFolderContainer; + } @Override public LocalFolderImpl getCourseBaseContainer() { -- GitLab