From a1cd92b317def37f19ef43b0bfad27655c3e889a Mon Sep 17 00:00:00 2001
From: aboeckle <alexander.boeckle@frentix.com>
Date: Mon, 20 Apr 2020 17:23:06 +0200
Subject: [PATCH] OO-4603 Changed language chain

---
 .../impressum/EmptyImpressumExtension.java    | 71 +++++++++++--------
 .../impressum/ImpressumController.java        | 27 +++++--
 .../impressum/ImpressumExtension.java         | 28 +++++---
 .../impressum/PrivacyPolicyController.java    | 21 ++++--
 .../impressum/PrivacyPolicyExtension.java     | 26 ++++---
 .../impressum/TermsOfUseController.java       | 21 ++++--
 .../impressum/TermsOfUseExtension.java        | 25 ++++---
 .../impressum/_spring/impressumContext.xml    |  4 ++
 8 files changed, 149 insertions(+), 74 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java b/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java
index 8004ee3091f..49dee592ae6 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java
@@ -27,10 +27,10 @@ import org.apache.commons.io.FileUtils;
 import org.olat.core.extensions.ExtensionElement;
 import org.olat.core.extensions.action.GenericActionExtension;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
@@ -44,11 +44,11 @@ import org.olat.core.util.vfs.VFSLeaf;
 public class EmptyImpressumExtension extends GenericActionExtension {
 	
 	private final ImpressumModule impressumModule;
+	private final I18nModule i18nModule;
 	
-	private VelocityContainer vc;
-	
-	public EmptyImpressumExtension(ImpressumModule impressumModule) {
+	public EmptyImpressumExtension(ImpressumModule impressumModule, I18nModule i18nModule) {
 		this.impressumModule = impressumModule;
+		this.i18nModule = i18nModule;
 	}
 	
 
@@ -59,38 +59,33 @@ public class EmptyImpressumExtension extends GenericActionExtension {
 	
 	@Override
 	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {
-		boolean enabled = false;
+		// Something is enabled (imprint, terms of use, privacy policy or contact)
+		// First check: Contact module
+		boolean enabled = impressumModule.isContactEnabled();
 		
-		if (impressumModule.isEnabled() && !impressumModule.isContactEnabled()) {
+		// Second check: Impressum module
+		if (impressumModule.isEnabled()) {
 			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getImpressumDirectory());
 			VFSContainer termsOfUseDir = new LocalFolderImpl(impressumModule.getTermsOfUseDirectory());
 			VFSContainer privacyPoliciyDir = new LocalFolderImpl(impressumModule.getPrivacyPolicyDirectory());
 			
-			if (checkContent(impressumDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_de.html"))) {
-				// Nothing to do here
-			} else if (checkContent(termsOfUseDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(termsOfUseDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(termsOfUseDir.resolve("index_de.html"))) {
-				// Nothing to do here
-			} else if (checkContent(privacyPoliciyDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(privacyPoliciyDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(privacyPoliciyDir.resolve("index_de.html"))) {
-				// Nothing to do here
-			} else {
-				// Nothing found
-				enabled |= true;
+			// First check the imprint 
+			enabled |= checkModule(impressumDir, ureq);
+			
+			// Go on if enabled is false
+			// and check the terms of use
+			if (!enabled) {
+				enabled |= checkModule(termsOfUseDir, ureq);
+			}
+			
+			// Go on if enabled is still false
+			// and check the privacy policy
+			if (!enabled) {
+				enabled |= checkModule(privacyPoliciyDir, ureq);
 			}
 		}
 		
-		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
+		return enabled ? null : super.getExtensionFor(extensionPoint, ureq);
 	}
 	
 	private boolean checkContent(VFSItem file) {
@@ -116,4 +111,24 @@ public class EmptyImpressumExtension extends GenericActionExtension {
 		}
 		return check;
 	}
+	
+	private boolean checkModule(VFSContainer baseFolder, UserRequest ureq) {
+		boolean enabled = true;
+		
+		if (checkContent(baseFolder.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
+			// Nothing to do here
+		} else if (checkContent(baseFolder.resolve("index_" + I18nModule.getDefaultLocale().getLanguage() + ".html"))) {
+			// Nothing to do here
+		} else {
+			for (String locale : i18nModule.getEnabledLanguageKeys()) {
+				if (checkContent(baseFolder.resolve("index_" + locale + ".html"))) {
+					return enabled;
+				}
+			}
+			
+			enabled &= false;
+		} 
+		
+		return enabled;
+	}
 }
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumController.java b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumController.java
index afd13002d4c..408f7711404 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumController.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumController.java
@@ -27,6 +27,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
+import org.olat.core.util.i18n.I18nModule;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -42,6 +43,8 @@ public class ImpressumController extends BasicController {
 
 	@Autowired
 	private ImpressumModule impressumModule;
+	@Autowired
+	private I18nModule i18nModule;
 
 	/**
 	 * @param ureq
@@ -49,20 +52,30 @@ public class ImpressumController extends BasicController {
 	 */
 	public ImpressumController(UserRequest ureq, WindowControl control) {
 		super(ureq, control);
-		
 		File baseFolder = impressumModule.getImpressumDirectory();
 		IFrameDisplayController iframe = new IFrameDisplayController(ureq, getWindowControl(), baseFolder);
 		listenTo(iframe);
-
+		
 		String langCode = ureq.getLocale().getLanguage();
 		String fileName = "index_" + langCode + ".html";
-		if (new File(baseFolder, fileName).exists()) {
+		if (new File (baseFolder, fileName).exists()){
 			iframe.setCurrentURI(fileName);
-		} else if(new File (baseFolder, "index_de.html").exists()) {
-				iframe.setCurrentURI("index_de.html");
-		} else if(new File (baseFolder, "index_en.html").exists()) {
-				iframe.setCurrentURI("index_en.html");
+		} else {
+			langCode = I18nModule.getDefaultLocale().getLanguage();
+			fileName = "index_" + langCode + ".html";
+			if (new File(baseFolder, fileName).exists()) {
+				iframe.setCurrentURI(fileName);
+			} else {
+				for (String lang : i18nModule.getEnabledLanguageKeys()) {
+					fileName = "index_" + lang + ".html";
+					if (new File(baseFolder, fileName).exists()) {
+						iframe.setCurrentURI(fileName);
+						break;
+					}
+				}
+			}
 		}
+		
 		putInitialPanel(iframe.getInitialComponent());
 	}
 
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumExtension.java b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumExtension.java
index 86e954215db..ea0f3d68df5 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumExtension.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumExtension.java
@@ -30,6 +30,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
@@ -43,9 +44,11 @@ import org.olat.core.util.vfs.VFSLeaf;
 public class ImpressumExtension extends GenericActionExtension {
 	
 	private final ImpressumModule impressumModule;
+	private final I18nModule i18nModule;
 	
-	public ImpressumExtension(ImpressumModule impressumModule) {
+	public ImpressumExtension(ImpressumModule impressumModule, I18nModule i18nModule) {
 		this.impressumModule = impressumModule;
+		this.i18nModule = i18nModule;
 	}
 	
 
@@ -56,22 +59,25 @@ public class ImpressumExtension extends GenericActionExtension {
 	
 	@Override
 	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {
-		boolean enabled = false;
+boolean enabled = false;
 		
 		if (impressumModule.isEnabled()) {
 			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getImpressumDirectory());
-			enabled = true;
 			
 			if (checkContent(impressumDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_de.html"))) {
-				// Nothing to do here
+				enabled |= true;
+			} else if (checkContent(impressumDir.resolve("index_" + I18nModule.getDefaultLocale().getLanguage() + ".html"))) {
+				enabled |= true;
 			} else {
-				// Nothing found
-				enabled &= false;
-			}
+				
+				for (String locale : i18nModule.getEnabledLanguageKeys()) {
+					if (checkContent(impressumDir.resolve("index_" + locale + ".html"))) {
+						enabled |= true;
+						break;
+					}
+				}
+			} 
+				
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyController.java b/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyController.java
index d172a2b3d98..481fbae9e67 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyController.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyController.java
@@ -27,6 +27,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
+import org.olat.core.util.i18n.I18nModule;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /* 
@@ -37,6 +38,8 @@ public class PrivacyPolicyController extends BasicController {
 	
 	@Autowired
 	private ImpressumModule impressumModule;
+	@Autowired
+	private I18nModule i18nModule;
 
 	public PrivacyPolicyController(UserRequest ureq, WindowControl control) {
 		super(ureq, control);
@@ -48,10 +51,20 @@ public class PrivacyPolicyController extends BasicController {
 		String fileName = "index_" + langCode + ".html";
 		if (new File (baseFolder, fileName).exists()){
 			iframe.setCurrentURI(fileName);
-		} else if(new File (baseFolder, "index_de.html").exists()) {
-			iframe.setCurrentURI("index_de.html");
-		} else if(new File (baseFolder, "index_en.html").exists()) {
-			iframe.setCurrentURI("index_en.html");
+		} else {
+			langCode = I18nModule.getDefaultLocale().getLanguage();
+			fileName = "index_" + langCode + ".html";
+			if (new File(baseFolder, fileName).exists()) {
+				iframe.setCurrentURI(fileName);
+			} else {
+				for (String lang : i18nModule.getEnabledLanguageKeys()) {
+					fileName = "index_" + lang + ".html";
+					if (new File(baseFolder, fileName).exists()) {
+						iframe.setCurrentURI(fileName);
+						break;
+					}
+				}
+			}
 		}
 		
 		putInitialPanel(iframe.getInitialComponent());
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyExtension.java b/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyExtension.java
index e81d082b649..fd63d3ff42e 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyExtension.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/PrivacyPolicyExtension.java
@@ -30,6 +30,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
@@ -44,9 +45,11 @@ public class PrivacyPolicyExtension extends GenericActionExtension {
 
 	
 	private final ImpressumModule impressumModule;
+	private final I18nModule i18nModule;
 	
-	public PrivacyPolicyExtension(ImpressumModule impressumModule) {
+	public PrivacyPolicyExtension(ImpressumModule impressumModule, I18nModule i18nModule) {
 		this.impressumModule = impressumModule;
+		this.i18nModule = i18nModule;
 	}
 	
 
@@ -61,18 +64,21 @@ public class PrivacyPolicyExtension extends GenericActionExtension {
 		
 		if (impressumModule.isEnabled()) {
 			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getPrivacyPolicyDirectory());
-			enabled = true;
 			
 			if (checkContent(impressumDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_de.html"))) {
-				// Nothing to do here
+				enabled |= true;
+			} else if (checkContent(impressumDir.resolve("index_" + I18nModule.getDefaultLocale().getLanguage() + ".html"))) {
+				enabled |= true;
 			} else {
-				// Nothing found
-				enabled &= false;
-			}
+				
+				for (String locale : i18nModule.getEnabledLanguageKeys()) {
+					if (checkContent(impressumDir.resolve("index_" + locale + ".html"))) {
+						enabled |= true;
+						break;
+					}
+				}
+			} 
+				
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseController.java b/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseController.java
index af09b707014..a788fd9a226 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseController.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseController.java
@@ -27,6 +27,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
+import org.olat.core.util.i18n.I18nModule;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -42,6 +43,8 @@ public class TermsOfUseController extends BasicController {
 	
 	@Autowired
 	private ImpressumModule impressumModule;
+	@Autowired 
+	private I18nModule i18nModule;
 
 	/**
 	 * @param ureq
@@ -57,10 +60,20 @@ public class TermsOfUseController extends BasicController {
 		String fileName = "index_" + langCode + ".html";
 		if (new File (baseFolder, fileName).exists()){
 			iframe.setCurrentURI(fileName);
-		} else if(new File (baseFolder, "index_de.html").exists()) {
-			iframe.setCurrentURI("index_de.html");
-		} else if(new File (baseFolder, "index_en.html").exists()) {
-			iframe.setCurrentURI("index_en.html");
+		} else {
+			langCode = I18nModule.getDefaultLocale().getLanguage();
+			fileName = "index_" + langCode + ".html";
+			if (new File(baseFolder, fileName).exists()) {
+				iframe.setCurrentURI(fileName);
+			} else {
+				for (String lang : i18nModule.getEnabledLanguageKeys()) {
+					fileName = "index_" + lang + ".html";
+					if (new File(baseFolder, fileName).exists()) {
+						iframe.setCurrentURI(fileName);
+						break;
+					}
+				}
+			}
 		}
 		
 		putInitialPanel(iframe.getInitialComponent());
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseExtension.java b/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseExtension.java
index d946ca7e992..38080de885c 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseExtension.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/TermsOfUseExtension.java
@@ -30,6 +30,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
@@ -44,9 +45,11 @@ public class TermsOfUseExtension extends GenericActionExtension {
 
 	
 	private final ImpressumModule impressumModule;
+	private final I18nModule i18nModule;
 	
-	public TermsOfUseExtension(ImpressumModule impressumModule) {
+	public TermsOfUseExtension(ImpressumModule impressumModule, I18nModule i18nModule) {
 		this.impressumModule = impressumModule;
+		this.i18nModule = i18nModule;
 	}
 	
 
@@ -61,18 +64,20 @@ public class TermsOfUseExtension extends GenericActionExtension {
 		
 		if (impressumModule.isEnabled()) {
 			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getTermsOfUseDirectory());
-			enabled = true;
 			
 			if (checkContent(impressumDir.resolve("index_" + ureq.getLocale().getLanguage() + ".html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_en.html"))) {
-				// Nothing to do here
-			} else if (checkContent(impressumDir.resolve("index_de.html"))) {
-				// Nothing to do here
+				enabled |= true;
+			} else if (checkContent(impressumDir.resolve("index_" + I18nModule.getDefaultLocale().getLanguage() + ".html"))) {
+				enabled |= true;
 			} else {
-				// Nothing found
-				enabled &= false;
-			}
+				for (String locale : i18nModule.getEnabledLanguageKeys()) {
+					if (checkContent(impressumDir.resolve("index_" + locale + ".html"))) {
+						enabled |= true;
+						break;
+					}
+				}
+			} 
+				
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_spring/impressumContext.xml b/src/main/java/org/olat/core/commons/controllers/impressum/_spring/impressumContext.xml
index f3540ec0a13..992359cb880 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/_spring/impressumContext.xml
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/_spring/impressumContext.xml
@@ -6,6 +6,7 @@
 
 	<bean class="org.olat.core.commons.controllers.impressum.ImpressumExtension" init-method="initExtensionPoints">
 		<constructor-arg index="0" ref="impressumModule" />
+		<constructor-arg index="1" ref="i18nModule" />
 		<property name="actionController">	
 			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
 				<property name="className" value="org.olat.core.commons.controllers.impressum.ImpressumController"/>
@@ -22,6 +23,7 @@
 	
 	<bean class="org.olat.core.commons.controllers.impressum.TermsOfUseExtension" init-method="initExtensionPoints">
 		<constructor-arg index="0" ref="impressumModule" />
+		<constructor-arg index="1" ref="i18nModule" />
 		<property name="actionController">	
 			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
 				<property name="className" value="org.olat.core.commons.controllers.impressum.TermsOfUseController"/>
@@ -38,6 +40,7 @@
 	
 	<bean class="org.olat.core.commons.controllers.impressum.PrivacyPolicyExtension" init-method="initExtensionPoints">
 		<constructor-arg index="0" ref="impressumModule" />
+		<constructor-arg index="1" ref="i18nModule" />
 		<property name="actionController">	
 			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
 				<property name="className" value="org.olat.core.commons.controllers.impressum.PrivacyPolicyController"/>
@@ -54,6 +57,7 @@
 	
 	<bean class="org.olat.core.commons.controllers.impressum.EmptyImpressumExtension" init-method="initExtensionPoints">
 		<constructor-arg index="0" ref="impressumModule" />
+		<constructor-arg index="1" ref="i18nModule" />
 		<property name="actionController">	
 			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
 				<property name="className" value="org.olat.core.commons.controllers.impressum.EmptyImpressumController"/>
-- 
GitLab