From 12d47a26088104166b67c8ccd5b78a22c9b31516 Mon Sep 17 00:00:00 2001 From: Thorsten Marx Date: Tue, 24 Mar 2026 10:48:53 +0100 Subject: [PATCH] template function to encode uri params --- .../cms/templates/DefaultTemplate.java | 2 + .../functions/impl/NodeMetaFunction.java | 9 --- .../functions/impl/UriParamFunction.java | 59 +++++++++++++++++++ 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 cms-templates/src/main/java/com/condation/cms/templates/functions/impl/UriParamFunction.java diff --git a/cms-templates/src/main/java/com/condation/cms/templates/DefaultTemplate.java b/cms-templates/src/main/java/com/condation/cms/templates/DefaultTemplate.java index 2686b5cd..facf07f6 100644 --- a/cms-templates/src/main/java/com/condation/cms/templates/DefaultTemplate.java +++ b/cms-templates/src/main/java/com/condation/cms/templates/DefaultTemplate.java @@ -26,6 +26,7 @@ import com.condation.cms.templates.functions.impl.DateFunction; import com.condation.cms.templates.functions.impl.NodeFunction; import com.condation.cms.templates.functions.impl.NodeMetaFunction; +import com.condation.cms.templates.functions.impl.UriParamFunction; import com.condation.cms.templates.parser.ASTNode; import com.condation.cms.templates.renderer.Renderer; import com.condation.cms.templates.renderer.ScopeStack; @@ -77,6 +78,7 @@ private ScopeStack createScope (Map context, DynamicConfiguratio scope.setVariable(DateFunction.NAME, new JexlTemplateFunction(new DateFunction())); scope.setVariable(NodeFunction.NAME, new JexlTemplateFunction(new NodeFunction(dynamicConfiguration.requestContext()))); scope.setVariable(NodeMetaFunction.NAME, new JexlTemplateFunction(new NodeMetaFunction(dynamicConfiguration.requestContext()))); + scope.setVariable(UriParamFunction.NAME, new JexlTemplateFunction(new UriParamFunction())); dynamicConfiguration.templateFunctions().forEach(tf -> { scope.setVariable(tf.name(), new JexlTemplateFunction(tf)); diff --git a/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/NodeMetaFunction.java b/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/NodeMetaFunction.java index 53a00627..d8c5fb9d 100644 --- a/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/NodeMetaFunction.java +++ b/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/NodeMetaFunction.java @@ -22,16 +22,7 @@ * #L% */ -import com.condation.cms.api.db.ContentNode; -import com.condation.cms.api.db.DB; -import com.condation.cms.api.db.cms.ReadOnlyFile; -import com.condation.cms.api.feature.features.InjectorFeature; import com.condation.cms.api.request.RequestContext; -import com.condation.cms.content.ContentRenderer; -import com.condation.cms.content.Section; -import java.io.IOException; -import java.util.List; -import java.util.Map; import lombok.extern.slf4j.Slf4j; /** diff --git a/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/UriParamFunction.java b/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/UriParamFunction.java new file mode 100644 index 00000000..7f704eb2 --- /dev/null +++ b/cms-templates/src/main/java/com/condation/cms/templates/functions/impl/UriParamFunction.java @@ -0,0 +1,59 @@ +package com.condation.cms.templates.functions.impl; + +/*- + * #%L + * cms-templates + * %% + * Copyright (C) 2023 - 2026 CondationCMS + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.condation.cms.templates.functions.TemplateFunction; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import lombok.extern.slf4j.Slf4j; + +/** + * + * @author thorstenmarx + */ +@Slf4j +public class UriParamFunction implements TemplateFunction { + + public static final String NAME = "uri_param"; + + @Override + public Object invoke(Object... params) { + if (params == null || params.length == 0 || !(params[0] instanceof String)) { + return ""; + } + + return URLEncoder.encode(String.valueOf(params[0]), StandardCharsets.UTF_8) + .replace("+", "%20") // Leerzeichen als %20, nicht + + .replace("%21", "!") + .replace("%27", "'") + .replace("%28", "(") + .replace("%29", ")") + .replace("%7E", "~"); + } + + @Override + public String name() { + return NAME; + } + +}