diff --git a/src/main/java/org/olat/admin/layout/LayoutAdminController.java b/src/main/java/org/olat/admin/layout/LayoutAdminController.java index 0f4d5b9259e4793941f4f2589e99e5ccaf842e15..bdad02c2ee2a06a3c7159ef2a27b7dd8c3fa0d87 100644 --- a/src/main/java/org/olat/admin/layout/LayoutAdminController.java +++ b/src/main/java/org/olat/admin/layout/LayoutAdminController.java @@ -157,6 +157,7 @@ public class LayoutAdminController extends FormBasicController { if (name.equalsIgnoreCase("CVS")) return false; else if (name.equalsIgnoreCase(".DS_Store")) return false; else if (name.equalsIgnoreCase(".sass-cache")) return false; + else if (name.equalsIgnoreCase(".hg")) return false; else return true; } } diff --git a/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutHelper.java b/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutHelper.java index ced519d1a9256288f804768fa58305c3366d703d..a2a891388badd56662a3543d3584e19d1b50024f 100644 --- a/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutHelper.java +++ b/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutHelper.java @@ -62,6 +62,21 @@ public class CourseLayoutHelper { public static final String LAYOUT_COURSE_SUBFOLDER = "/layout"; private static final String IFRAME_CSS = "/iframe.css"; private static final String MAIN_CSS = "/main.css"; + + private static final VFSItemFilter themeNamesFilter = new VFSItemFilter() { + @Override + public boolean accept(VFSItem it) { + if (!(it instanceof VFSContainer)) return false; + // remove unwanted meta-dirs + else if (it.getName().equalsIgnoreCase("CVS")) return false; + else if (it.getName().equalsIgnoreCase(".DS_Store")) return false; + else if (it.getName().equalsIgnoreCase(".sass-cache")) return false; + else if (it.getName().equalsIgnoreCase(".hg")) return false; + // last check is blacklist + return !(layoutBlacklist.contains(it.getName())); + } + }; + /** * Array holding the folder-names of the blacklisted course-layouts @@ -157,26 +172,13 @@ public class CourseLayoutHelper { VFSContainer cThemeCont = new LocalFolderImpl(themesFile); cThemeCont = (VFSContainer) cThemeCont.resolve("/coursethemes"); if (cThemeCont != null) { - courseThemes = cThemeCont.getItems(new VFSItemFilter() { - @Override - public boolean accept(VFSItem it) { - if (!(it instanceof VFSContainer)) return false; - if (it.getName().equals("CVS") || it.getName().equals("cvs")) return false; - return !(layoutBlacklist.contains(it.getName())); - } - }); + courseThemes = cThemeCont.getItems(themeNamesFilter); } // 2. now add the additional Templates from the current Theme VFSContainer addThCont = CourseLayoutHelper.getOLATThemeCourseLayoutFolder(); if (addThCont != null) { - List<VFSItem> additionalThemes = addThCont.getItems(new VFSItemFilter() { - @Override - public boolean accept(VFSItem it) { - if (!(it instanceof VFSContainer)) return false; - return (!it.getName().equals("CVS") && !it.getName().equals("cvs")); - } - }); + List<VFSItem> additionalThemes = addThCont.getItems(themeNamesFilter); courseThemes.addAll(additionalThemes); } return courseThemes; @@ -190,10 +192,27 @@ public class CourseLayoutHelper { * @return the courselayouts-folder or null */ public static VFSContainer getOLATThemeCourseLayoutFolder() { - String staticThemesPath = WebappHelper.getContextRoot() + "/static/themes/"; - File tmpDir = new File(staticThemesPath); - VFSContainer addThCont = new LocalFolderImpl(tmpDir); - return (VFSContainer) addThCont.resolve("/" + Settings.getGuiThemeIdentifyer() + "/courselayouts"); + VFSContainer courseLayoutFolder = null; + File themeDir = null; + // first attempt is to use custom theme path + if (Settings.getGuiCustomThemePath() != null) { + themeDir = new File(Settings.getGuiCustomThemePath(), Settings.getGuiThemeIdentifyer()); + if (themeDir.exists() && themeDir.isDirectory()) { + VFSContainer themeContainer = new LocalFolderImpl(themeDir); + courseLayoutFolder = (VFSContainer) themeContainer.resolve("/courselayouts"); + } + } + // fallback is to use the standards themes directory in the web app + if (themeDir == null || !themeDir.exists() || !themeDir.isDirectory()) { + File themesDir = new File(WebappHelper.getContextRoot() + "/static/themes/"); + themeDir = new File(themesDir, Settings.getGuiThemeIdentifyer()); + } + // resolve now + if (themeDir != null && themeDir.exists() && themeDir.isDirectory()) { + VFSContainer themeContainer = new LocalFolderImpl(themeDir); + courseLayoutFolder = (VFSContainer) themeContainer.resolve("/courselayouts"); + } + return courseLayoutFolder; } /**