diff --git a/CHANGELOG.md b/CHANGELOG.md index bcb581a36..f63369517 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ see wiki for more information: [wiki](https://github.com/thmarx/cms/wiki) * **FEATURE** add system module for default markdown renderer [#394](https://github.com/CondationCMS/cms-server/pull/394) * **BUG** Fix request context issues [#392](https://github.com/CondationCMS/cms-server/pull/392) * **BUG** Missing template filter (date) added [#397](https://github.com/CondationCMS/cms-server/pull/397) +* **FEATURE** Add variables to request context to share data in request scope [#403](https://github.com/CondationCMS/cms-server/pull/403) +* **FEATURE** use request variables in expression context [#404](https://github.com/CondationCMS/cms-server/pull/404) ## 7.6.3 diff --git a/cms-content/src/main/java/com/condation/cms/content/shortcodes/TagParser.java b/cms-content/src/main/java/com/condation/cms/content/shortcodes/TagParser.java index 30d425873..e7f16aac3 100644 --- a/cms-content/src/main/java/com/condation/cms/content/shortcodes/TagParser.java +++ b/cms-content/src/main/java/com/condation/cms/content/shortcodes/TagParser.java @@ -178,13 +178,13 @@ private Parameter evaluateAttributes(Parameter rawAttributes, Map entry : rawAttributes.entrySet()) { String key = entry.getKey(); String rawValue = (String) entry.getValue(); // Rohwert als String - evaluatedAttributes.put(key, parseValue(rawValue, contextModel)); // Wert erst jetzt parsen + evaluatedAttributes.put(key, parseValue(rawValue, contextModel, requestContext)); // Wert erst jetzt parsen } return evaluatedAttributes; } // Methode zur Auswertung von Attributwerten im zweiten Schritt - private Object parseValue(String value, Map contextModel) { + private Object parseValue(String value, Map contextModel, RequestContext requestContext) { if (value.matches("\\d+")) { return Integer.valueOf(value); } else if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")) { @@ -192,8 +192,14 @@ private Object parseValue(String value, Map contextModel) { } else if (value.startsWith("${") && value.endsWith("}")) { String expressionString = value.substring(2, value.length() - 1); + var contextMap = new HashMap(); + contextMap.putAll(contextModel); + if (requestContext != null) { + contextMap.putAll(requestContext.getVariables()); + } + var expression = engine.createExpression(expressionString); - return expression.evaluate(new MapContext(contextModel)); + return expression.evaluate(new MapContext(contextMap)); } return value; }