From 18fb09d3589ddc33f628b1de177218e6eeefe09c Mon Sep 17 00:00:00 2001 From: Thorsten Marx Date: Fri, 6 Mar 2026 12:01:11 +0100 Subject: [PATCH] update global scope for macros --- .../api/feature/features/RequestFeature.java | 4 ++ .../cms/templates/tags/macro/ImportTag.java | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/cms-api/src/main/java/com/condation/cms/api/feature/features/RequestFeature.java b/cms-api/src/main/java/com/condation/cms/api/feature/features/RequestFeature.java index 8541b963c..85dbb8bd7 100644 --- a/cms-api/src/main/java/com/condation/cms/api/feature/features/RequestFeature.java +++ b/cms-api/src/main/java/com/condation/cms/api/feature/features/RequestFeature.java @@ -40,6 +40,10 @@ public record RequestFeature(String context, String uri, Map> queryParameters) { this(null, uri, queryParameters, null); } + + public boolean hasQueryParameter (String name) { + return queryParameters.containsKey(name); + } public String getQueryParameter(String name, final String defaultValue) { if (!queryParameters.containsKey(name)) { diff --git a/cms-templates/src/main/java/com/condation/cms/templates/tags/macro/ImportTag.java b/cms-templates/src/main/java/com/condation/cms/templates/tags/macro/ImportTag.java index de276f939..4bc936c3e 100644 --- a/cms-templates/src/main/java/com/condation/cms/templates/tags/macro/ImportTag.java +++ b/cms-templates/src/main/java/com/condation/cms/templates/tags/macro/ImportTag.java @@ -21,6 +21,7 @@ * . * #L% */ +import com.condation.cms.api.Constants; import com.condation.cms.templates.DefaultTemplate; import com.condation.cms.templates.Tag; import com.condation.cms.templates.exceptions.TagException; @@ -69,6 +70,9 @@ public void render(TagNode node, Renderer.Context context, Writer writer) { var template = (DefaultTemplate) context.templateEngine().getTemplate(templateString); if (template != null) { CustomScopeStack scopeStack = new CustomScopeStack(); + + copyNamespaces(scopeStack, context); + template.evaluate(scopeStack, new NullWriter(), context.dynamicConfiguration()); var namespace = new HashMap(); @@ -89,6 +93,58 @@ public void render(TagNode node, Renderer.Context context, Writer writer) { } } + private void copyNamespaces(CustomScopeStack scopeStack, Renderer.Context context) { + + var varNames = List.of( + Constants.TemplateNamespaces.CMS, + Constants.TemplateNamespaces.DEFAULT_MODULE_NAMESPACE, + Constants.TemplateNamespaces.NODE, + Constants.TemplateNamespaces.SITE, + "requestContext", + "theme", + "messages", + "PREVIEW_MODE", + "MANAGER", + "DEV_MODE", + "ENV", + "USERNAME" + ); + varNames.forEach(name -> { + var value = context.scopes().getVariable(name); + if (value.isPresent()) { + scopeStack.setVariable(name, value.get()); + } + }); + + if (context.scopes().getVariable(Constants.TemplateNamespaces.CMS).isPresent()) { + scopeStack.setVariable( + Constants.TemplateNamespaces.CMS, + context.scopes().getVariable(Constants.TemplateNamespaces.CMS).get() + ); + } + + if (context.scopes().getVariable(Constants.TemplateNamespaces.NODE).isPresent()) { + scopeStack.setVariable( + Constants.TemplateNamespaces.NODE, + context.scopes().getVariable(Constants.TemplateNamespaces.NODE).get() + ); + } + + if (context.scopes().getVariable(Constants.TemplateNamespaces.SITE).isPresent()) { + scopeStack.setVariable( + Constants.TemplateNamespaces.SITE, + context.scopes().getVariable(Constants.TemplateNamespaces.SITE).get() + ); + } + + if (context.scopes().getVariable(Constants.TemplateNamespaces.DEFAULT_MODULE_NAMESPACE).isPresent()) { + scopeStack.setVariable( + Constants.TemplateNamespaces.DEFAULT_MODULE_NAMESPACE, + context.scopes().getVariable(Constants.TemplateNamespaces.DEFAULT_MODULE_NAMESPACE).get() + ); + } + } + private class CustomScopeStack extends ScopeStack { private List macros = new ArrayList<>();