From 54ee09ae75a45fd3fa3bce6373a33c890d5ef7c1 Mon Sep 17 00:00:00 2001
From: aboeckle <alexander.boeckle@frentix.com>
Date: Fri, 17 Apr 2020 09:38:44 +0200
Subject: [PATCH] OO-4603 Fixed imprint bugs

---
 .../impressum/EmptyImpressumController.java   |  64 ++++++++++
 .../impressum/EmptyImpressumExtension.java    | 119 ++++++++++++++++++
 .../impressum/ImpressumAdminController.java   |  10 +-
 .../impressum/ImpressumExtension.java         |  48 +++++--
 .../impressum/PrivacyPolicyExtension.java     |  50 ++++++--
 .../impressum/TermsOfUseExtension.java        |  50 ++++++--
 .../impressum/_content/empty_impressum.html   |   1 +
 .../_i18n/LocalStrings_de.properties          |   3 +
 .../_i18n/LocalStrings_en.properties          |   3 +
 .../impressum/_spring/impressumContext.xml    |  16 +++
 10 files changed, 338 insertions(+), 26 deletions(-)
 create mode 100644 src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumController.java
 create mode 100644 src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java
 create mode 100644 src/main/java/org/olat/core/commons/controllers/impressum/_content/empty_impressum.html

diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumController.java b/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumController.java
new file mode 100644
index 00000000000..24abc7359f2
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumController.java
@@ -0,0 +1,64 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.commons.controllers.impressum;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.text.TextFactory;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+
+/**
+ * <h3>Description:</h3> This controller displays an impressum which it reads
+ * from an external HTML file in the <code>olatdata</code> directory.
+ * 
+ * 
+ * Initial Date: Aug 10, 2009 <br>
+ * 
+ * @author twuersch, frentix GmbH, http://www.frentix.com
+ */
+public class EmptyImpressumController extends BasicController {
+
+	private final VelocityContainer mainVc;
+	
+	public EmptyImpressumController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl);
+		
+		mainVc = createVelocityContainer("empty_impressum");
+		TextFactory.createTextComponentFromString("empty.impressum.warning", translate("empty.impressum"), "o_error", false, mainVc);
+		
+		putInitialPanel(mainVc);
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	protected void doDispose() {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
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
new file mode 100644
index 00000000000..8004ee3091f
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/EmptyImpressumExtension.java
@@ -0,0 +1,119 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.commons.controllers.impressum;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+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.vfs.LocalFileImpl;
+import org.olat.core.util.vfs.LocalFolderImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
+
+/* 
+ * Initial date: 12 Apr 2020<br>
+ * @author aboeckle, alexander.boeckle@frentix.com
+ */
+public class EmptyImpressumExtension extends GenericActionExtension {
+	
+	private final ImpressumModule impressumModule;
+	
+	private VelocityContainer vc;
+	
+	public EmptyImpressumExtension(ImpressumModule impressumModule) {
+		this.impressumModule = impressumModule;
+	}
+	
+
+	@Override
+	public Controller createController(UserRequest ureq, WindowControl wControl, Object arg) {
+		return new EmptyImpressumController(ureq, wControl);
+	}
+	
+	@Override
+	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {
+		boolean enabled = false;
+		
+		if (impressumModule.isEnabled() && !impressumModule.isContactEnabled()) {
+			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;
+			}
+		}
+		
+		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
+	}
+	
+	private boolean checkContent(VFSItem file) {
+		boolean check = false;
+		if(file instanceof VFSLeaf && file.exists() ) {
+			if(file instanceof LocalFileImpl) {
+				File f = ((LocalFileImpl)file).getBasefile();
+				try {
+					String content = FileUtils.readFileToString(f, StandardCharsets.UTF_8);
+					content = FilterFactory.getHtmlTagAndDescapingFilter().filter(content);
+					if(content.length() > 0) {
+						content = content.trim();
+					}
+					if(content.length() > 0) {
+						check = true;
+					}
+				} catch (IOException e) {
+					// Nothing to to here
+				}
+			} else {
+				check = true;
+			}
+		}
+		return check;
+	}
+}
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumAdminController.java b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumAdminController.java
index 0bef6b121d7..ce5203c1ac3 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumAdminController.java
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/ImpressumAdminController.java
@@ -212,6 +212,9 @@ public class ImpressumAdminController extends FormBasicController {
 			dataPrivacyPolicyButtons.add(group);
 		}
 		
+		uifactory.addSpacerElement("spacer", formLayout, true);
+		uifactory.addSpacerElement("spacer_line", formLayout, false);
+		
 		contactEnableEl = uifactory.addCheckboxesHorizontal("contactenable", "enable.contact", formLayout,
 				enableKeys, new String[]{ translate("enable") });
 		contactEnableEl.addActionListener(FormEvent.ONCHANGE);
@@ -223,6 +226,7 @@ public class ImpressumAdminController extends FormBasicController {
 		contactMailEl.setMandatory(contactEnabled && enabled);
 		
 		formSubmit = uifactory.addFormSubmitButton("submit", formLayout);
+		formSubmit.setVisible(contactEnabled && enabled);
 	}
 	
 	private String getTranslated(String lang) {
@@ -313,9 +317,6 @@ public class ImpressumAdminController extends FormBasicController {
 			contactMailEl.setVisible(contactEnabled);
 			contactMailEl.setMandatory(contactEnabled);
 			formSubmit.setVisible(contactEnabled);
-
-			getWindowControl().getWindowBackOffice().getWindow().setDirty(true);
-			getWindowControl().getWindowBackOffice().getChiefController().wishReload(ureq, true);
 		} else if(source instanceof FormLink) {
 			FormLink link = (FormLink)source;
 			String cmd = link.getCmd();
@@ -340,6 +341,7 @@ public class ImpressumAdminController extends FormBasicController {
 				group.getEditButton().setIconLeftCSS(null);
 				group.getDeleteButton().setVisible(false);
 			}
+			// TODO AB No dirty
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
@@ -361,6 +363,8 @@ public class ImpressumAdminController extends FormBasicController {
 				exists = checkContent(impressumDir.resolve(filePath));
 			} else if("termsofuse".equals(cmd)) {
 				exists = checkContent(termsOfUseDir.resolve(filePath));
+			} else if ("dataprivacy".equals(cmd)) {
+				exists = checkContent(dataPrivacyPolicyDir.resolve(filePath));
 			}
 			
 			if(exists) {
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 d5d51ba3970..86e954215db 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
@@ -20,12 +20,21 @@
 package org.olat.core.commons.controllers.impressum;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
+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.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.vfs.LocalFileImpl;
+import org.olat.core.util.vfs.LocalFolderImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
 
 /* 
  * Initial date: 12 Apr 2020<br>
@@ -50,20 +59,45 @@ public class ImpressumExtension extends GenericActionExtension {
 		boolean enabled = false;
 		
 		if (impressumModule.isEnabled()) {
+			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getImpressumDirectory());
 			enabled = true;
 			
-			File baseFolder = impressumModule.getImpressumDirectory();
-			if (new File(baseFolder, "index_" + ureq.getLocale().getLanguage() + ".html").exists()) {
-				enabled &= true;
-			} else if(new File (baseFolder, "index_de.html").exists()) {
-					enabled &= true;
-			} else if(new File (baseFolder, "index_en.html").exists()) {
-					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
 			} else {
+				// Nothing found
 				enabled &= false;
 			}
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
 	}
+	
+	private boolean checkContent(VFSItem file) {
+		boolean check = false;
+		if(file instanceof VFSLeaf && file.exists() ) {
+			if(file instanceof LocalFileImpl) {
+				File f = ((LocalFileImpl)file).getBasefile();
+				try {
+					String content = FileUtils.readFileToString(f, StandardCharsets.UTF_8);
+					content = FilterFactory.getHtmlTagAndDescapingFilter().filter(content);
+					if(content.length() > 0) {
+						content = content.trim();
+					}
+					if(content.length() > 0) {
+						check = true;
+					}
+				} catch (IOException e) {
+					// Nothing to to here
+				}
+			} else {
+				check = true;
+			}
+		}
+		return check;
+	}
 }
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 b47021b9b0e..e81d082b649 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
@@ -20,12 +20,21 @@
 package org.olat.core.commons.controllers.impressum;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
+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.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.vfs.LocalFileImpl;
+import org.olat.core.util.vfs.LocalFolderImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
 
 /* 
  * Initial date: 12 Apr 2020<br>
@@ -47,24 +56,49 @@ public class PrivacyPolicyExtension extends GenericActionExtension {
 	}
 
 	@Override
-	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {		
+	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {
 		boolean enabled = false;
 		
 		if (impressumModule.isEnabled()) {
+			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getPrivacyPolicyDirectory());
 			enabled = true;
 			
-			File baseFolder = impressumModule.getPrivacyPolicyDirectory();
-			if (new File(baseFolder, "index_" + ureq.getLocale().getLanguage() + ".html").exists()) {
-				enabled &= true;
-			} else if(new File (baseFolder, "index_de.html").exists()) {
-					enabled &= true;
-			} else if(new File (baseFolder, "index_en.html").exists()) {
-					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
 			} else {
+				// Nothing found
 				enabled &= false;
 			}
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
 	}
+	
+	private boolean checkContent(VFSItem file) {
+		boolean check = false;
+		if(file instanceof VFSLeaf && file.exists() ) {
+			if(file instanceof LocalFileImpl) {
+				File f = ((LocalFileImpl)file).getBasefile();
+				try {
+					String content = FileUtils.readFileToString(f, StandardCharsets.UTF_8);
+					content = FilterFactory.getHtmlTagAndDescapingFilter().filter(content);
+					if(content.length() > 0) {
+						content = content.trim();
+					}
+					if(content.length() > 0) {
+						check = true;
+					}
+				} catch (IOException e) {
+					// Nothing to to here
+				}
+			} else {
+				check = true;
+			}
+		}
+		return check;
+	}
 }
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 563f4a1e38d..d946ca7e992 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
@@ -20,12 +20,21 @@
 package org.olat.core.commons.controllers.impressum;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
+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.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.filter.FilterFactory;
+import org.olat.core.util.vfs.LocalFileImpl;
+import org.olat.core.util.vfs.LocalFolderImpl;
+import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
+import org.olat.core.util.vfs.VFSLeaf;
 
 /* 
  * Initial date: 12 Apr 2020<br>
@@ -47,24 +56,49 @@ public class TermsOfUseExtension extends GenericActionExtension {
 	}
 
 	@Override
-	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {		
+	public ExtensionElement getExtensionFor(String extensionPoint, UserRequest ureq) {
 		boolean enabled = false;
 		
 		if (impressumModule.isEnabled()) {
+			VFSContainer impressumDir = new LocalFolderImpl(impressumModule.getTermsOfUseDirectory());
 			enabled = true;
 			
-			File baseFolder = impressumModule.getImpressumDirectory();
-			if (new File(baseFolder, "index_" + ureq.getLocale().getLanguage() + ".html").exists()) {
-				enabled &= true;
-			} else if(new File (baseFolder, "index_de.html").exists()) {
-					enabled &= true;
-			} else if(new File (baseFolder, "index_en.html").exists()) {
-					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
 			} else {
+				// Nothing found
 				enabled &= false;
 			}
 		}
 		
 		return enabled ? super.getExtensionFor(extensionPoint, ureq) : null;
 	}
+	
+	private boolean checkContent(VFSItem file) {
+		boolean check = false;
+		if(file instanceof VFSLeaf && file.exists() ) {
+			if(file instanceof LocalFileImpl) {
+				File f = ((LocalFileImpl)file).getBasefile();
+				try {
+					String content = FileUtils.readFileToString(f, StandardCharsets.UTF_8);
+					content = FilterFactory.getHtmlTagAndDescapingFilter().filter(content);
+					if(content.length() > 0) {
+						content = content.trim();
+					}
+					if(content.length() > 0) {
+						check = true;
+					}
+				} catch (IOException e) {
+					// Nothing to to here
+				}
+			} else {
+				check = true;
+			}
+		}
+		return check;
+	}
 }
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_content/empty_impressum.html b/src/main/java/org/olat/core/commons/controllers/impressum/_content/empty_impressum.html
new file mode 100644
index 00000000000..4674e601d2c
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/_content/empty_impressum.html
@@ -0,0 +1 @@
+$r.render("empty.impressum.warning")
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_de.properties
index 18f2d07aed1..68ab0d4711f 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_de.properties
@@ -6,6 +6,9 @@ ContactController.menu.title=Kontakt
 contactform.intro=Kontaktformular f\u00fcr allgemeine Anfragen.
 contactform.title=Kontakt
 dataprivacy.file=Datenschutz Erkl\u00E4rung
+EmptyImpressumController.menu.title=Impressum
+EmptyImpressumController.menu.title.alt=Impressum
+empty.impressum=Das Impressum ist falsch konfiguriert. Bitte kontaktieren Sie den Administrator.
 enable.contact=Kontaktformular
 enable.impressum=Impressum einschalten
 enable=ein
diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_en.properties
index f69cac98b98..188240b4405 100644
--- a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_en.properties
@@ -6,6 +6,9 @@ ContactController.menu.title=Contact
 contactform.intro=Contact form for general requests.
 contactform.title=Contact
 dataprivacy.file=Privacy policy
+EmptyImpressumController.menu.title=Imprint
+EmptyImpressumController.menu.title.alt=Imprint
+empty.impressum=The imprint is configured incorrectly. Please contact the administrator.
 enable.contact=Contact form
 enable.impressum=Enable imprint
 enable=on
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 cc8cd7d493e..f3540ec0a13 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
@@ -52,6 +52,22 @@
 		<property name="order" value="703"/>
 	</bean>
 	
+	<bean class="org.olat.core.commons.controllers.impressum.EmptyImpressumExtension" init-method="initExtensionPoints">
+		<constructor-arg index="0" ref="impressumModule" />
+		<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"/>
+			</bean>
+		</property>
+		<property name="extensionPoints">
+			<list>	
+				<value>org.olat.core.commons.controllers.impressum.ImpressumMainController</value>
+				<value>org.olat.core.commons.controllers.impressum.ImpressumDmzMainController</value>
+			</list>
+		</property>
+		<property name="order" value="705"/>
+	</bean>
+	
 	<bean class="org.olat.core.commons.controllers.impressum.ContactExtension" init-method="initExtensionPoints">
 		<constructor-arg index="0" ref="impressumModule" />
 		<property name="actionController">	
-- 
GitLab