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