From 437164ea35dbe4844f2cfc785a17f819706d266a Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 29 Jan 2015 08:29:50 +0100 Subject: [PATCH] OO-1407: fix the relative path of uploaded images --- .../filechooser/FileChooserUIFactory.java | 23 +++++++++++++++++++ .../FileLinkChooserController.java | 11 +++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserUIFactory.java b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserUIFactory.java index 1ffd8e37f59..eff27763f77 100644 --- a/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserUIFactory.java +++ b/src/main/java/org/olat/core/commons/controllers/filechooser/FileChooserUIFactory.java @@ -20,6 +20,7 @@ package org.olat.core.commons.controllers.filechooser; +import org.olat.core.commons.modules.bc.FolderEvent; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.core.util.vfs.VFSContainer; @@ -146,4 +147,26 @@ public class FileChooserUIFactory { VFSItem selectedItem = event.getSelectedItem(); return VFSManager.getRelativeItemPath(selectedItem, rootContainer, relativeBasePath); } + + /** + * Get the path as string of the selected item relative to the root + * container and the relative base path + * + * @param event The folder event + * @param rootContainer + * The root container for which the relative path should be + * calculated + * @param relativeBasePath + * when NULL, the path will be calculated relative to the + * rootContainer; when NULL, the relativeBasePath must + * represent a relative path within the root container that + * serves as the base. In this case, the calculated relative item + * path will start from this relativeBasePath + * @return + */ + public static String getSelectedRelativeItemPath(FolderEvent event, VFSContainer rootContainer, String relativeBasePath) { + // 1) Create path absolute to the root container + VFSItem selectedItem = event.getItem(); + return VFSManager.getRelativeItemPath(selectedItem, rootContainer, relativeBasePath); + } } diff --git a/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java b/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java index e957eb2544b..751e09f63f1 100644 --- a/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java +++ b/src/main/java/org/olat/core/commons/controllers/linkchooser/FileLinkChooserController.java @@ -187,6 +187,7 @@ public class FileLinkChooserController extends BasicController { * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) */ + @Override public void event(UserRequest ureq, Controller source, Event event) { if (source == uploadCtr) { if (event instanceof FolderEvent) { @@ -194,13 +195,19 @@ public class FileLinkChooserController extends BasicController { if (isFileSuffixOk(folderEvent.getFilename())) { Size size = null; VFSItem item = folderEvent.getItem(); + + String relPath; if(item != null) { size = getSize(item, item.getName()); + relPath = FileChooserUIFactory + .getSelectedRelativeItemPath(folderEvent, rootDir, fileName); + } else { + relPath = folderEvent.getFilename(); } if(size != null) { - fireEvent(ureq, new URLChoosenEvent(folderEvent.getFilename(), null, null, null, size.getWidth(), size.getHeight())); + fireEvent(ureq, new URLChoosenEvent(relPath, null, null, null, size.getWidth(), size.getHeight())); } else { - fireEvent(ureq, new URLChoosenEvent(folderEvent.getFilename())); + fireEvent(ureq, new URLChoosenEvent(relPath)); } } else { setErrorMessage(folderEvent.getFilename()); -- GitLab