Skip to content
Snippets Groups Projects
Commit cc646f62 authored by gnaegi's avatar gnaegi
Browse files

OO-1148 put courses into semester term folders in WebDAV

parent 3cb449a1
No related branches found
Tags OpenOLAT_12.5.15
No related merge requests found
......@@ -46,12 +46,14 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
private static final String WEBDAV_ENABLED = "webdav.enabled";
private static final String WEBDAV_LINKS_ENABLED = "webdav.links.enabled";
private static final String DIGEST_AUTH_ENABLED = "auth.digest.enabled";
private static final String TERMS_FOLDERS_ENABLED = "webdav.termsfolders.enabled";
private Map<String, WebDAVProvider> webdavProviders;
private boolean enabled;
private boolean linkEnabled;
private boolean digestAuthenticationEnabled;
private boolean termsFoldersEnabled;
@Override
public void init() {
......@@ -70,6 +72,12 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
if(StringHelper.containsNonWhitespace(digestEnabledObj)) {
digestAuthenticationEnabled = "true".equals(digestEnabledObj);
}
String termsFoldersEnabledObj = getStringPropertyValue(TERMS_FOLDERS_ENABLED, true);
if(StringHelper.containsNonWhitespace(termsFoldersEnabledObj)) {
termsFoldersEnabled = "true".equals(termsFoldersEnabledObj);
}
}
@Override
......@@ -77,6 +85,7 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
enabled = getBooleanConfigParameter(WEBDAV_ENABLED, true);
linkEnabled = getBooleanConfigParameter(WEBDAV_LINKS_ENABLED, true);
digestAuthenticationEnabled = getBooleanConfigParameter(DIGEST_AUTH_ENABLED, true);
termsFoldersEnabled = getBooleanConfigParameter(TERMS_FOLDERS_ENABLED, true);
}
@Override
......@@ -116,6 +125,17 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
String enabledStr = digestAuthenticationEnabled ? "true" : "false";
setStringProperty(DIGEST_AUTH_ENABLED, enabledStr, true);
}
public void setTermsFoldersEnabled(boolean termsFoldersEnabled) {
String enabledStr = termsFoldersEnabled ? "true" : "false";
setStringProperty(TERMS_FOLDERS_ENABLED, enabledStr, true);
}
public boolean isTermsFoldersEnabled() {
return termsFoldersEnabled;
}
/**
* Return an unmodifiable map
......
......@@ -32,6 +32,7 @@
webdav.enabled=${webdav.enabled}
webdav.links.enabled=${webdav.links.enabled}
auth.digest.enabled=${auth.digest.enabled}
webdav.termsfolders.enabled=${webdav.termsfolders.enabled}
</value>
</property>
</bean>
......
......@@ -37,7 +37,7 @@ import org.olat.core.gui.control.WindowControl;
*/
public class WebDAVAdminController extends FormBasicController {
private MultipleSelectionElement enableModuleEl, enableLinkEl, enableDigestEl;
private MultipleSelectionElement enableModuleEl, enableLinkEl, enableDigestEl, enableTermsFoldersEl;
private final WebDAVModule webDAVModule;
public WebDAVAdminController(UserRequest ureq, WindowControl wControl) {
......@@ -69,6 +69,15 @@ public class WebDAVAdminController extends FormBasicController {
enableDigestEl.select("xx", webDAVModule.isDigestAuthenticationEnabled());
enableDigestEl.addActionListener(FormEvent.ONCHANGE);
enableDigestEl.setEnabled(enabled);
uifactory.addSpacerElement("spacer1", formLayout, false);
enableTermsFoldersEl = uifactory.addCheckboxesHorizontal("webdavTermsFolders", "webdav.termsfolders", formLayout, new String[]{"xx"}, values);
enableTermsFoldersEl.select("xx", webDAVModule.isTermsFoldersEnabled());
enableTermsFoldersEl.addActionListener(FormEvent.ONCHANGE);
enableTermsFoldersEl.setEnabled(enabled);
}
@Override
......@@ -83,12 +92,16 @@ public class WebDAVAdminController extends FormBasicController {
webDAVModule.setEnabled(enabled);
enableLinkEl.setEnabled(enabled);
enableDigestEl.setEnabled(enabled);
enableTermsFoldersEl.setEnabled(enabled);
} else if(source == enableLinkEl) {
boolean enabled = enableLinkEl.isAtLeastSelected(1);
webDAVModule.setLinkEnabled(enabled);
} else if(source == enableDigestEl) {
boolean enabled = enableDigestEl.isAtLeastSelected(1);
webDAVModule.setDigestAuthenticationEnabled(enabled);
} else if(source == enableTermsFoldersEl) {
boolean enabled = enableTermsFoldersEl.isAtLeastSelected(1);
webDAVModule.setTermsFoldersEnabled(enabled);
}
super.formInnerEvent(ureq, source, event);
}
......
......@@ -22,6 +22,7 @@
<li><b>$r.translate("webdav.module")</b><br />$r.translate("chelp.webdav.module")</li>
<li><b>$r.translate("webdav.link")</b><br />$r.translate("chelp.webdav.link")</li>
<li><b>$r.translate("webdav.digest")</b><br />$r.translate("chelp.webdav.digest")</li>
<li><b>$r.translate("webdav.termsfolders")</b><br />$r.translate("chelp.webdav.termsfolders")</li>
</ul>
<p class="o_important">
......
......@@ -7,6 +7,7 @@ chelp.webdav.digest.disclaimer=Die Digest-Authentication Verschl\u00FCsselung ve
chelp.webdav.link=Unabh\u00E4ngig von der WebDAV Funktion k\u00F6nnen Sie entscheiden ob die WebDAV URL in der Ordnerkomponente angezeigt werden soll oder nicht. Wenn diese Funktion ausgeschaltet ist kann WebDAV immer noch verwendet werden, es wird lediglich der Link nicht angezeigt.
chelp.webdav.module=Schalten Sie den WebDAV Zugang systemweit ein oder aus. Wenn das Modul eingeschaltet ist k\u00F6nnen alle OpenOLAT Benutzer das System \u00FCber WebDAV nutzen (empfohlen).
chelp.webdav.more=Weitere Informationen zur Anwendung von WebDAV in OpenOLAT\:
chelp.webdav.termsfolders=Aktivieren Sie diese Option um für jedes Semester einen Unterordner zu erstellen der alle Kurses dieses Semesters enthält. Diese Option erhöht die Nutzbarkeit bei vielen Kursen.
chelp.webdav.usage=Verwendung
chelp.webdavconfig.intro=Das WebDAV Modul kann f\u00FCr das gesamte OpenOLAT System ein- oder ausgeschaltet werden. Die folgenden Konfigurationen k\u00F6nnen vorgenommen werden\:
chelp.webdavconfig.title=WebDAV Modulkonfiguration
......@@ -16,3 +17,4 @@ webdav.digest=Digest Authentication bei HTTP Zugang verwenden
webdav.link=WebDAV Links anzeigen
webdav.module=WebDAV Zugang
webdav.on=ein
webdav.termsfolders=Kurse nach Semesterdaten gruppieren
......@@ -7,6 +7,7 @@ chelp.webdav.digest.disclaimer=The Digest Authentication method does not use str
chelp.webdav.link=Decide if the WebDAV URL is displayed in the folder component or not. This is independent of the the WebDAV access. When disabled, WebDAV can still be used but the WebDAV link must be known by users as it is not displayed in the web interface.
chelp.webdav.module=Enable or disable the WebDAV access. When enabled, all system users can access their OpenOLAT folder using WebDAV (recommended).
chelp.webdav.more=More information about WebDAV usage in OpenOLAT
chelp.webdav.termsfolders=Enable this flag to list the available semester terms first and within a semester term only the courses from this term. This greatly improves usability with many courses.
chelp.webdav.usage=Usage
chelp.webdavconfig.intro=The WebDAV module can be enabled/disabled system wide. The following parameters can be configured
chelp.webdavconfig.title=WebDAV module configuration
......@@ -16,3 +17,5 @@ webdav.digest=Digest Authentication for HTTP access
webdav.link=Show WebDAV links
webdav.module=WebDAV access
webdav.on=enabled
webdav.termsfolders=Group courses by semester terms
......@@ -20,15 +20,21 @@
package org.olat.course;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.olat.core.CoreSpringFactory;
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.Identity;
import org.olat.core.util.vfs.NamedContainerImpl;
import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VirtualContainer;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryManager;
import org.olat.repository.model.RepositoryEntryLifecycle;
/**
* This WebDAV provider delivery all folders in courses where the user
......@@ -36,8 +42,7 @@ import org.olat.repository.RepositoryManager;
*
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
public CoursefolderWebDAVMergeSource(Identity identity) {
super(identity);
}
......@@ -47,12 +52,54 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
RepositoryManager rm = RepositoryManager.getInstance();
List<RepositoryEntry> courseEntries = rm.queryByEditor(getIdentity(), CourseModule.getCourseTypeName());
List<VFSContainer> containers = new ArrayList<>();
Map<String, VFSContainer> terms = null;
VirtualContainer noTermContainer = null;
WebDAVModule webDAVModule = CoreSpringFactory.getImpl(WebDAVModule.class);
boolean useTerms = webDAVModule.isTermsFoldersEnabled();
if (useTerms) {
// prepare no-terms folder for all resources without semester term info or private date
terms = new HashMap<String, VFSContainer>();
noTermContainer = new VirtualContainer("other");
}
// Add all found repo entries to merge source
for (RepositoryEntry re:courseEntries) {
String courseTitle = RequestUtil.normalizeFilename(re.getDisplayname());
NamedContainerImpl cfContainer = new CoursefolderWebDAVNamedContainer(courseTitle, re.getOlatResource());
addContainerToList(cfContainer, containers);
if (useTerms) {
RepositoryEntryLifecycle lc = re.getLifecycle();
if (lc != null && !lc.isPrivateCycle()) {
// when a semester term info is found, add it to corresponding term folder
String termSoftKey = lc.getSoftKey();
VFSContainer termContainer = terms.get(termSoftKey);
if (termContainer == null) {
// folder for this semester term does not yet exist, create one and add to map
String normalizedKey = RequestUtil.normalizeFilename(termSoftKey);
termContainer = new VirtualContainer(normalizedKey);
terms.put(termSoftKey, termContainer);
addContainerToList(termContainer, containers);
}
termContainer.getItems().add(cfContainer);
} else {
// no semester term found, add to no-term folder
noTermContainer.getItems().add(cfContainer);
}
} else {
addContainerToList(cfContainer, containers);
}
}
if (useTerms) {
// add no-terms folder if any have been found
if (noTermContainer.getItems().size() > 0) {
addContainerToList(noTermContainer, containers);
}
}
return containers;
}
}
\ No newline at end of file
......@@ -438,6 +438,9 @@ webdav.enabled=true
#webdav manager (show or don't webdav links in GUI)
webdav.links.enabled=true
auth.digest.enabled=true
#sort courses using semester terms for better discoverability. Only
#usefull when semester terms are defined in admin area and used by courses
webdav.termsfolders.enabled=true
########################################################################
# Image and PDF scale/thumbnail options
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment