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