From 33ee31f40871b34af1f5bc97d3b3d6ea009fab98 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 22 Jan 2016 14:36:35 +0100
Subject: [PATCH] OO-1855: add a configurable possibility to prepend the
 external id of course to their WebDAV folders

---
 .../commons/services/webdav/WebDAVModule.java    | 16 ++++++++++++++++
 .../webdav/ui/WebDAVAdminController.java         | 10 +++++++++-
 .../webdav/ui/_i18n/LocalStrings_de.properties   | 11 +----------
 .../webdav/ui/_i18n/LocalStrings_en.properties   | 12 +-----------
 .../course/CoursefolderWebDAVMergeSource.java    | 16 +++++++++++-----
 5 files changed, 38 insertions(+), 27 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
index c956aab9e40..7779416fe5a 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
@@ -47,6 +47,7 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 	private static final String TERMS_FOLDERS_ENABLED = "webdav.termsfolders.enabled";
 	private static final String LEARNERS_BOOKMARKS_COURSE = "webdav.learners.bookmarks.courses";
 	private static final String LEARNERS_PARTICIPATING_COURSES = "webdav.learners.participating.courses";
+	private static final String PREPEND_COURSE_REFERENCE_TO_TITLE = "webdav.prepend.course.reference.to.title";
 	
 	@Autowired
 	private List<WebDAVProvider> webdavProviders;
@@ -59,6 +60,8 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 	private boolean digestAuthenticationEnabled;
 	@Value("${webdav.termsfolders.enabled:true}")
 	private boolean termsFoldersEnabled;
+	@Value("${webdav.prepend.course.reference.to.title:false}")
+	private boolean prependCourseReferenceToTitle;
 
 	@Value("${webdav.learners.bookmarks.enabled:true}")
 	private boolean enableLearnersBookmarksCourse;
@@ -101,6 +104,10 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 		if(StringHelper.containsNonWhitespace(learnersParticipatingCoursesObj)) {
 			enableLearnersParticipatingCourses = "true".equals(learnersParticipatingCoursesObj);
 		}
+		String prependCourseReferenceToTitleObj = getStringPropertyValue(PREPEND_COURSE_REFERENCE_TO_TITLE, true);
+		if(StringHelper.containsNonWhitespace(prependCourseReferenceToTitleObj)) {
+			prependCourseReferenceToTitle = "true".equals(prependCourseReferenceToTitleObj);
+		}
 	}
 	
 	@Override
@@ -166,6 +173,15 @@ public class WebDAVModule extends AbstractSpringModule implements ConfigOnOff {
 		this.enableLearnersParticipatingCourses = enabled;
 		setStringProperty(LEARNERS_PARTICIPATING_COURSES, enabled ? "true" : "false", true);
 	}
