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