diff --git a/src/main/java/org/olat/core/commons/modules/bc/FolderManager.java b/src/main/java/org/olat/core/commons/modules/bc/FolderManager.java index 3e67e7bfc9bb7ceadfc0805f246353b193ca05d6..da31f9af008bba585ac575c22b2135ebe45ec89d 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/FolderManager.java +++ b/src/main/java/org/olat/core/commons/modules/bc/FolderManager.java @@ -48,6 +48,8 @@ import org.olat.core.util.vfs.filters.SystemItemFilter; * @author Mike Stock */ public class FolderManager extends BasicManager { + + private static FolderModule folderModule = CoreSpringFactory.getImpl(FolderModule.class); /** * Get this path as a full WebDAV link @@ -100,4 +102,28 @@ public class FolderManager extends BasicManager { } } + /** + * Check if a file is offered as a download or as inline rendered. If + * security is enabled in the module, this will return true for all file + * types. If disabled it will depend on the mime type. + * + * @param name the File name (including mime type extension, e.g. "index.html" + * @return true: force file download; false: open in new browser window + */ + public static boolean isDownloadForcedFileType(String name) { + // If enabled in module, no further checks necessary. + boolean download = folderModule.isForceDownload(); + if (!download) { + // Additional check if not an html or txt page. Only HTML pages are + // displayed in browser, all other should be downloaded. + // Excel, Word and PowerPoint not allowed to open inline, they will show + // an unsupported WebDAV loginpromt! + String mimeType = WebappHelper.getMimeType(name); + if (mimeType != null && !"text/html".equals(mimeType) && !"application/xhtml+xml".equals(mimeType)) { + download = true; + } + } + return download; + } + } diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java index a3778f2fff6536dc1b3a4c84f0bf86b594a13229..05b3049dfd9c9d08ed7e3fc52824d9533436b6e4 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java @@ -30,9 +30,8 @@ import java.io.InputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FolderLoggingAction; -import org.olat.core.commons.modules.bc.FolderModule; +import org.olat.core.commons.modules.bc.FolderManager; import org.olat.core.commons.modules.bc.components.FolderComponent; import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; @@ -82,9 +81,9 @@ public class CmdServeResource implements FolderCommand { } else if(!(vfsitem instanceof VFSLeaf)) { mr = new NotFoundMediaResource(path); } else { - boolean forceDownload = CoreSpringFactory.getImpl(FolderModule.class).isForceDownload(); VFSLeaf vfsfile = (VFSLeaf)vfsitem; + boolean forceDownload = FolderManager.isDownloadForcedFileType(vfsfile.getName()); if (path.toLowerCase().endsWith(".html") || path.toLowerCase().endsWith(".htm")) { // setCurrentURI(path); // set the http content-type and the encoding @@ -161,10 +160,7 @@ public class CmdServeResource implements FolderCommand { } else { // binary data: not .html, not .htm, not .js -> treated as is VFSMediaResource vmr = new VFSMediaResource(vfsfile); - // This is to prevent the login prompt in Excel, Word and PowerPoint - if (path.endsWith(".xlsx") || path.endsWith(".pptx") || path.endsWith(".docx")) { - vmr.setDownloadable(true); - } else if(forceDownload) { + if(forceDownload) { vmr.setDownloadable(true); } mr = vmr; diff --git a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java index 7efb164c94217829168883726e63df9c96af1978..7e21b0ba96b542e79fcd4e561d58e4c005e4f974 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java +++ b/src/main/java/org/olat/core/commons/modules/bc/components/ListRenderer.java @@ -33,7 +33,7 @@ import java.util.List; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FileSelection; import org.olat.core.commons.modules.bc.FolderConfig; -import org.olat.core.commons.modules.bc.FolderModule; +import org.olat.core.commons.modules.bc.FolderManager; import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; import org.olat.core.gui.components.form.flexible.impl.NameValuePair; @@ -47,7 +47,6 @@ import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; -import org.olat.core.util.WebappHelper; import org.olat.core.util.vfs.AbstractVirtualContainer; import org.olat.core.util.vfs.NamedContainerImpl; import org.olat.core.util.vfs.VFSConstants; @@ -85,7 +84,6 @@ public class ListRenderer { /** View thumbnail */ public static final String PARAM_SERV_THUMBNAIL = "servthumb"; - private FolderModule folderModule; private VFSLockManager lockManager; private UserManager userManager; @@ -113,9 +111,6 @@ public class ListRenderer { if(userManager == null) { userManager = CoreSpringFactory.getImpl(UserManager.class); } - if(folderModule == null) { - folderModule = CoreSpringFactory.getImpl(FolderModule.class); - } List<VFSItem> children = fc.getCurrentContainerChildren(); // folder empty? @@ -256,15 +251,7 @@ public class ListRenderer { ubu.buildURI(sb, new String[] { PARAM_SERV }, new String[] { "x" }, pathAndName, AJAXFlags.MODE_NORMAL); sb.append("\""); - boolean download = folderModule.isForceDownload(); - if (!download) { - // additional check if not an html or txt page. Only HTML pages are - // displayed in browser, all other should be downloaded - String mimeType = WebappHelper.getMimeType(name); - if (mimeType != null && !"text/html".equals(mimeType) && !"application/xhtml+xml".equals(mimeType)) { - download = true; - } - } + boolean download = FolderManager.isDownloadForcedFileType(name); if (download) { sb.append(" download=\"").append(StringHelper.escapeHtml(name)).append("\""); } else {