+	
+	public boolean isPrependCourseReferenceToTitle() {
+		return prependCourseReferenceToTitle;
+	}
+	
+	public void setPrependCourseReferenceToTitle(boolean enabled) {
+		this.prependCourseReferenceToTitle = enabled;
+		setStringProperty(PREPEND_COURSE_REFERENCE_TO_TITLE, enabled ? "true" : "false", true);
+	}
 
 	/**
 	 * Return an unmodifiable map
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
index 001e7e99a7c..f531c4d0fc4 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
@@ -38,7 +38,7 @@ import org.olat.core.gui.control.WindowControl;
 public class WebDAVAdminController extends FormBasicController {
 	
 	private MultipleSelectionElement enableModuleEl, enableLinkEl, enableDigestEl, enableTermsFoldersEl,
-			learnersAsParticipantEl, learnersBookmarkEl;
+			learnersAsParticipantEl, learnersBookmarkEl, prependReferenceEl;
 	
 	private final WebDAVModule webDAVModule;
 	
@@ -78,6 +78,11 @@ public class WebDAVAdminController extends FormBasicController {
 		enableTermsFoldersEl.select("xx", webDAVModule.isTermsFoldersEnabled());
 		enableTermsFoldersEl.addActionListener(FormEvent.ONCHANGE);
 		enableTermsFoldersEl.setEnabled(enabled);
+		
+		prependReferenceEl = uifactory.addCheckboxesHorizontal("webdavPrepend", "webdav.prepend.reference", formLayout, new String[]{"xx"}, values);
+		prependReferenceEl.select("xx", webDAVModule.isPrependCourseReferenceToTitle());
+		prependReferenceEl.addActionListener(FormEvent.ONCHANGE);
+		prependReferenceEl.setEnabled(enabled);
 
 		uifactory.addSpacerElement("spacer2", formLayout, false);
 		
@@ -122,6 +127,9 @@ public class WebDAVAdminController extends FormBasicController {
 		} else if(source == learnersBookmarkEl) {
 			boolean enabled = learnersBookmarkEl.isAtLeastSelected(1);
 			webDAVModule.setEnableLearnersBookmarksCourse(enabled);
+		} else if(source == prependReferenceEl) {
+			boolean enabled = prependReferenceEl.isAtLeastSelected(1);
+			webDAVModule.setPrependCourseReferenceToTitle(enabled);
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
index bcb46a6c11f..fed9cf9c091 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
@@ -2,17 +2,7 @@
 admin.menu.title=WebDAV
 admin.menu.title.alt=WebDAV Zugang
 admin.webdav.description=Mit Hilfe von WebDAV k\u00F6nnen Sie OpenOLAT Ordner auf Ihrem lokalen Desktop wie lokale Ordner anzeigen und verwenden. Konfigurieren Sie ob diese Funktion allen Benutzern Systemweit zur Verf\u00FCgung stehen soll. Bitte lesen sie die Kontexthilfe.
-
-
-
-
-
-
-
-
-
 core.webdav=WebDAV
-
 webdav.digest=Digest Authentication bei HTTP Zugang verwenden 
 webdav.link=WebDAV Links anzeigen
 webdav.module=WebDAV Zugang
@@ -20,3 +10,4 @@ webdav.on=ein
 webdav.termsfolders=Kurse nach Semesterdaten gruppieren
 webdav.for.learners.participants=Zugriff für Studenten Kursen
 webdav.for.learners.bookmarks=Zugriff für Studenten Favoriten
+webdav.prepend.reference=Kursreferenz zu Titel voranstellen
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
index 7ed0539a648..b03f1dc2aea 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
@@ -2,17 +2,7 @@
 admin.menu.title=WebDAV
 admin.menu.title.alt=WebDAV access
 admin.webdav.description=Using WebDAV you can mount and use OpenOLAT folders on your local desktop as if they were local folders. Enable this feature to make it accessable to all users of your platform. Please read the context help.
-
-
-
-
-
-
-
-
-
 core.webdav=WebDAV
-
 webdav.digest=Digest Authentication for HTTP access
 webdav.link=Show WebDAV links
 webdav.module=WebDAV access
@@ -20,4 +10,4 @@ webdav.on=enabled
 webdav.termsfolders=Group courses by semester terms
 webdav.for.learners.participants=Enable access for courses where user is participant
 webdav.for.learners.bookmarks=Enable for courses that users marked as favorite
-
+webdav.prepend.reference=Prepend course reference to title
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
index aca632ed166..59e36413c44 100644
--- a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
+++ b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
@@ -31,6 +31,7 @@ import org.olat.core.commons.services.webdav.WebDAVModule;
 import org.olat.core.commons.services.webdav.manager.WebDAVMergeSource;
 import org.olat.core.commons.services.webdav.servlets.RequestUtil;
 import org.olat.core.id.IdentityEnvironment;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.vfs.NamedContainerImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VirtualContainer;
@@ -71,21 +72,22 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
 			terms = new HashMap<String, VFSContainer>();
 			noTermContainer = new VirtualContainer("other");
 		}
+		boolean prependReference = webDAVModule.isPrependCourseReferenceToTitle();
 		
 		Set<RepositoryEntry> duplicates = new HashSet<>();
 		List<RepositoryEntry> editorEntries = repositoryManager.queryByOwner(getIdentity(), "CourseModule");
-		appendCourses(editorEntries, true, containers, useTerms,  terms, noTermContainer, duplicates);
+		appendCourses(editorEntries, true, containers, useTerms, terms, noTermContainer, prependReference, duplicates);
 		
 		//add courses as participant
 		if(webDAVModule.isEnableLearnersParticipatingCourses()) {
 			List<RepositoryEntry> participantEntries = repositoryManager.getLearningResourcesAsStudent(getIdentity(), "CourseModule", 0, -1);
-			appendCourses(participantEntries, false, containers, useTerms,  terms, noTermContainer, duplicates);
+			appendCourses(participantEntries, false, containers, useTerms, terms, noTermContainer, prependReference, duplicates);
 		}
 		
 		//add bookmarked courses
 		if(webDAVModule.isEnableLearnersBookmarksCourse()) {
 			List<RepositoryEntry> bookmarkedEntries = repositoryManager.getLearningResourcesAsBookmark(getIdentity(), identityEnv.getRoles(), "CourseModule", 0, -1);
-			appendCourses(bookmarkedEntries, false, containers, useTerms,  terms, noTermContainer, duplicates);
+			appendCourses(bookmarkedEntries, false, containers, useTerms, terms, noTermContainer, prependReference, duplicates);
 		}
 
 		if (useTerms) {
@@ -100,7 +102,7 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
 	
 	private void appendCourses(List<RepositoryEntry> courseEntries, boolean editor, List<VFSContainer> containers,
 			boolean useTerms, Map<String, VFSContainer> terms, VirtualContainer noTermContainer,
-			Set<RepositoryEntry> duplicates) {	
+			boolean prependReference, Set<RepositoryEntry> duplicates) {	
 		
 		// Add all found repo entries to merge source
 		for (RepositoryEntry re:courseEntries) {
@@ -109,7 +111,11 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
 			}
 			duplicates.add(re);
 			
-			String courseTitle = RequestUtil.normalizeFilename(re.getDisplayname());
+			String displayName = re.getDisplayname();
+			if(prependReference && StringHelper.containsNonWhitespace(re.getExternalId())) {
+				displayName = re.getExternalId() + " " + displayName;
+			}
+			String courseTitle = RequestUtil.normalizeFilename(displayName);
 			NamedContainerImpl cfContainer = new CoursefolderWebDAVNamedContainer(courseTitle, re, editor ? null : identityEnv);
 			
 			if (useTerms) {
-- 
GitLab