From 01857d176a2a9a2e3816b9cbf32da0c58f6aac3d Mon Sep 17 00:00:00 2001
From: Michael Foster
Date: Thu, 19 Sep 2013 14:42:54 +1000
Subject: [PATCH 01/26] focus on quick reply textarea
---
js/quick-reply.js | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/js/quick-reply.js b/js/quick-reply.js
index 91c35222..d60a3a82 100644
--- a/js/quick-reply.js
+++ b/js/quick-reply.js
@@ -365,13 +365,19 @@
if ($(this).width() <= 800)
return;
show_quick_reply();
- $('#quick-reply textarea').focus();
if (with_link) {
- $(window).ready(function() {
+ $(document).ready(function() {
if ($('#' + id).length) {
highlightReply(id);
- $(window).scrollTop($('#' + id).offset().top);
+ $(document).scrollTop($('#' + id).offset().top);
}
+
+ // Honestly, I'm not sure why we need setTimeout() here, but it seems to work.
+ // Same for the "tmp" variable stuff you see inside here:
+ setTimeout(function() {
+ var tmp = $('#quick-reply textarea').val();
+ $('#quick-reply textarea').val('').focus().val(tmp);
+ }, 1);
});
}
});
From 9c48084f3b5064d580a5c88a6fe9170599cf8879 Mon Sep 17 00:00:00 2001
From: Michael Foster
Date: Thu, 19 Sep 2013 16:08:25 +1000
Subject: [PATCH 02/26] upgrade twig library
---
inc/lib/Twig/Autoloader.php | 0
inc/lib/Twig/Compiler.php | 5 +-
inc/lib/Twig/CompilerInterface.php | 0
inc/lib/Twig/Environment.php | 14 +++-
inc/lib/Twig/Error.php | 6 +-
inc/lib/Twig/Error/Loader.php | 0
inc/lib/Twig/Error/Runtime.php | 0
inc/lib/Twig/Error/Syntax.php | 0
inc/lib/Twig/ExistsLoaderInterface.php | 0
inc/lib/Twig/ExpressionParser.php | 83 +++++++++++--------
inc/lib/Twig/Extension.php | 0
inc/lib/Twig/Extension/Core.php | 22 ++---
inc/lib/Twig/Extension/Debug.php | 0
inc/lib/Twig/Extension/Escaper.php | 0
inc/lib/Twig/Extension/Optimizer.php | 0
inc/lib/Twig/Extension/Sandbox.php | 0
inc/lib/Twig/Extension/Staging.php | 0
inc/lib/Twig/Extension/StringLoader.php | 12 +--
inc/lib/Twig/ExtensionInterface.php | 0
inc/lib/Twig/Filter.php | 0
inc/lib/Twig/Filter/Function.php | 0
inc/lib/Twig/Filter/Method.php | 0
inc/lib/Twig/Filter/Node.php | 0
inc/lib/Twig/FilterCallableInterface.php | 0
inc/lib/Twig/FilterInterface.php | 0
inc/lib/Twig/Function.php | 0
inc/lib/Twig/Function/Function.php | 0
inc/lib/Twig/Function/Method.php | 0
inc/lib/Twig/Function/Node.php | 0
inc/lib/Twig/FunctionCallableInterface.php | 0
inc/lib/Twig/FunctionInterface.php | 0
inc/lib/Twig/Lexer.php | 0
inc/lib/Twig/LexerInterface.php | 0
inc/lib/Twig/Loader/Array.php | 7 +-
inc/lib/Twig/Loader/Chain.php | 3 +-
inc/lib/Twig/Loader/Filesystem.php | 27 +++---
inc/lib/Twig/Loader/String.php | 0
inc/lib/Twig/LoaderInterface.php | 0
inc/lib/Twig/Markup.php | 0
inc/lib/Twig/Node.php | 0
inc/lib/Twig/Node/AutoEscape.php | 0
inc/lib/Twig/Node/Block.php | 0
inc/lib/Twig/Node/BlockReference.php | 0
inc/lib/Twig/Node/Body.php | 0
inc/lib/Twig/Node/Do.php | 0
inc/lib/Twig/Node/Embed.php | 0
inc/lib/Twig/Node/Expression.php | 0
inc/lib/Twig/Node/Expression/Array.php | 0
inc/lib/Twig/Node/Expression/AssignName.php | 0
inc/lib/Twig/Node/Expression/Binary.php | 0
inc/lib/Twig/Node/Expression/Binary/Add.php | 0
inc/lib/Twig/Node/Expression/Binary/And.php | 0
.../Node/Expression/Binary/BitwiseAnd.php | 0
.../Twig/Node/Expression/Binary/BitwiseOr.php | 0
.../Node/Expression/Binary/BitwiseXor.php | 0
.../Twig/Node/Expression/Binary/Concat.php | 0
inc/lib/Twig/Node/Expression/Binary/Div.php | 0
inc/lib/Twig/Node/Expression/Binary/Equal.php | 0
.../Twig/Node/Expression/Binary/FloorDiv.php | 0
.../Twig/Node/Expression/Binary/Greater.php | 0
.../Node/Expression/Binary/GreaterEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/In.php | 0
inc/lib/Twig/Node/Expression/Binary/Less.php | 0
.../Twig/Node/Expression/Binary/LessEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/Mod.php | 0
inc/lib/Twig/Node/Expression/Binary/Mul.php | 0
.../Twig/Node/Expression/Binary/NotEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/NotIn.php | 0
inc/lib/Twig/Node/Expression/Binary/Or.php | 0
inc/lib/Twig/Node/Expression/Binary/Power.php | 0
inc/lib/Twig/Node/Expression/Binary/Range.php | 0
inc/lib/Twig/Node/Expression/Binary/Sub.php | 0
.../Twig/Node/Expression/BlockReference.php | 0
inc/lib/Twig/Node/Expression/Call.php | 6 +-
inc/lib/Twig/Node/Expression/Conditional.php | 0
inc/lib/Twig/Node/Expression/Constant.php | 0
.../Node/Expression/ExtensionReference.php | 0
inc/lib/Twig/Node/Expression/Filter.php | 0
.../Twig/Node/Expression/Filter/Default.php | 0
inc/lib/Twig/Node/Expression/Function.php | 0
inc/lib/Twig/Node/Expression/GetAttr.php | 4 +-
inc/lib/Twig/Node/Expression/MacroCall.php | 60 ++++++++++++++
inc/lib/Twig/Node/Expression/MethodCall.php | 0
inc/lib/Twig/Node/Expression/Name.php | 0
inc/lib/Twig/Node/Expression/Parent.php | 0
inc/lib/Twig/Node/Expression/TempName.php | 0
inc/lib/Twig/Node/Expression/Test.php | 0
.../Twig/Node/Expression/Test/Constant.php | 0
inc/lib/Twig/Node/Expression/Test/Defined.php | 0
.../Twig/Node/Expression/Test/Divisibleby.php | 0
inc/lib/Twig/Node/Expression/Test/Even.php | 0
inc/lib/Twig/Node/Expression/Test/Null.php | 0
inc/lib/Twig/Node/Expression/Test/Odd.php | 0
inc/lib/Twig/Node/Expression/Test/Sameas.php | 0
inc/lib/Twig/Node/Expression/Unary.php | 0
inc/lib/Twig/Node/Expression/Unary/Neg.php | 0
inc/lib/Twig/Node/Expression/Unary/Not.php | 0
inc/lib/Twig/Node/Expression/Unary/Pos.php | 0
inc/lib/Twig/Node/Flush.php | 0
inc/lib/Twig/Node/For.php | 0
inc/lib/Twig/Node/ForLoop.php | 0
inc/lib/Twig/Node/If.php | 0
inc/lib/Twig/Node/Import.php | 0
inc/lib/Twig/Node/Include.php | 0
inc/lib/Twig/Node/Macro.php | 4 +-
inc/lib/Twig/Node/Module.php | 36 +++++++-
inc/lib/Twig/Node/Print.php | 0
inc/lib/Twig/Node/Sandbox.php | 0
inc/lib/Twig/Node/SandboxedModule.php | 0
inc/lib/Twig/Node/SandboxedPrint.php | 0
inc/lib/Twig/Node/Set.php | 0
inc/lib/Twig/Node/SetTemp.php | 0
inc/lib/Twig/Node/Spaceless.php | 0
inc/lib/Twig/Node/Text.php | 0
inc/lib/Twig/NodeInterface.php | 0
inc/lib/Twig/NodeOutputInterface.php | 0
inc/lib/Twig/NodeTraverser.php | 0
inc/lib/Twig/NodeVisitor/Escaper.php | 0
inc/lib/Twig/NodeVisitor/Optimizer.php | 0
inc/lib/Twig/NodeVisitor/SafeAnalysis.php | 2 +
inc/lib/Twig/NodeVisitor/Sandbox.php | 0
inc/lib/Twig/NodeVisitorInterface.php | 0
inc/lib/Twig/Parser.php | 2 +-
inc/lib/Twig/ParserInterface.php | 0
inc/lib/Twig/Sandbox/SecurityError.php | 0
inc/lib/Twig/Sandbox/SecurityPolicy.php | 0
.../Twig/Sandbox/SecurityPolicyInterface.php | 0
inc/lib/Twig/SimpleFilter.php | 0
inc/lib/Twig/SimpleFunction.php | 0
inc/lib/Twig/SimpleTest.php | 0
inc/lib/Twig/Template.php | 74 +++++++++++++++--
inc/lib/Twig/TemplateInterface.php | 0
inc/lib/Twig/Test.php | 0
inc/lib/Twig/Test/Function.php | 0
inc/lib/Twig/Test/IntegrationTestCase.php | 0
inc/lib/Twig/Test/Method.php | 0
inc/lib/Twig/Test/Node.php | 0
inc/lib/Twig/Test/NodeTestCase.php | 0
inc/lib/Twig/TestCallableInterface.php | 0
inc/lib/Twig/TestInterface.php | 0
inc/lib/Twig/Token.php | 0
inc/lib/Twig/TokenParser.php | 0
inc/lib/Twig/TokenParser/AutoEscape.php | 0
inc/lib/Twig/TokenParser/Block.php | 0
inc/lib/Twig/TokenParser/Do.php | 0
inc/lib/Twig/TokenParser/Embed.php | 0
inc/lib/Twig/TokenParser/Extends.php | 0
inc/lib/Twig/TokenParser/Filter.php | 0
inc/lib/Twig/TokenParser/Flush.php | 0
inc/lib/Twig/TokenParser/For.php | 0
inc/lib/Twig/TokenParser/From.php | 2 +-
inc/lib/Twig/TokenParser/If.php | 0
inc/lib/Twig/TokenParser/Import.php | 0
inc/lib/Twig/TokenParser/Include.php | 0
inc/lib/Twig/TokenParser/Macro.php | 0
inc/lib/Twig/TokenParser/Sandbox.php | 0
inc/lib/Twig/TokenParser/Set.php | 0
inc/lib/Twig/TokenParser/Spaceless.php | 0
inc/lib/Twig/TokenParser/Use.php | 0
inc/lib/Twig/TokenParserBroker.php | 0
inc/lib/Twig/TokenParserBrokerInterface.php | 0
inc/lib/Twig/TokenParserInterface.php | 0
inc/lib/Twig/TokenStream.php | 0
163 files changed, 275 insertions(+), 94 deletions(-)
mode change 100644 => 100755 inc/lib/Twig/Autoloader.php
mode change 100644 => 100755 inc/lib/Twig/Compiler.php
mode change 100644 => 100755 inc/lib/Twig/CompilerInterface.php
mode change 100644 => 100755 inc/lib/Twig/Environment.php
mode change 100644 => 100755 inc/lib/Twig/Error.php
mode change 100644 => 100755 inc/lib/Twig/Error/Loader.php
mode change 100644 => 100755 inc/lib/Twig/Error/Runtime.php
mode change 100644 => 100755 inc/lib/Twig/Error/Syntax.php
mode change 100644 => 100755 inc/lib/Twig/ExistsLoaderInterface.php
mode change 100644 => 100755 inc/lib/Twig/ExpressionParser.php
mode change 100644 => 100755 inc/lib/Twig/Extension.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Core.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Debug.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Escaper.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Optimizer.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Sandbox.php
mode change 100644 => 100755 inc/lib/Twig/Extension/Staging.php
mode change 100644 => 100755 inc/lib/Twig/Extension/StringLoader.php
mode change 100644 => 100755 inc/lib/Twig/ExtensionInterface.php
mode change 100644 => 100755 inc/lib/Twig/Filter.php
mode change 100644 => 100755 inc/lib/Twig/Filter/Function.php
mode change 100644 => 100755 inc/lib/Twig/Filter/Method.php
mode change 100644 => 100755 inc/lib/Twig/Filter/Node.php
mode change 100644 => 100755 inc/lib/Twig/FilterCallableInterface.php
mode change 100644 => 100755 inc/lib/Twig/FilterInterface.php
mode change 100644 => 100755 inc/lib/Twig/Function.php
mode change 100644 => 100755 inc/lib/Twig/Function/Function.php
mode change 100644 => 100755 inc/lib/Twig/Function/Method.php
mode change 100644 => 100755 inc/lib/Twig/Function/Node.php
mode change 100644 => 100755 inc/lib/Twig/FunctionCallableInterface.php
mode change 100644 => 100755 inc/lib/Twig/FunctionInterface.php
mode change 100644 => 100755 inc/lib/Twig/Lexer.php
mode change 100644 => 100755 inc/lib/Twig/LexerInterface.php
mode change 100644 => 100755 inc/lib/Twig/Loader/Array.php
mode change 100644 => 100755 inc/lib/Twig/Loader/Chain.php
mode change 100644 => 100755 inc/lib/Twig/Loader/Filesystem.php
mode change 100644 => 100755 inc/lib/Twig/Loader/String.php
mode change 100644 => 100755 inc/lib/Twig/LoaderInterface.php
mode change 100644 => 100755 inc/lib/Twig/Markup.php
mode change 100644 => 100755 inc/lib/Twig/Node.php
mode change 100644 => 100755 inc/lib/Twig/Node/AutoEscape.php
mode change 100644 => 100755 inc/lib/Twig/Node/Block.php
mode change 100644 => 100755 inc/lib/Twig/Node/BlockReference.php
mode change 100644 => 100755 inc/lib/Twig/Node/Body.php
mode change 100644 => 100755 inc/lib/Twig/Node/Do.php
mode change 100644 => 100755 inc/lib/Twig/Node/Embed.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Array.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/AssignName.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Add.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/And.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Concat.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Div.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Equal.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/FloorDiv.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Greater.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/In.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Less.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/LessEqual.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Mod.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Mul.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/NotEqual.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/NotIn.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Or.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Power.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Range.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Binary/Sub.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/BlockReference.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Call.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Conditional.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Constant.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/ExtensionReference.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Filter.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Filter/Default.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Function.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/GetAttr.php
create mode 100755 inc/lib/Twig/Node/Expression/MacroCall.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/MethodCall.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Name.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Parent.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/TempName.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Constant.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Defined.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Divisibleby.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Even.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Null.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Odd.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Test/Sameas.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Unary.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Unary/Neg.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Unary/Not.php
mode change 100644 => 100755 inc/lib/Twig/Node/Expression/Unary/Pos.php
mode change 100644 => 100755 inc/lib/Twig/Node/Flush.php
mode change 100644 => 100755 inc/lib/Twig/Node/For.php
mode change 100644 => 100755 inc/lib/Twig/Node/ForLoop.php
mode change 100644 => 100755 inc/lib/Twig/Node/If.php
mode change 100644 => 100755 inc/lib/Twig/Node/Import.php
mode change 100644 => 100755 inc/lib/Twig/Node/Include.php
mode change 100644 => 100755 inc/lib/Twig/Node/Macro.php
mode change 100644 => 100755 inc/lib/Twig/Node/Module.php
mode change 100644 => 100755 inc/lib/Twig/Node/Print.php
mode change 100644 => 100755 inc/lib/Twig/Node/Sandbox.php
mode change 100644 => 100755 inc/lib/Twig/Node/SandboxedModule.php
mode change 100644 => 100755 inc/lib/Twig/Node/SandboxedPrint.php
mode change 100644 => 100755 inc/lib/Twig/Node/Set.php
mode change 100644 => 100755 inc/lib/Twig/Node/SetTemp.php
mode change 100644 => 100755 inc/lib/Twig/Node/Spaceless.php
mode change 100644 => 100755 inc/lib/Twig/Node/Text.php
mode change 100644 => 100755 inc/lib/Twig/NodeInterface.php
mode change 100644 => 100755 inc/lib/Twig/NodeOutputInterface.php
mode change 100644 => 100755 inc/lib/Twig/NodeTraverser.php
mode change 100644 => 100755 inc/lib/Twig/NodeVisitor/Escaper.php
mode change 100644 => 100755 inc/lib/Twig/NodeVisitor/Optimizer.php
mode change 100644 => 100755 inc/lib/Twig/NodeVisitor/SafeAnalysis.php
mode change 100644 => 100755 inc/lib/Twig/NodeVisitor/Sandbox.php
mode change 100644 => 100755 inc/lib/Twig/NodeVisitorInterface.php
mode change 100644 => 100755 inc/lib/Twig/Parser.php
mode change 100644 => 100755 inc/lib/Twig/ParserInterface.php
mode change 100644 => 100755 inc/lib/Twig/Sandbox/SecurityError.php
mode change 100644 => 100755 inc/lib/Twig/Sandbox/SecurityPolicy.php
mode change 100644 => 100755 inc/lib/Twig/Sandbox/SecurityPolicyInterface.php
mode change 100644 => 100755 inc/lib/Twig/SimpleFilter.php
mode change 100644 => 100755 inc/lib/Twig/SimpleFunction.php
mode change 100644 => 100755 inc/lib/Twig/SimpleTest.php
mode change 100644 => 100755 inc/lib/Twig/Template.php
mode change 100644 => 100755 inc/lib/Twig/TemplateInterface.php
mode change 100644 => 100755 inc/lib/Twig/Test.php
mode change 100644 => 100755 inc/lib/Twig/Test/Function.php
mode change 100644 => 100755 inc/lib/Twig/Test/IntegrationTestCase.php
mode change 100644 => 100755 inc/lib/Twig/Test/Method.php
mode change 100644 => 100755 inc/lib/Twig/Test/Node.php
mode change 100644 => 100755 inc/lib/Twig/Test/NodeTestCase.php
mode change 100644 => 100755 inc/lib/Twig/TestCallableInterface.php
mode change 100644 => 100755 inc/lib/Twig/TestInterface.php
mode change 100644 => 100755 inc/lib/Twig/Token.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/AutoEscape.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Block.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Do.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Embed.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Extends.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Filter.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Flush.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/For.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/From.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/If.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Import.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Include.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Macro.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Sandbox.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Set.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Spaceless.php
mode change 100644 => 100755 inc/lib/Twig/TokenParser/Use.php
mode change 100644 => 100755 inc/lib/Twig/TokenParserBroker.php
mode change 100644 => 100755 inc/lib/Twig/TokenParserBrokerInterface.php
mode change 100644 => 100755 inc/lib/Twig/TokenParserInterface.php
mode change 100644 => 100755 inc/lib/Twig/TokenStream.php
diff --git a/inc/lib/Twig/Autoloader.php b/inc/lib/Twig/Autoloader.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Compiler.php b/inc/lib/Twig/Compiler.php
old mode 100644
new mode 100755
index 99aecbcc..b80210b1
--- a/inc/lib/Twig/Compiler.php
+++ b/inc/lib/Twig/Compiler.php
@@ -180,11 +180,12 @@ class Twig_Compiler implements Twig_CompilerInterface
$this->raw($value ? 'true' : 'false');
} elseif (is_array($value)) {
$this->raw('array(');
- $i = 0;
+ $first = true;
foreach ($value as $key => $value) {
- if ($i++) {
+ if (!$first) {
$this->raw(', ');
}
+ $first = false;
$this->repr($key);
$this->raw(' => ');
$this->repr($value);
diff --git a/inc/lib/Twig/CompilerInterface.php b/inc/lib/Twig/CompilerInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Environment.php b/inc/lib/Twig/Environment.php
old mode 100644
new mode 100755
index 3afa73d6..09ea4a25
--- a/inc/lib/Twig/Environment.php
+++ b/inc/lib/Twig/Environment.php
@@ -16,7 +16,7 @@
*/
class Twig_Environment
{
- const VERSION = '1.13.1';
+ const VERSION = '1.14.0-DEV';
protected $charset;
protected $loader;
@@ -44,6 +44,7 @@ class Twig_Environment
protected $functionCallbacks;
protected $filterCallbacks;
protected $staging;
+ protected $templateClasses;
/**
* Constructor.
@@ -107,6 +108,7 @@ class Twig_Environment
$this->setCache($options['cache']);
$this->functionCallbacks = array();
$this->filterCallbacks = array();
+ $this->templateClasses = array();
$this->addExtension(new Twig_Extension_Core());
$this->addExtension(new Twig_Extension_Escaper($options['autoescape']));
@@ -262,7 +264,13 @@ class Twig_Environment
*/
public function getTemplateClass($name, $index = null)
{
- return $this->templateClassPrefix.md5($this->getLoader()->getCacheKey($name)).(null === $index ? '' : '_'.$index);
+ $suffix = null === $index ? '' : '_'.$index;
+ $cls = $name.$suffix;
+ if (isset($this->templateClasses[$cls])) {
+ return $this->templateClasses[$cls];
+ }
+
+ return $this->templateClasses[$cls] = $this->templateClassPrefix.hash('sha256', $this->getLoader()->getCacheKey($name)).$suffix;
}
/**
@@ -728,7 +736,7 @@ class Twig_Environment
public function addNodeVisitor(Twig_NodeVisitorInterface $visitor)
{
if ($this->extensionInitialized) {
- throw new LogicException('Unable to add a node visitor as extensions have already been initialized.', $extension->getName());
+ throw new LogicException('Unable to add a node visitor as extensions have already been initialized.');
}
$this->staging->addNodeVisitor($visitor);
diff --git a/inc/lib/Twig/Error.php b/inc/lib/Twig/Error.php
old mode 100644
new mode 100755
index 72d91a98..61a4cfa0
--- a/inc/lib/Twig/Error.php
+++ b/inc/lib/Twig/Error.php
@@ -186,6 +186,7 @@ class Twig_Error extends Exception
protected function guessTemplateInfo()
{
$template = null;
+ $templateClass = null;
if (version_compare(phpversion(), '5.3.6', '>=')) {
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT);
@@ -195,8 +196,11 @@ class Twig_Error extends Exception
foreach ($backtrace as $trace) {
if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) {
- if (null === $this->filename || $this->filename == $trace['object']->getTemplateName()) {
+ $currentClass = get_class($trace['object']);
+ $isEmbedContainer = 0 === strpos($templateClass, $currentClass);
+ if (null === $this->filename || ($this->filename == $trace['object']->getTemplateName() && !$isEmbedContainer)) {
$template = $trace['object'];
+ $templateClass = get_class($trace['object']);
}
}
}
diff --git a/inc/lib/Twig/Error/Loader.php b/inc/lib/Twig/Error/Loader.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Error/Runtime.php b/inc/lib/Twig/Error/Runtime.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Error/Syntax.php b/inc/lib/Twig/Error/Syntax.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/ExistsLoaderInterface.php b/inc/lib/Twig/ExistsLoaderInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/ExpressionParser.php b/inc/lib/Twig/ExpressionParser.php
old mode 100644
new mode 100755
index 9cf19344..9deab09c
--- a/inc/lib/Twig/ExpressionParser.php
+++ b/inc/lib/Twig/ExpressionParser.php
@@ -316,22 +316,22 @@ class Twig_ExpressionParser
throw new Twig_Error_Syntax('The "attribute" function takes at least two arguments (the variable and the attributes)', $line, $this->parser->getFilename());
}
- return new Twig_Node_Expression_GetAttr($args->getNode(0), $args->getNode(1), count($args) > 2 ? $args->getNode(2) : new Twig_Node_Expression_Array(array(), $line), Twig_TemplateInterface::ANY_CALL, $line);
+ return new Twig_Node_Expression_GetAttr($args->getNode(0), $args->getNode(1), count($args) > 2 ? $args->getNode(2) : new Twig_Node_Expression_Array(array(), $line), Twig_Template::ANY_CALL, $line);
default:
- if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) {
- $arguments = new Twig_Node_Expression_Array(array(), $line);
- foreach ($this->parseArguments() as $n) {
- $arguments->addElement($n);
- }
-
- $node = new Twig_Node_Expression_MethodCall($alias['node'], $alias['name'], $arguments, $line);
- $node->setAttribute('safe', true);
-
- return $node;
+ $args = $this->parseArguments(true);
+ if (null !== $alias = $this->parser->getImportedSymbol('macro', $name)) {
+ return new Twig_Node_Expression_MacroCall($alias['node'], $alias['name'], $this->createArrayFromArguments($args), $line);
}
- $args = $this->parseArguments(true);
- $class = $this->getFunctionNodeClass($name, $line);
+ try {
+ $class = $this->getFunctionNodeClass($name, $line);
+ } catch (Twig_Error_Syntax $e) {
+ if (!$this->parser->hasMacro($name)) {
+ throw $e;
+ }
+
+ return new Twig_Node_Expression_MacroCall(new Twig_Node_Expression_Name('_self', $line), $name, $this->createArrayFromArguments($args), $line);
+ }
return new $class($name, $args, $line);
}
@@ -343,7 +343,7 @@ class Twig_ExpressionParser
$token = $stream->next();
$lineno = $token->getLine();
$arguments = new Twig_Node_Expression_Array(array(), $lineno);
- $type = Twig_TemplateInterface::ANY_CALL;
+ $type = Twig_Template::ANY_CALL;
if ($token->getValue() == '.') {
$token = $stream->next();
if (
@@ -354,13 +354,6 @@ class Twig_ExpressionParser
($token->getType() == Twig_Token::OPERATOR_TYPE && preg_match(Twig_Lexer::REGEX_NAME, $token->getValue()))
) {
$arg = new Twig_Node_Expression_Constant($token->getValue(), $lineno);
-
- if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
- $type = Twig_TemplateInterface::METHOD_CALL;
- foreach ($this->parseArguments() as $n) {
- $arguments->addElement($n);
- }
- }
} else {
throw new Twig_Error_Syntax('Expected name or number', $lineno, $this->parser->getFilename());
}
@@ -370,13 +363,17 @@ class Twig_ExpressionParser
throw new Twig_Error_Syntax(sprintf('Dynamic macro names are not supported (called on "%s")', $node->getAttribute('name')), $token->getLine(), $this->parser->getFilename());
}
- $node = new Twig_Node_Expression_MethodCall($node, 'get'.$arg->getAttribute('value'), $arguments, $lineno);
- $node->setAttribute('safe', true);
+ $arguments = $this->createArrayFromArguments($this->parseArguments(true));
- return $node;
+ return new Twig_Node_Expression_MacroCall($node, $arg->getAttribute('value'), $arguments, $lineno);
+ }
+
+ if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) {
+ $type = Twig_Template::METHOD_CALL;
+ $arguments = $this->createArrayFromArguments($this->parseArguments());
}
} else {
- $type = Twig_TemplateInterface::ARRAY_CALL;
+ $type = Twig_Template::ARRAY_CALL;
// slice?
$slice = false;
@@ -452,6 +449,8 @@ class Twig_ExpressionParser
*
* @param Boolean $namedArguments Whether to allow named arguments or not
* @param Boolean $definition Whether we are parsing arguments for a function definition
+ *
+ * @return Twig_Node
*/
public function parseArguments($namedArguments = false, $definition = false)
{
@@ -483,25 +482,26 @@ class Twig_ExpressionParser
$value = $this->parsePrimaryExpression();
if (!$this->checkConstantExpression($value)) {
- throw new Twig_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename());
+ throw new Twig_Error_Syntax('A default value for an argument must be a constant (a boolean, a string, a number, or an array).', $token->getLine(), $this->parser->getFilename());
}
} else {
$value = $this->parseExpression();
}
}
- if ($definition) {
- if (null === $name) {
- $name = $value->getAttribute('name');
- $value = new Twig_Node_Expression_Constant(null, $this->parser->getCurrentToken()->getLine());
- }
- $args[$name] = $value;
+ if ($definition && null === $name) {
+ $name = $value->getAttribute('name');
+ $value = new Twig_Node_Expression_Constant(null, $this->parser->getCurrentToken()->getLine());
+ }
+
+ if (null === $name) {
+ $args[] = $value;
} else {
- if (null === $name) {
- $args[] = $value;
- } else {
- $args[$name] = $value;
+ if ($definition && isset($args[$name])) {
+ throw new Twig_Error_Syntax(sprintf('Arguments cannot contain the same argument name more than once ("%s" is defined twice).', $name), $token->getLine(), $this->parser->getFilename());
}
+
+ $args[$name] = $value;
}
}
$stream->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis');
@@ -597,4 +597,15 @@ class Twig_ExpressionParser
return true;
}
+
+ private function createArrayFromArguments(Twig_Node $arguments, $line = null)
+ {
+ $line = null === $line ? $arguments->getLine() : $line;
+ $array = new Twig_Node_Expression_Array(array(), $line);
+ foreach ($arguments as $key => $value) {
+ $array->addElement($value, new Twig_Node_Expression_Constant($key, $value->getLine()));
+ }
+
+ return $array;
+ }
}
diff --git a/inc/lib/Twig/Extension.php b/inc/lib/Twig/Extension.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/Core.php b/inc/lib/Twig/Extension/Core.php
old mode 100644
new mode 100755
index e68687b4..60fe1936
--- a/inc/lib/Twig/Extension/Core.php
+++ b/inc/lib/Twig/Extension/Core.php
@@ -348,7 +348,7 @@ function twig_random(Twig_Environment $env, $values = null)
return $values < 0 ? mt_rand($values, 0) : mt_rand(0, $values);
}
- if ($values instanceof Traversable) {
+ if (is_object($values) && $values instanceof Traversable) {
$values = iterator_to_array($values);
} elseif (is_string($values)) {
if ('' === $values) {
@@ -620,7 +620,7 @@ function twig_array_merge($arr1, $arr2)
*/
function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false)
{
- if ($item instanceof Traversable) {
+ if (is_object($item) && $item instanceof Traversable) {
$item = iterator_to_array($item, false);
}
@@ -687,7 +687,7 @@ function twig_last(Twig_Environment $env, $item)
*/
function twig_join_filter($value, $glue = '')
{
- if ($value instanceof Traversable) {
+ if (is_object($value) && $value instanceof Traversable) {
$value = iterator_to_array($value, false);
}
@@ -829,7 +829,7 @@ function twig_in_filter($value, $compare)
}
return false !== strpos($compare, (string) $value);
- } elseif ($compare instanceof Traversable) {
+ } elseif (is_object($compare) && $compare instanceof Traversable) {
return in_array($value, iterator_to_array($compare, false), is_object($value));
}
@@ -1329,13 +1329,13 @@ function twig_constant($constant, $object = null)
*
* @param array $items An array of items
* @param integer $size The size of the batch
- * @param string $fill A string to fill missing items
+ * @param mixed $fill A value used to fill missing items
*
* @return array
*/
function twig_array_batch($items, $size, $fill = null)
{
- if ($items instanceof Traversable) {
+ if (is_object($items) && $items instanceof Traversable) {
$items = iterator_to_array($items, false);
}
@@ -1345,10 +1345,12 @@ function twig_array_batch($items, $size, $fill = null)
if (null !== $fill) {
$last = count($result) - 1;
- $result[$last] = array_merge(
- $result[$last],
- array_fill(0, $size - count($result[$last]), $fill)
- );
+ if ($fillCount = $size - count($result[$last])) {
+ $result[$last] = array_merge(
+ $result[$last],
+ array_fill(0, $fillCount, $fill)
+ );
+ }
}
return $result;
diff --git a/inc/lib/Twig/Extension/Debug.php b/inc/lib/Twig/Extension/Debug.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/Escaper.php b/inc/lib/Twig/Extension/Escaper.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/Optimizer.php b/inc/lib/Twig/Extension/Optimizer.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/Sandbox.php b/inc/lib/Twig/Extension/Sandbox.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/Staging.php b/inc/lib/Twig/Extension/Staging.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Extension/StringLoader.php b/inc/lib/Twig/Extension/StringLoader.php
old mode 100644
new mode 100755
index 20f3f994..5e1a60d0
--- a/inc/lib/Twig/Extension/StringLoader.php
+++ b/inc/lib/Twig/Extension/StringLoader.php
@@ -43,16 +43,16 @@ class Twig_Extension_StringLoader extends Twig_Extension
*/
function twig_template_from_string(Twig_Environment $env, $template)
{
- static $loader;
+ $name = sprintf('__string_template__%s', hash('sha256', uniqid(mt_rand(), true), false));
- if (null === $loader) {
- $loader = new Twig_Loader_String();
- }
+ $loader = new Twig_Loader_Chain(array(
+ new Twig_Loader_Array(array($name => $template)),
+ $current = $env->getLoader(),
+ ));
- $current = $env->getLoader();
$env->setLoader($loader);
try {
- $template = $env->loadTemplate($template);
+ $template = $env->loadTemplate($name);
} catch (Exception $e) {
$env->setLoader($current);
diff --git a/inc/lib/Twig/ExtensionInterface.php b/inc/lib/Twig/ExtensionInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Filter.php b/inc/lib/Twig/Filter.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Filter/Function.php b/inc/lib/Twig/Filter/Function.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Filter/Method.php b/inc/lib/Twig/Filter/Method.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Filter/Node.php b/inc/lib/Twig/Filter/Node.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/FilterCallableInterface.php b/inc/lib/Twig/FilterCallableInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/FilterInterface.php b/inc/lib/Twig/FilterInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Function.php b/inc/lib/Twig/Function.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Function/Function.php b/inc/lib/Twig/Function/Function.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Function/Method.php b/inc/lib/Twig/Function/Method.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Function/Node.php b/inc/lib/Twig/Function/Node.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/FunctionCallableInterface.php b/inc/lib/Twig/FunctionCallableInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/FunctionInterface.php b/inc/lib/Twig/FunctionInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Lexer.php b/inc/lib/Twig/Lexer.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/LexerInterface.php b/inc/lib/Twig/LexerInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Loader/Array.php b/inc/lib/Twig/Loader/Array.php
old mode 100644
new mode 100755
index 89087aea..ac561048
--- a/inc/lib/Twig/Loader/Array.php
+++ b/inc/lib/Twig/Loader/Array.php
@@ -21,7 +21,7 @@
*/
class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
{
- protected $templates;
+ protected $templates = array();
/**
* Constructor.
@@ -32,10 +32,7 @@ class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterf
*/
public function __construct(array $templates)
{
- $this->templates = array();
- foreach ($templates as $name => $template) {
- $this->templates[$name] = $template;
- }
+ $this->templates = $templates;
}
/**
diff --git a/inc/lib/Twig/Loader/Chain.php b/inc/lib/Twig/Loader/Chain.php
old mode 100644
new mode 100755
index 1f1cf065..7919eda6
--- a/inc/lib/Twig/Loader/Chain.php
+++ b/inc/lib/Twig/Loader/Chain.php
@@ -17,7 +17,7 @@
class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
{
private $hasSourceCache = array();
- protected $loaders;
+ protected $loaders = array();
/**
* Constructor.
@@ -26,7 +26,6 @@ class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterf
*/
public function __construct(array $loaders = array())
{
- $this->loaders = array();
foreach ($loaders as $loader) {
$this->addLoader($loader);
}
diff --git a/inc/lib/Twig/Loader/Filesystem.php b/inc/lib/Twig/Loader/Filesystem.php
old mode 100644
new mode 100755
index f9211cbd..23bac47d
--- a/inc/lib/Twig/Loader/Filesystem.php
+++ b/inc/lib/Twig/Loader/Filesystem.php
@@ -16,8 +16,11 @@
*/
class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
{
- protected $paths;
- protected $cache;
+ /** Identifier of the main namespace. */
+ const MAIN_NAMESPACE = '__main__';
+
+ protected $paths = array();
+ protected $cache = array();
/**
* Constructor.
@@ -38,7 +41,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
*
* @return array The array of paths where to look for templates
*/
- public function getPaths($namespace = '__main__')
+ public function getPaths($namespace = self::MAIN_NAMESPACE)
{
return isset($this->paths[$namespace]) ? $this->paths[$namespace] : array();
}
@@ -46,7 +49,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
/**
* Returns the path namespaces.
*
- * The "__main__" namespace is always defined.
+ * The main namespace is always defined.
*
* @return array The array of defined namespaces
*/
@@ -61,7 +64,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
* @param string|array $paths A path or an array of paths where to look for templates
* @param string $namespace A path namespace
*/
- public function setPaths($paths, $namespace = '__main__')
+ public function setPaths($paths, $namespace = self::MAIN_NAMESPACE)
{
if (!is_array($paths)) {
$paths = array($paths);
@@ -81,7 +84,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
*
* @throws Twig_Error_Loader
*/
- public function addPath($path, $namespace = '__main__')
+ public function addPath($path, $namespace = self::MAIN_NAMESPACE)
{
// invalidate the cache
$this->cache = array();
@@ -101,7 +104,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
*
* @throws Twig_Error_Loader
*/
- public function prependPath($path, $namespace = '__main__')
+ public function prependPath($path, $namespace = self::MAIN_NAMESPACE)
{
// invalidate the cache
$this->cache = array();
@@ -175,15 +178,15 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
$this->validateName($name);
- $namespace = '__main__';
+ $namespace = self::MAIN_NAMESPACE;
+ $shortname = $name;
if (isset($name[0]) && '@' == $name[0]) {
if (false === $pos = strpos($name, '/')) {
throw new Twig_Error_Loader(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name));
}
$namespace = substr($name, 1, $pos - 1);
-
- $name = substr($name, $pos + 1);
+ $shortname = substr($name, $pos + 1);
}
if (!isset($this->paths[$namespace])) {
@@ -191,8 +194,8 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
}
foreach ($this->paths[$namespace] as $path) {
- if (is_file($path.'/'.$name)) {
- return $this->cache[$name] = $path.'/'.$name;
+ if (is_file($path.'/'.$shortname)) {
+ return $this->cache[$name] = $path.'/'.$shortname;
}
}
diff --git a/inc/lib/Twig/Loader/String.php b/inc/lib/Twig/Loader/String.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/LoaderInterface.php b/inc/lib/Twig/LoaderInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Markup.php b/inc/lib/Twig/Markup.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node.php b/inc/lib/Twig/Node.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/AutoEscape.php b/inc/lib/Twig/Node/AutoEscape.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Block.php b/inc/lib/Twig/Node/Block.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/BlockReference.php b/inc/lib/Twig/Node/BlockReference.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Body.php b/inc/lib/Twig/Node/Body.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Do.php b/inc/lib/Twig/Node/Do.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Embed.php b/inc/lib/Twig/Node/Embed.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression.php b/inc/lib/Twig/Node/Expression.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Array.php b/inc/lib/Twig/Node/Expression/Array.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/AssignName.php b/inc/lib/Twig/Node/Expression/AssignName.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary.php b/inc/lib/Twig/Node/Expression/Binary.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Add.php b/inc/lib/Twig/Node/Expression/Binary/Add.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/And.php b/inc/lib/Twig/Node/Expression/Binary/And.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Concat.php b/inc/lib/Twig/Node/Expression/Binary/Concat.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Div.php b/inc/lib/Twig/Node/Expression/Binary/Div.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Equal.php b/inc/lib/Twig/Node/Expression/Binary/Equal.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/FloorDiv.php b/inc/lib/Twig/Node/Expression/Binary/FloorDiv.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Greater.php b/inc/lib/Twig/Node/Expression/Binary/Greater.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php b/inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/In.php b/inc/lib/Twig/Node/Expression/Binary/In.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Less.php b/inc/lib/Twig/Node/Expression/Binary/Less.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/LessEqual.php b/inc/lib/Twig/Node/Expression/Binary/LessEqual.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Mod.php b/inc/lib/Twig/Node/Expression/Binary/Mod.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Mul.php b/inc/lib/Twig/Node/Expression/Binary/Mul.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/NotEqual.php b/inc/lib/Twig/Node/Expression/Binary/NotEqual.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/NotIn.php b/inc/lib/Twig/Node/Expression/Binary/NotIn.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Or.php b/inc/lib/Twig/Node/Expression/Binary/Or.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Power.php b/inc/lib/Twig/Node/Expression/Binary/Power.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Range.php b/inc/lib/Twig/Node/Expression/Binary/Range.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Binary/Sub.php b/inc/lib/Twig/Node/Expression/Binary/Sub.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/BlockReference.php b/inc/lib/Twig/Node/Expression/BlockReference.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Call.php b/inc/lib/Twig/Node/Expression/Call.php
old mode 100644
new mode 100755
index 87b62deb..dba9b0e6
--- a/inc/lib/Twig/Node/Expression/Call.php
+++ b/inc/lib/Twig/Node/Expression/Call.php
@@ -146,7 +146,7 @@ abstract class Twig_Node_Expression_Call extends Twig_Node_Expression
if (array_key_exists($name, $parameters)) {
if (array_key_exists($pos, $parameters)) {
- throw new Twig_Error_Syntax(sprintf('Arguments "%s" is defined twice for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name')));
+ throw new Twig_Error_Syntax(sprintf('Argument "%s" is defined twice for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name')));
}
$arguments[] = $parameters[$name];
@@ -164,8 +164,8 @@ abstract class Twig_Node_Expression_Call extends Twig_Node_Expression
}
}
- foreach (array_keys($parameters) as $name) {
- throw new Twig_Error_Syntax(sprintf('Unknown argument "%s" for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name')));
+ if (!empty($parameters)) {
+ throw new Twig_Error_Syntax(sprintf('Unknown argument%s "%s" for %s "%s".', count($parameters) > 1 ? 's' : '' , implode('", "', array_keys($parameters)), $this->getAttribute('type'), $this->getAttribute('name')));
}
return $arguments;
diff --git a/inc/lib/Twig/Node/Expression/Conditional.php b/inc/lib/Twig/Node/Expression/Conditional.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Constant.php b/inc/lib/Twig/Node/Expression/Constant.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/ExtensionReference.php b/inc/lib/Twig/Node/Expression/ExtensionReference.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Filter.php b/inc/lib/Twig/Node/Expression/Filter.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Filter/Default.php b/inc/lib/Twig/Node/Expression/Filter/Default.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Function.php b/inc/lib/Twig/Node/Expression/Function.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/GetAttr.php b/inc/lib/Twig/Node/Expression/GetAttr.php
old mode 100644
new mode 100755
index 81a9b137..55d9fcc3
--- a/inc/lib/Twig/Node/Expression/GetAttr.php
+++ b/inc/lib/Twig/Node/Expression/GetAttr.php
@@ -32,10 +32,10 @@ class Twig_Node_Expression_GetAttr extends Twig_Node_Expression
$compiler->raw(', ')->subcompile($this->getNode('attribute'));
- if (count($this->getNode('arguments')) || Twig_TemplateInterface::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) {
+ if (count($this->getNode('arguments')) || Twig_Template::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) {
$compiler->raw(', ')->subcompile($this->getNode('arguments'));
- if (Twig_TemplateInterface::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) {
+ if (Twig_Template::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) {
$compiler->raw(', ')->repr($this->getAttribute('type'));
}
diff --git a/inc/lib/Twig/Node/Expression/MacroCall.php b/inc/lib/Twig/Node/Expression/MacroCall.php
new file mode 100755
index 00000000..3e6b8c12
--- /dev/null
+++ b/inc/lib/Twig/Node/Expression/MacroCall.php
@@ -0,0 +1,60 @@
+
+ */
+class Twig_Node_Expression_MacroCall extends Twig_Node_Expression
+{
+ public function __construct(Twig_Node_Expression $template, $name, Twig_Node_Expression_Array $arguments, $lineno)
+ {
+ parent::__construct(array('template' => $template, 'arguments' => $arguments), array('name' => $name), $lineno);
+ }
+
+ public function compile(Twig_Compiler $compiler)
+ {
+ $namedNames = array();
+ $namedCount = 0;
+ $positionalCount = 0;
+ foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) {
+ $name = $pair['key']->getAttribute('value');
+ if (!is_int($name)) {
+ $namedCount++;
+ $namedNames[$name] = 1;
+ } elseif ($namedCount > 0) {
+ throw new Twig_Error_Syntax(sprintf('Positional arguments cannot be used after named arguments for macro "%s".', $this->getAttribute('name')), $this->lineno);
+ } else {
+ $positionalCount++;
+ }
+ }
+
+ $compiler
+ ->raw('$this->callMacro(')
+ ->subcompile($this->getNode('template'))
+ ->raw(', ')->repr($this->getAttribute('name'))
+ ->raw(', ')->subcompile($this->getNode('arguments'))
+ ;
+
+ if ($namedCount > 0) {
+ $compiler
+ ->raw(', ')->repr($namedNames)
+ ->raw(', ')->repr($namedCount)
+ ->raw(', ')->repr($positionalCount)
+ ;
+ }
+
+ $compiler
+ ->raw(')')
+ ;
+ }
+}
diff --git a/inc/lib/Twig/Node/Expression/MethodCall.php b/inc/lib/Twig/Node/Expression/MethodCall.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Name.php b/inc/lib/Twig/Node/Expression/Name.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Parent.php b/inc/lib/Twig/Node/Expression/Parent.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/TempName.php b/inc/lib/Twig/Node/Expression/TempName.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test.php b/inc/lib/Twig/Node/Expression/Test.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Constant.php b/inc/lib/Twig/Node/Expression/Test/Constant.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Defined.php b/inc/lib/Twig/Node/Expression/Test/Defined.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Divisibleby.php b/inc/lib/Twig/Node/Expression/Test/Divisibleby.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Even.php b/inc/lib/Twig/Node/Expression/Test/Even.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Null.php b/inc/lib/Twig/Node/Expression/Test/Null.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Odd.php b/inc/lib/Twig/Node/Expression/Test/Odd.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Test/Sameas.php b/inc/lib/Twig/Node/Expression/Test/Sameas.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Unary.php b/inc/lib/Twig/Node/Expression/Unary.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Unary/Neg.php b/inc/lib/Twig/Node/Expression/Unary/Neg.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Unary/Not.php b/inc/lib/Twig/Node/Expression/Unary/Not.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Expression/Unary/Pos.php b/inc/lib/Twig/Node/Expression/Unary/Pos.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Flush.php b/inc/lib/Twig/Node/Flush.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/For.php b/inc/lib/Twig/Node/For.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/ForLoop.php b/inc/lib/Twig/Node/ForLoop.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/If.php b/inc/lib/Twig/Node/If.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Import.php b/inc/lib/Twig/Node/Import.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Include.php b/inc/lib/Twig/Node/Include.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Macro.php b/inc/lib/Twig/Node/Macro.php
old mode 100644
new mode 100755
index 89910618..43c75e5c
--- a/inc/lib/Twig/Node/Macro.php
+++ b/inc/lib/Twig/Node/Macro.php
@@ -18,7 +18,7 @@ class Twig_Node_Macro extends Twig_Node
{
public function __construct($name, Twig_NodeInterface $body, Twig_NodeInterface $arguments, $lineno, $tag = null)
{
- parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name), $lineno, $tag);
+ parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name, 'method' => 'get'.ucfirst($name)), $lineno, $tag);
}
/**
@@ -30,7 +30,7 @@ class Twig_Node_Macro extends Twig_Node
{
$compiler
->addDebugInfo($this)
- ->write(sprintf("public function get%s(", $this->getAttribute('name')))
+ ->write(sprintf("public function %s(", $this->getAttribute('method')))
;
$count = count($this->getNode('arguments'));
diff --git a/inc/lib/Twig/Node/Module.php b/inc/lib/Twig/Node/Module.php
old mode 100644
new mode 100755
index 585048b8..224410a2
--- a/inc/lib/Twig/Node/Module.php
+++ b/inc/lib/Twig/Node/Module.php
@@ -235,9 +235,41 @@ class Twig_Node_Module extends Twig_Node
$compiler
->outdent()
- ->write(");\n")
+ ->write(");\n\n")
+ ;
+
+ // macro information
+ $compiler
+ ->write("\$this->macros = array(\n")
+ ->indent()
+ ;
+
+ foreach ($this->getNode('macros') as $name => $node) {
+ $compiler
+ ->addIndentation()->repr($name)->raw(" => array(\n")
+ ->indent()
+ ->write("'method' => ")->repr($node->getAttribute('method'))->raw(",\n")
+ ->write("'arguments' => array(\n")
+ ->indent()
+ ;
+ foreach ($node->getNode('arguments') as $argument => $value) {
+ $compiler->addIndentation()->repr($argument)->raw (' => ')->subcompile($value)->raw(",\n");
+ }
+ $compiler
+ ->outdent()
+ ->write("),\n")
+ ->outdent()
+ ->write("),\n")
+ ;
+ }
+ $compiler
->outdent()
- ->write("}\n\n");
+ ->write(");\n")
+ ;
+
+ $compiler
+ ->outdent()
+ ->write("}\n\n")
;
}
diff --git a/inc/lib/Twig/Node/Print.php b/inc/lib/Twig/Node/Print.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Sandbox.php b/inc/lib/Twig/Node/Sandbox.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/SandboxedModule.php b/inc/lib/Twig/Node/SandboxedModule.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/SandboxedPrint.php b/inc/lib/Twig/Node/SandboxedPrint.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Set.php b/inc/lib/Twig/Node/Set.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/SetTemp.php b/inc/lib/Twig/Node/SetTemp.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Spaceless.php b/inc/lib/Twig/Node/Spaceless.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Node/Text.php b/inc/lib/Twig/Node/Text.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeInterface.php b/inc/lib/Twig/NodeInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeOutputInterface.php b/inc/lib/Twig/NodeOutputInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeTraverser.php b/inc/lib/Twig/NodeTraverser.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeVisitor/Escaper.php b/inc/lib/Twig/NodeVisitor/Escaper.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeVisitor/Optimizer.php b/inc/lib/Twig/NodeVisitor/Optimizer.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeVisitor/SafeAnalysis.php b/inc/lib/Twig/NodeVisitor/SafeAnalysis.php
old mode 100644
new mode 100755
index c4bbd812..b0c658cd
--- a/inc/lib/Twig/NodeVisitor/SafeAnalysis.php
+++ b/inc/lib/Twig/NodeVisitor/SafeAnalysis.php
@@ -89,6 +89,8 @@ class Twig_NodeVisitor_SafeAnalysis implements Twig_NodeVisitorInterface
} else {
$this->setSafe($node, array());
}
+ } elseif ($node instanceof Twig_Node_Expression_MacroCall) {
+ $this->setSafe($node, array('all'));
} elseif ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name) {
$name = $node->getNode('node')->getAttribute('name');
// attributes on template instances are safe
diff --git a/inc/lib/Twig/NodeVisitor/Sandbox.php b/inc/lib/Twig/NodeVisitor/Sandbox.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/NodeVisitorInterface.php b/inc/lib/Twig/NodeVisitorInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Parser.php b/inc/lib/Twig/Parser.php
old mode 100644
new mode 100755
index 958e46b3..bebdd9bb
--- a/inc/lib/Twig/Parser.php
+++ b/inc/lib/Twig/Parser.php
@@ -49,7 +49,7 @@ class Twig_Parser implements Twig_ParserInterface
public function getVarName()
{
- return sprintf('__internal_%s', hash('sha1', uniqid(mt_rand(), true), false));
+ return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false));
}
public function getFilename()
diff --git a/inc/lib/Twig/ParserInterface.php b/inc/lib/Twig/ParserInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Sandbox/SecurityError.php b/inc/lib/Twig/Sandbox/SecurityError.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Sandbox/SecurityPolicy.php b/inc/lib/Twig/Sandbox/SecurityPolicy.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Sandbox/SecurityPolicyInterface.php b/inc/lib/Twig/Sandbox/SecurityPolicyInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/SimpleFilter.php b/inc/lib/Twig/SimpleFilter.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/SimpleFunction.php b/inc/lib/Twig/SimpleFunction.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/SimpleTest.php b/inc/lib/Twig/SimpleTest.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Template.php b/inc/lib/Twig/Template.php
old mode 100644
new mode 100755
index a001ca03..a42fab28
--- a/inc/lib/Twig/Template.php
+++ b/inc/lib/Twig/Template.php
@@ -24,6 +24,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
protected $env;
protected $blocks;
protected $traits;
+ protected $macros;
/**
* Constructor.
@@ -35,6 +36,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
$this->env = $env;
$this->blocks = array();
$this->traits = array();
+ $this->macros = array();
}
/**
@@ -326,7 +328,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
* @param mixed $object The object or array from where to get the item
* @param mixed $item The item to get from the array or object
* @param array $arguments An array of arguments to pass if the item is an object method
- * @param string $type The type of attribute (@see Twig_TemplateInterface)
+ * @param string $type The type of attribute (@see Twig_Template constants)
* @param Boolean $isDefinedTest Whether this is only a defined check
* @param Boolean $ignoreStrictCheck Whether to ignore the strict attribute check or not
*
@@ -334,10 +336,10 @@ abstract class Twig_Template implements Twig_TemplateInterface
*
* @throws Twig_Error_Runtime if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false
*/
- protected function getAttribute($object, $item, array $arguments = array(), $type = Twig_TemplateInterface::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false)
+ protected function getAttribute($object, $item, array $arguments = array(), $type = Twig_Template::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false)
{
// array
- if (Twig_TemplateInterface::METHOD_CALL !== $type) {
+ if (Twig_Template::METHOD_CALL !== $type) {
$arrayItem = is_bool($item) || is_float($item) ? (int) $item : $item;
if ((is_array($object) && array_key_exists($arrayItem, $object))
@@ -350,7 +352,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
return $object[$arrayItem];
}
- if (Twig_TemplateInterface::ARRAY_CALL === $type || !is_object($object)) {
+ if (Twig_Template::ARRAY_CALL === $type || !is_object($object)) {
if ($isDefinedTest) {
return false;
}
@@ -363,7 +365,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
throw new Twig_Error_Runtime(sprintf('Key "%s" in object (with ArrayAccess) of type "%s" does not exist', $arrayItem, get_class($object)), -1, $this->getTemplateName());
} elseif (is_array($object)) {
throw new Twig_Error_Runtime(sprintf('Key "%s" for array with keys "%s" does not exist', $arrayItem, implode(', ', array_keys($object))), -1, $this->getTemplateName());
- } elseif (Twig_TemplateInterface::ARRAY_CALL === $type) {
+ } elseif (Twig_Template::ARRAY_CALL === $type) {
throw new Twig_Error_Runtime(sprintf('Impossible to access a key ("%s") on a %s variable ("%s")', $item, gettype($object), $object), -1, $this->getTemplateName());
} else {
throw new Twig_Error_Runtime(sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s")', $item, gettype($object), $object), -1, $this->getTemplateName());
@@ -386,7 +388,7 @@ abstract class Twig_Template implements Twig_TemplateInterface
$class = get_class($object);
// object property
- if (Twig_TemplateInterface::METHOD_CALL !== $type) {
+ if (Twig_Template::METHOD_CALL !== $type) {
if (isset($object->$item) || array_key_exists((string) $item, $object)) {
if ($isDefinedTest) {
return true;
@@ -445,6 +447,66 @@ abstract class Twig_Template implements Twig_TemplateInterface
return $ret;
}
+ /**
+ * Calls macro in a template.
+ *
+ * @param Twig_Template $template The template
+ * @param string $macro The name of macro
+ * @param array $arguments The arguments of macro
+ * @param array $namedNames An array of names of arguments as keys
+ * @param integer $namedCount The count of named arguments
+ * @param integer $positionalCount The count of positional arguments
+ *
+ * @return string The content of a macro
+ *
+ * @throws Twig_Error_Runtime if the macro is not defined
+ * @throws Twig_Error_Runtime if the argument is defined twice
+ * @throws Twig_Error_Runtime if the argument is unknown
+ */
+ protected function callMacro(Twig_Template $template, $macro, array $arguments, array $namedNames = array(), $namedCount = 0, $positionalCount = -1)
+ {
+ if (!isset($template->macros[$macro]['reflection'])) {
+ if (!isset($template->macros[$macro])) {
+ throw new Twig_Error_Runtime(sprintf('Macro "%s" is not defined in the template "%s".', $macro, $template->getTemplateName()));
+ }
+
+ $template->macros[$macro]['reflection'] = new ReflectionMethod($template, $template->macros[$macro]['method']);
+ }
+
+ if ($namedCount < 1) {
+ return $template->macros[$macro]['reflection']->invokeArgs($template, $arguments);
+ }
+
+ $i = 0;
+ $args = array();
+ foreach ($template->macros[$macro]['arguments'] as $name => $value) {
+ if (isset($namedNames[$name])) {
+ if ($i < $positionalCount) {
+ throw new Twig_Error_Runtime(sprintf('Argument "%s" is defined twice for macro "%s" defined in the template "%s".', $name, $macro, $template->getTemplateName()));
+ }
+
+ $args[] = $arguments[$name];
+ if (--$namedCount < 1) {
+ break;
+ }
+ } elseif ($i < $positionalCount) {
+ $args[] = $arguments[$i];
+ } else {
+ $args[] = $value;
+ }
+
+ $i++;
+ }
+
+ if ($namedCount > 0) {
+ $parameters = array_keys(array_diff_key($namedNames, $template->macros[$macro]['arguments']));
+
+ throw new Twig_Error_Runtime(sprintf('Unknown argument%s "%s" for macro "%s" defined in the template "%s".', count($parameters) > 1 ? 's' : '' , implode('", "', $parameters), $macro, $template->getTemplateName()));
+ }
+
+ return $template->macros[$macro]['reflection']->invokeArgs($template, $args);
+ }
+
/**
* This method is only useful when testing Twig. Do not use it.
*/
diff --git a/inc/lib/Twig/TemplateInterface.php b/inc/lib/Twig/TemplateInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test.php b/inc/lib/Twig/Test.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test/Function.php b/inc/lib/Twig/Test/Function.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test/IntegrationTestCase.php b/inc/lib/Twig/Test/IntegrationTestCase.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test/Method.php b/inc/lib/Twig/Test/Method.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test/Node.php b/inc/lib/Twig/Test/Node.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Test/NodeTestCase.php b/inc/lib/Twig/Test/NodeTestCase.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TestCallableInterface.php b/inc/lib/Twig/TestCallableInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TestInterface.php b/inc/lib/Twig/TestInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/Token.php b/inc/lib/Twig/Token.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser.php b/inc/lib/Twig/TokenParser.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/AutoEscape.php b/inc/lib/Twig/TokenParser/AutoEscape.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Block.php b/inc/lib/Twig/TokenParser/Block.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Do.php b/inc/lib/Twig/TokenParser/Do.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Embed.php b/inc/lib/Twig/TokenParser/Embed.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Extends.php b/inc/lib/Twig/TokenParser/Extends.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Filter.php b/inc/lib/Twig/TokenParser/Filter.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Flush.php b/inc/lib/Twig/TokenParser/Flush.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/For.php b/inc/lib/Twig/TokenParser/For.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/From.php b/inc/lib/Twig/TokenParser/From.php
old mode 100644
new mode 100755
index a54054db..ff6e5756
--- a/inc/lib/Twig/TokenParser/From.php
+++ b/inc/lib/Twig/TokenParser/From.php
@@ -56,7 +56,7 @@ class Twig_TokenParser_From extends Twig_TokenParser
$node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag());
foreach ($targets as $name => $alias) {
- $this->parser->addImportedSymbol('function', $alias, 'get'.$name, $node->getNode('var'));
+ $this->parser->addImportedSymbol('macro', $alias, $name, $node->getNode('var'));
}
return $node;
diff --git a/inc/lib/Twig/TokenParser/If.php b/inc/lib/Twig/TokenParser/If.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Import.php b/inc/lib/Twig/TokenParser/Import.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Include.php b/inc/lib/Twig/TokenParser/Include.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Macro.php b/inc/lib/Twig/TokenParser/Macro.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Sandbox.php b/inc/lib/Twig/TokenParser/Sandbox.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Set.php b/inc/lib/Twig/TokenParser/Set.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Spaceless.php b/inc/lib/Twig/TokenParser/Spaceless.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParser/Use.php b/inc/lib/Twig/TokenParser/Use.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParserBroker.php b/inc/lib/Twig/TokenParserBroker.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParserBrokerInterface.php b/inc/lib/Twig/TokenParserBrokerInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenParserInterface.php b/inc/lib/Twig/TokenParserInterface.php
old mode 100644
new mode 100755
diff --git a/inc/lib/Twig/TokenStream.php b/inc/lib/Twig/TokenStream.php
old mode 100644
new mode 100755
From df143c6b50efa82548417c6c782069064c634e0c Mon Sep 17 00:00:00 2001
From: Michael Foster
Date: Thu, 19 Sep 2013 16:09:35 +1000
Subject: [PATCH 03/26] fix Twig permissions
---
inc/lib/Twig/Autoloader.php | 0
inc/lib/Twig/Compiler.php | 0
inc/lib/Twig/CompilerInterface.php | 0
inc/lib/Twig/Environment.php | 0
inc/lib/Twig/Error.php | 0
inc/lib/Twig/Error/Loader.php | 0
inc/lib/Twig/Error/Runtime.php | 0
inc/lib/Twig/Error/Syntax.php | 0
inc/lib/Twig/ExistsLoaderInterface.php | 0
inc/lib/Twig/ExpressionParser.php | 0
inc/lib/Twig/Extension.php | 0
inc/lib/Twig/Extension/Core.php | 0
inc/lib/Twig/Extension/Debug.php | 0
inc/lib/Twig/Extension/Escaper.php | 0
inc/lib/Twig/Extension/Optimizer.php | 0
inc/lib/Twig/Extension/Sandbox.php | 0
inc/lib/Twig/Extension/Staging.php | 0
inc/lib/Twig/Extension/StringLoader.php | 0
inc/lib/Twig/ExtensionInterface.php | 0
inc/lib/Twig/Filter.php | 0
inc/lib/Twig/Filter/Function.php | 0
inc/lib/Twig/Filter/Method.php | 0
inc/lib/Twig/Filter/Node.php | 0
inc/lib/Twig/FilterCallableInterface.php | 0
inc/lib/Twig/FilterInterface.php | 0
inc/lib/Twig/Function.php | 0
inc/lib/Twig/Function/Function.php | 0
inc/lib/Twig/Function/Method.php | 0
inc/lib/Twig/Function/Node.php | 0
inc/lib/Twig/FunctionCallableInterface.php | 0
inc/lib/Twig/FunctionInterface.php | 0
inc/lib/Twig/Lexer.php | 0
inc/lib/Twig/LexerInterface.php | 0
inc/lib/Twig/Loader/Array.php | 0
inc/lib/Twig/Loader/Chain.php | 0
inc/lib/Twig/Loader/Filesystem.php | 0
inc/lib/Twig/Loader/String.php | 0
inc/lib/Twig/LoaderInterface.php | 0
inc/lib/Twig/Markup.php | 0
inc/lib/Twig/Node.php | 0
inc/lib/Twig/Node/AutoEscape.php | 0
inc/lib/Twig/Node/Block.php | 0
inc/lib/Twig/Node/BlockReference.php | 0
inc/lib/Twig/Node/Body.php | 0
inc/lib/Twig/Node/Do.php | 0
inc/lib/Twig/Node/Embed.php | 0
inc/lib/Twig/Node/Expression.php | 0
inc/lib/Twig/Node/Expression/Array.php | 0
inc/lib/Twig/Node/Expression/AssignName.php | 0
inc/lib/Twig/Node/Expression/Binary.php | 0
inc/lib/Twig/Node/Expression/Binary/Add.php | 0
inc/lib/Twig/Node/Expression/Binary/And.php | 0
inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php | 0
inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php | 0
inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php | 0
inc/lib/Twig/Node/Expression/Binary/Concat.php | 0
inc/lib/Twig/Node/Expression/Binary/Div.php | 0
inc/lib/Twig/Node/Expression/Binary/Equal.php | 0
inc/lib/Twig/Node/Expression/Binary/FloorDiv.php | 0
inc/lib/Twig/Node/Expression/Binary/Greater.php | 0
inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/In.php | 0
inc/lib/Twig/Node/Expression/Binary/Less.php | 0
inc/lib/Twig/Node/Expression/Binary/LessEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/Mod.php | 0
inc/lib/Twig/Node/Expression/Binary/Mul.php | 0
inc/lib/Twig/Node/Expression/Binary/NotEqual.php | 0
inc/lib/Twig/Node/Expression/Binary/NotIn.php | 0
inc/lib/Twig/Node/Expression/Binary/Or.php | 0
inc/lib/Twig/Node/Expression/Binary/Power.php | 0
inc/lib/Twig/Node/Expression/Binary/Range.php | 0
inc/lib/Twig/Node/Expression/Binary/Sub.php | 0
inc/lib/Twig/Node/Expression/BlockReference.php | 0
inc/lib/Twig/Node/Expression/Call.php | 0
inc/lib/Twig/Node/Expression/Conditional.php | 0
inc/lib/Twig/Node/Expression/Constant.php | 0
inc/lib/Twig/Node/Expression/ExtensionReference.php | 0
inc/lib/Twig/Node/Expression/Filter.php | 0
inc/lib/Twig/Node/Expression/Filter/Default.php | 0
inc/lib/Twig/Node/Expression/Function.php | 0
inc/lib/Twig/Node/Expression/GetAttr.php | 0
inc/lib/Twig/Node/Expression/MacroCall.php | 0
inc/lib/Twig/Node/Expression/MethodCall.php | 0
inc/lib/Twig/Node/Expression/Name.php | 0
inc/lib/Twig/Node/Expression/Parent.php | 0
inc/lib/Twig/Node/Expression/TempName.php | 0
inc/lib/Twig/Node/Expression/Test.php | 0
inc/lib/Twig/Node/Expression/Test/Constant.php | 0
inc/lib/Twig/Node/Expression/Test/Defined.php | 0
inc/lib/Twig/Node/Expression/Test/Divisibleby.php | 0
inc/lib/Twig/Node/Expression/Test/Even.php | 0
inc/lib/Twig/Node/Expression/Test/Null.php | 0
inc/lib/Twig/Node/Expression/Test/Odd.php | 0
inc/lib/Twig/Node/Expression/Test/Sameas.php | 0
inc/lib/Twig/Node/Expression/Unary.php | 0
inc/lib/Twig/Node/Expression/Unary/Neg.php | 0
inc/lib/Twig/Node/Expression/Unary/Not.php | 0
inc/lib/Twig/Node/Expression/Unary/Pos.php | 0
inc/lib/Twig/Node/Flush.php | 0
inc/lib/Twig/Node/For.php | 0
inc/lib/Twig/Node/ForLoop.php | 0
inc/lib/Twig/Node/If.php | 0
inc/lib/Twig/Node/Import.php | 0
inc/lib/Twig/Node/Include.php | 0
inc/lib/Twig/Node/Macro.php | 0
inc/lib/Twig/Node/Module.php | 0
inc/lib/Twig/Node/Print.php | 0
inc/lib/Twig/Node/Sandbox.php | 0
inc/lib/Twig/Node/SandboxedModule.php | 0
inc/lib/Twig/Node/SandboxedPrint.php | 0
inc/lib/Twig/Node/Set.php | 0
inc/lib/Twig/Node/SetTemp.php | 0
inc/lib/Twig/Node/Spaceless.php | 0
inc/lib/Twig/Node/Text.php | 0
inc/lib/Twig/NodeInterface.php | 0
inc/lib/Twig/NodeOutputInterface.php | 0
inc/lib/Twig/NodeTraverser.php | 0
inc/lib/Twig/NodeVisitor/Escaper.php | 0
inc/lib/Twig/NodeVisitor/Optimizer.php | 0
inc/lib/Twig/NodeVisitor/SafeAnalysis.php | 0
inc/lib/Twig/NodeVisitor/Sandbox.php | 0
inc/lib/Twig/NodeVisitorInterface.php | 0
inc/lib/Twig/Parser.php | 0
inc/lib/Twig/ParserInterface.php | 0
inc/lib/Twig/Sandbox/SecurityError.php | 0
inc/lib/Twig/Sandbox/SecurityPolicy.php | 0
inc/lib/Twig/Sandbox/SecurityPolicyInterface.php | 0
inc/lib/Twig/SimpleFilter.php | 0
inc/lib/Twig/SimpleFunction.php | 0
inc/lib/Twig/SimpleTest.php | 0
inc/lib/Twig/Template.php | 0
inc/lib/Twig/TemplateInterface.php | 0
inc/lib/Twig/Test.php | 0
inc/lib/Twig/Test/Function.php | 0
inc/lib/Twig/Test/IntegrationTestCase.php | 0
inc/lib/Twig/Test/Method.php | 0
inc/lib/Twig/Test/Node.php | 0
inc/lib/Twig/Test/NodeTestCase.php | 0
inc/lib/Twig/TestCallableInterface.php | 0
inc/lib/Twig/TestInterface.php | 0
inc/lib/Twig/Token.php | 0
inc/lib/Twig/TokenParser.php | 0
inc/lib/Twig/TokenParser/AutoEscape.php | 0
inc/lib/Twig/TokenParser/Block.php | 0
inc/lib/Twig/TokenParser/Do.php | 0
inc/lib/Twig/TokenParser/Embed.php | 0
inc/lib/Twig/TokenParser/Extends.php | 0
inc/lib/Twig/TokenParser/Filter.php | 0
inc/lib/Twig/TokenParser/Flush.php | 0
inc/lib/Twig/TokenParser/For.php | 0
inc/lib/Twig/TokenParser/From.php | 0
inc/lib/Twig/TokenParser/If.php | 0
inc/lib/Twig/TokenParser/Import.php | 0
inc/lib/Twig/TokenParser/Include.php | 0
inc/lib/Twig/TokenParser/Macro.php | 0
inc/lib/Twig/TokenParser/Sandbox.php | 0
inc/lib/Twig/TokenParser/Set.php | 0
inc/lib/Twig/TokenParser/Spaceless.php | 0
inc/lib/Twig/TokenParser/Use.php | 0
inc/lib/Twig/TokenParserBroker.php | 0
inc/lib/Twig/TokenParserBrokerInterface.php | 0
inc/lib/Twig/TokenParserInterface.php | 0
inc/lib/Twig/TokenStream.php | 0
163 files changed, 0 insertions(+), 0 deletions(-)
mode change 100755 => 100644 inc/lib/Twig/Autoloader.php
mode change 100755 => 100644 inc/lib/Twig/Compiler.php
mode change 100755 => 100644 inc/lib/Twig/CompilerInterface.php
mode change 100755 => 100644 inc/lib/Twig/Environment.php
mode change 100755 => 100644 inc/lib/Twig/Error.php
mode change 100755 => 100644 inc/lib/Twig/Error/Loader.php
mode change 100755 => 100644 inc/lib/Twig/Error/Runtime.php
mode change 100755 => 100644 inc/lib/Twig/Error/Syntax.php
mode change 100755 => 100644 inc/lib/Twig/ExistsLoaderInterface.php
mode change 100755 => 100644 inc/lib/Twig/ExpressionParser.php
mode change 100755 => 100644 inc/lib/Twig/Extension.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Core.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Debug.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Escaper.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Optimizer.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Sandbox.php
mode change 100755 => 100644 inc/lib/Twig/Extension/Staging.php
mode change 100755 => 100644 inc/lib/Twig/Extension/StringLoader.php
mode change 100755 => 100644 inc/lib/Twig/ExtensionInterface.php
mode change 100755 => 100644 inc/lib/Twig/Filter.php
mode change 100755 => 100644 inc/lib/Twig/Filter/Function.php
mode change 100755 => 100644 inc/lib/Twig/Filter/Method.php
mode change 100755 => 100644 inc/lib/Twig/Filter/Node.php
mode change 100755 => 100644 inc/lib/Twig/FilterCallableInterface.php
mode change 100755 => 100644 inc/lib/Twig/FilterInterface.php
mode change 100755 => 100644 inc/lib/Twig/Function.php
mode change 100755 => 100644 inc/lib/Twig/Function/Function.php
mode change 100755 => 100644 inc/lib/Twig/Function/Method.php
mode change 100755 => 100644 inc/lib/Twig/Function/Node.php
mode change 100755 => 100644 inc/lib/Twig/FunctionCallableInterface.php
mode change 100755 => 100644 inc/lib/Twig/FunctionInterface.php
mode change 100755 => 100644 inc/lib/Twig/Lexer.php
mode change 100755 => 100644 inc/lib/Twig/LexerInterface.php
mode change 100755 => 100644 inc/lib/Twig/Loader/Array.php
mode change 100755 => 100644 inc/lib/Twig/Loader/Chain.php
mode change 100755 => 100644 inc/lib/Twig/Loader/Filesystem.php
mode change 100755 => 100644 inc/lib/Twig/Loader/String.php
mode change 100755 => 100644 inc/lib/Twig/LoaderInterface.php
mode change 100755 => 100644 inc/lib/Twig/Markup.php
mode change 100755 => 100644 inc/lib/Twig/Node.php
mode change 100755 => 100644 inc/lib/Twig/Node/AutoEscape.php
mode change 100755 => 100644 inc/lib/Twig/Node/Block.php
mode change 100755 => 100644 inc/lib/Twig/Node/BlockReference.php
mode change 100755 => 100644 inc/lib/Twig/Node/Body.php
mode change 100755 => 100644 inc/lib/Twig/Node/Do.php
mode change 100755 => 100644 inc/lib/Twig/Node/Embed.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Array.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/AssignName.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Add.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/And.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Concat.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Div.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Equal.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/FloorDiv.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Greater.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/In.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Less.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/LessEqual.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Mod.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Mul.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/NotEqual.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/NotIn.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Or.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Power.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Range.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Binary/Sub.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/BlockReference.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Call.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Conditional.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Constant.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/ExtensionReference.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Filter.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Filter/Default.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Function.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/GetAttr.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/MacroCall.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/MethodCall.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Name.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Parent.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/TempName.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Constant.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Defined.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Divisibleby.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Even.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Null.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Odd.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Test/Sameas.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Unary.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Unary/Neg.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Unary/Not.php
mode change 100755 => 100644 inc/lib/Twig/Node/Expression/Unary/Pos.php
mode change 100755 => 100644 inc/lib/Twig/Node/Flush.php
mode change 100755 => 100644 inc/lib/Twig/Node/For.php
mode change 100755 => 100644 inc/lib/Twig/Node/ForLoop.php
mode change 100755 => 100644 inc/lib/Twig/Node/If.php
mode change 100755 => 100644 inc/lib/Twig/Node/Import.php
mode change 100755 => 100644 inc/lib/Twig/Node/Include.php
mode change 100755 => 100644 inc/lib/Twig/Node/Macro.php
mode change 100755 => 100644 inc/lib/Twig/Node/Module.php
mode change 100755 => 100644 inc/lib/Twig/Node/Print.php
mode change 100755 => 100644 inc/lib/Twig/Node/Sandbox.php
mode change 100755 => 100644 inc/lib/Twig/Node/SandboxedModule.php
mode change 100755 => 100644 inc/lib/Twig/Node/SandboxedPrint.php
mode change 100755 => 100644 inc/lib/Twig/Node/Set.php
mode change 100755 => 100644 inc/lib/Twig/Node/SetTemp.php
mode change 100755 => 100644 inc/lib/Twig/Node/Spaceless.php
mode change 100755 => 100644 inc/lib/Twig/Node/Text.php
mode change 100755 => 100644 inc/lib/Twig/NodeInterface.php
mode change 100755 => 100644 inc/lib/Twig/NodeOutputInterface.php
mode change 100755 => 100644 inc/lib/Twig/NodeTraverser.php
mode change 100755 => 100644 inc/lib/Twig/NodeVisitor/Escaper.php
mode change 100755 => 100644 inc/lib/Twig/NodeVisitor/Optimizer.php
mode change 100755 => 100644 inc/lib/Twig/NodeVisitor/SafeAnalysis.php
mode change 100755 => 100644 inc/lib/Twig/NodeVisitor/Sandbox.php
mode change 100755 => 100644 inc/lib/Twig/NodeVisitorInterface.php
mode change 100755 => 100644 inc/lib/Twig/Parser.php
mode change 100755 => 100644 inc/lib/Twig/ParserInterface.php
mode change 100755 => 100644 inc/lib/Twig/Sandbox/SecurityError.php
mode change 100755 => 100644 inc/lib/Twig/Sandbox/SecurityPolicy.php
mode change 100755 => 100644 inc/lib/Twig/Sandbox/SecurityPolicyInterface.php
mode change 100755 => 100644 inc/lib/Twig/SimpleFilter.php
mode change 100755 => 100644 inc/lib/Twig/SimpleFunction.php
mode change 100755 => 100644 inc/lib/Twig/SimpleTest.php
mode change 100755 => 100644 inc/lib/Twig/Template.php
mode change 100755 => 100644 inc/lib/Twig/TemplateInterface.php
mode change 100755 => 100644 inc/lib/Twig/Test.php
mode change 100755 => 100644 inc/lib/Twig/Test/Function.php
mode change 100755 => 100644 inc/lib/Twig/Test/IntegrationTestCase.php
mode change 100755 => 100644 inc/lib/Twig/Test/Method.php
mode change 100755 => 100644 inc/lib/Twig/Test/Node.php
mode change 100755 => 100644 inc/lib/Twig/Test/NodeTestCase.php
mode change 100755 => 100644 inc/lib/Twig/TestCallableInterface.php
mode change 100755 => 100644 inc/lib/Twig/TestInterface.php
mode change 100755 => 100644 inc/lib/Twig/Token.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/AutoEscape.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Block.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Do.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Embed.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Extends.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Filter.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Flush.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/For.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/From.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/If.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Import.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Include.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Macro.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Sandbox.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Set.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Spaceless.php
mode change 100755 => 100644 inc/lib/Twig/TokenParser/Use.php
mode change 100755 => 100644 inc/lib/Twig/TokenParserBroker.php
mode change 100755 => 100644 inc/lib/Twig/TokenParserBrokerInterface.php
mode change 100755 => 100644 inc/lib/Twig/TokenParserInterface.php
mode change 100755 => 100644 inc/lib/Twig/TokenStream.php
diff --git a/inc/lib/Twig/Autoloader.php b/inc/lib/Twig/Autoloader.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Compiler.php b/inc/lib/Twig/Compiler.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/CompilerInterface.php b/inc/lib/Twig/CompilerInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Environment.php b/inc/lib/Twig/Environment.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Error.php b/inc/lib/Twig/Error.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Error/Loader.php b/inc/lib/Twig/Error/Loader.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Error/Runtime.php b/inc/lib/Twig/Error/Runtime.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Error/Syntax.php b/inc/lib/Twig/Error/Syntax.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/ExistsLoaderInterface.php b/inc/lib/Twig/ExistsLoaderInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/ExpressionParser.php b/inc/lib/Twig/ExpressionParser.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension.php b/inc/lib/Twig/Extension.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Core.php b/inc/lib/Twig/Extension/Core.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Debug.php b/inc/lib/Twig/Extension/Debug.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Escaper.php b/inc/lib/Twig/Extension/Escaper.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Optimizer.php b/inc/lib/Twig/Extension/Optimizer.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Sandbox.php b/inc/lib/Twig/Extension/Sandbox.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/Staging.php b/inc/lib/Twig/Extension/Staging.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Extension/StringLoader.php b/inc/lib/Twig/Extension/StringLoader.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/ExtensionInterface.php b/inc/lib/Twig/ExtensionInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Filter.php b/inc/lib/Twig/Filter.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Filter/Function.php b/inc/lib/Twig/Filter/Function.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Filter/Method.php b/inc/lib/Twig/Filter/Method.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Filter/Node.php b/inc/lib/Twig/Filter/Node.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/FilterCallableInterface.php b/inc/lib/Twig/FilterCallableInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/FilterInterface.php b/inc/lib/Twig/FilterInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Function.php b/inc/lib/Twig/Function.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Function/Function.php b/inc/lib/Twig/Function/Function.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Function/Method.php b/inc/lib/Twig/Function/Method.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Function/Node.php b/inc/lib/Twig/Function/Node.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/FunctionCallableInterface.php b/inc/lib/Twig/FunctionCallableInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/FunctionInterface.php b/inc/lib/Twig/FunctionInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Lexer.php b/inc/lib/Twig/Lexer.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/LexerInterface.php b/inc/lib/Twig/LexerInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Loader/Array.php b/inc/lib/Twig/Loader/Array.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Loader/Chain.php b/inc/lib/Twig/Loader/Chain.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Loader/Filesystem.php b/inc/lib/Twig/Loader/Filesystem.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Loader/String.php b/inc/lib/Twig/Loader/String.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/LoaderInterface.php b/inc/lib/Twig/LoaderInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Markup.php b/inc/lib/Twig/Markup.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node.php b/inc/lib/Twig/Node.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/AutoEscape.php b/inc/lib/Twig/Node/AutoEscape.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Block.php b/inc/lib/Twig/Node/Block.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/BlockReference.php b/inc/lib/Twig/Node/BlockReference.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Body.php b/inc/lib/Twig/Node/Body.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Do.php b/inc/lib/Twig/Node/Do.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Embed.php b/inc/lib/Twig/Node/Embed.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression.php b/inc/lib/Twig/Node/Expression.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Array.php b/inc/lib/Twig/Node/Expression/Array.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/AssignName.php b/inc/lib/Twig/Node/Expression/AssignName.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary.php b/inc/lib/Twig/Node/Expression/Binary.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Add.php b/inc/lib/Twig/Node/Expression/Binary/Add.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/And.php b/inc/lib/Twig/Node/Expression/Binary/And.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseAnd.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseOr.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php b/inc/lib/Twig/Node/Expression/Binary/BitwiseXor.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Concat.php b/inc/lib/Twig/Node/Expression/Binary/Concat.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Div.php b/inc/lib/Twig/Node/Expression/Binary/Div.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Equal.php b/inc/lib/Twig/Node/Expression/Binary/Equal.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/FloorDiv.php b/inc/lib/Twig/Node/Expression/Binary/FloorDiv.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Greater.php b/inc/lib/Twig/Node/Expression/Binary/Greater.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php b/inc/lib/Twig/Node/Expression/Binary/GreaterEqual.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/In.php b/inc/lib/Twig/Node/Expression/Binary/In.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Less.php b/inc/lib/Twig/Node/Expression/Binary/Less.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/LessEqual.php b/inc/lib/Twig/Node/Expression/Binary/LessEqual.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Mod.php b/inc/lib/Twig/Node/Expression/Binary/Mod.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Mul.php b/inc/lib/Twig/Node/Expression/Binary/Mul.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/NotEqual.php b/inc/lib/Twig/Node/Expression/Binary/NotEqual.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/NotIn.php b/inc/lib/Twig/Node/Expression/Binary/NotIn.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Or.php b/inc/lib/Twig/Node/Expression/Binary/Or.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Power.php b/inc/lib/Twig/Node/Expression/Binary/Power.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Range.php b/inc/lib/Twig/Node/Expression/Binary/Range.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Binary/Sub.php b/inc/lib/Twig/Node/Expression/Binary/Sub.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/BlockReference.php b/inc/lib/Twig/Node/Expression/BlockReference.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Call.php b/inc/lib/Twig/Node/Expression/Call.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Conditional.php b/inc/lib/Twig/Node/Expression/Conditional.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Constant.php b/inc/lib/Twig/Node/Expression/Constant.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/ExtensionReference.php b/inc/lib/Twig/Node/Expression/ExtensionReference.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Filter.php b/inc/lib/Twig/Node/Expression/Filter.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Filter/Default.php b/inc/lib/Twig/Node/Expression/Filter/Default.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Function.php b/inc/lib/Twig/Node/Expression/Function.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/GetAttr.php b/inc/lib/Twig/Node/Expression/GetAttr.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/MacroCall.php b/inc/lib/Twig/Node/Expression/MacroCall.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/MethodCall.php b/inc/lib/Twig/Node/Expression/MethodCall.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Name.php b/inc/lib/Twig/Node/Expression/Name.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Parent.php b/inc/lib/Twig/Node/Expression/Parent.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/TempName.php b/inc/lib/Twig/Node/Expression/TempName.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test.php b/inc/lib/Twig/Node/Expression/Test.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Constant.php b/inc/lib/Twig/Node/Expression/Test/Constant.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Defined.php b/inc/lib/Twig/Node/Expression/Test/Defined.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Divisibleby.php b/inc/lib/Twig/Node/Expression/Test/Divisibleby.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Even.php b/inc/lib/Twig/Node/Expression/Test/Even.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Null.php b/inc/lib/Twig/Node/Expression/Test/Null.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Odd.php b/inc/lib/Twig/Node/Expression/Test/Odd.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Test/Sameas.php b/inc/lib/Twig/Node/Expression/Test/Sameas.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Unary.php b/inc/lib/Twig/Node/Expression/Unary.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Unary/Neg.php b/inc/lib/Twig/Node/Expression/Unary/Neg.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Unary/Not.php b/inc/lib/Twig/Node/Expression/Unary/Not.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Expression/Unary/Pos.php b/inc/lib/Twig/Node/Expression/Unary/Pos.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Flush.php b/inc/lib/Twig/Node/Flush.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/For.php b/inc/lib/Twig/Node/For.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/ForLoop.php b/inc/lib/Twig/Node/ForLoop.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/If.php b/inc/lib/Twig/Node/If.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Import.php b/inc/lib/Twig/Node/Import.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Include.php b/inc/lib/Twig/Node/Include.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Macro.php b/inc/lib/Twig/Node/Macro.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Module.php b/inc/lib/Twig/Node/Module.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Print.php b/inc/lib/Twig/Node/Print.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Sandbox.php b/inc/lib/Twig/Node/Sandbox.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/SandboxedModule.php b/inc/lib/Twig/Node/SandboxedModule.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/SandboxedPrint.php b/inc/lib/Twig/Node/SandboxedPrint.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Set.php b/inc/lib/Twig/Node/Set.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/SetTemp.php b/inc/lib/Twig/Node/SetTemp.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Spaceless.php b/inc/lib/Twig/Node/Spaceless.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Node/Text.php b/inc/lib/Twig/Node/Text.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeInterface.php b/inc/lib/Twig/NodeInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeOutputInterface.php b/inc/lib/Twig/NodeOutputInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeTraverser.php b/inc/lib/Twig/NodeTraverser.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeVisitor/Escaper.php b/inc/lib/Twig/NodeVisitor/Escaper.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeVisitor/Optimizer.php b/inc/lib/Twig/NodeVisitor/Optimizer.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeVisitor/SafeAnalysis.php b/inc/lib/Twig/NodeVisitor/SafeAnalysis.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeVisitor/Sandbox.php b/inc/lib/Twig/NodeVisitor/Sandbox.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/NodeVisitorInterface.php b/inc/lib/Twig/NodeVisitorInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Parser.php b/inc/lib/Twig/Parser.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/ParserInterface.php b/inc/lib/Twig/ParserInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Sandbox/SecurityError.php b/inc/lib/Twig/Sandbox/SecurityError.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Sandbox/SecurityPolicy.php b/inc/lib/Twig/Sandbox/SecurityPolicy.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Sandbox/SecurityPolicyInterface.php b/inc/lib/Twig/Sandbox/SecurityPolicyInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/SimpleFilter.php b/inc/lib/Twig/SimpleFilter.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/SimpleFunction.php b/inc/lib/Twig/SimpleFunction.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/SimpleTest.php b/inc/lib/Twig/SimpleTest.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Template.php b/inc/lib/Twig/Template.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TemplateInterface.php b/inc/lib/Twig/TemplateInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test.php b/inc/lib/Twig/Test.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test/Function.php b/inc/lib/Twig/Test/Function.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test/IntegrationTestCase.php b/inc/lib/Twig/Test/IntegrationTestCase.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test/Method.php b/inc/lib/Twig/Test/Method.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test/Node.php b/inc/lib/Twig/Test/Node.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Test/NodeTestCase.php b/inc/lib/Twig/Test/NodeTestCase.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TestCallableInterface.php b/inc/lib/Twig/TestCallableInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TestInterface.php b/inc/lib/Twig/TestInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/Token.php b/inc/lib/Twig/Token.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser.php b/inc/lib/Twig/TokenParser.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/AutoEscape.php b/inc/lib/Twig/TokenParser/AutoEscape.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Block.php b/inc/lib/Twig/TokenParser/Block.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Do.php b/inc/lib/Twig/TokenParser/Do.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Embed.php b/inc/lib/Twig/TokenParser/Embed.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Extends.php b/inc/lib/Twig/TokenParser/Extends.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Filter.php b/inc/lib/Twig/TokenParser/Filter.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Flush.php b/inc/lib/Twig/TokenParser/Flush.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/For.php b/inc/lib/Twig/TokenParser/For.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/From.php b/inc/lib/Twig/TokenParser/From.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/If.php b/inc/lib/Twig/TokenParser/If.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Import.php b/inc/lib/Twig/TokenParser/Import.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Include.php b/inc/lib/Twig/TokenParser/Include.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Macro.php b/inc/lib/Twig/TokenParser/Macro.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Sandbox.php b/inc/lib/Twig/TokenParser/Sandbox.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Set.php b/inc/lib/Twig/TokenParser/Set.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Spaceless.php b/inc/lib/Twig/TokenParser/Spaceless.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParser/Use.php b/inc/lib/Twig/TokenParser/Use.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParserBroker.php b/inc/lib/Twig/TokenParserBroker.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParserBrokerInterface.php b/inc/lib/Twig/TokenParserBrokerInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenParserInterface.php b/inc/lib/Twig/TokenParserInterface.php
old mode 100755
new mode 100644
diff --git a/inc/lib/Twig/TokenStream.php b/inc/lib/Twig/TokenStream.php
old mode 100755
new mode 100644
From a9b7f9b1bc88b196a165ebb1bb74d01081d1e6fd Mon Sep 17 00:00:00 2001
From: Michael Foster
Date: Sat, 21 Sep 2013 12:51:23 +1000
Subject: [PATCH 04/26] begin implementation of in-built ban appealing
---
inc/config.php | 33 +++++++---
inc/functions.php | 34 ++++++++--
inc/mod/pages.php | 110 +++++++++++++++++++--------------
mod.php | 1 +
post.php | 41 ++++++++++++
stylesheets/style.css | 6 ++
templates/banned.html | 56 +++++++++++++++--
templates/mod/ban_appeals.html | 106 +++++++++++++++++++++++++++++++
templates/mod/dashboard.html | 3 +
9 files changed, 324 insertions(+), 66 deletions(-)
create mode 100644 templates/mod/ban_appeals.html
diff --git a/inc/config.php b/inc/config.php
index 84de9cfb..2bdd3131 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -523,9 +523,31 @@
// pure-PHP geolocation library.
$config['country_flags'] = false;
+/*
+* ====================
+* Ban settings
+* ====================
+*/
+
// Require users to see the ban page at least once for a ban even if it has since expired.
$config['require_ban_view'] = true;
+ // Show the post the user was banned for on the "You are banned" page.
+ $config['ban_show_post'] = false;
+
+ // Optional HTML to append to "You are banned" pages. For example, you could include instructions and/or
+ // a link to an email address or IRC chat room to appeal the ban.
+ $config['ban_page_extra'] = '';
+
+ // Allow users to appeal bans through Tinyboard.
+ $config['ban_appeals'] = false;
+
+ // Do not allow users to appeal bans that are shorter than this length (in seconds).
+ $config['ban_appeals_min_length'] = 60 * 60 * 6; // 6 hours
+
+ // How many ban appeals can be made for a single ban?
+ $config['ban_appeals_max'] = 1;
+
/*
* ====================
* Markup settings
@@ -821,13 +843,6 @@
// Automatically remove unnecessary whitespace when compiling HTML files from templates.
$config['minify_html'] = true;
- // Show the post the user was banned for on the "You are banned" page.
- $config['ban_show_post'] = false;
-
- // Optional HTML to append to "You are banned" pages. For example, you could include instructions and/or
- // a link to an email address or IRC chat room to appeal the ban.
- $config['ban_page_extra'] = '';
-
// Display flags (when available). This config option has no effect unless poster flags are enabled (see
// $config['country_flags']). Disable this if you want all previously-assigned flags to be hidden.
$config['display_flags'] = true;
@@ -1322,6 +1337,10 @@
$config['mod']['debug_sql'] = DISABLED;
// Edit the current configuration (via web interface)
$config['mod']['edit_config'] = ADMIN;
+ // View ban appeals
+ $config['mod']['view_ban_appeals'] = MOD;
+ // Accept and deny ban appeals
+ $config['mod']['ban_appeals'] = MOD;
// Config editor permissions
$config['mod']['config'] = array();
diff --git a/inc/functions.php b/inc/functions.php
index cfde4640..078911ea 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -625,11 +625,16 @@ function displayBan($ban) {
$ban['ip'] = $_SERVER['REMOTE_ADDR'];
if ($ban['post'] && isset($ban['post']['board'], $ban['post']['id'])) {
- openBoard($ban['post']['board']);
-
- $query = query(sprintf("SELECT `thumb`, `file` FROM ``posts_%s`` WHERE `id` = " . (int)$ban['post']['id'], $board['uri']));
- if ($_post = $query->fetch(PDO::FETCH_ASSOC)) {
- $ban['post'] = array_merge($ban['post'], $_post);
+ if (openBoard($ban['post']['board'])) {
+
+ $query = query(sprintf("SELECT `thumb`, `file` FROM ``posts_%s`` WHERE `id` = " .
+ (int)$ban['post']['id'], $board['uri']));
+ if ($_post = $query->fetch(PDO::FETCH_ASSOC)) {
+ $ban['post'] = array_merge($ban['post'], $_post);
+ } else {
+ $ban['post']['file'] = 'deleted';
+ $ban['post']['thumb'] = false;
+ }
} else {
$ban['post']['file'] = 'deleted';
$ban['post']['thumb'] = false;
@@ -641,6 +646,21 @@ function displayBan($ban) {
$post = new Thread($ban['post'], null, false, false);
}
}
+
+ $denied_appeals = array();
+ $pending_appeal = false;
+
+ if ($config['ban_appeals']) {
+ $query = query("SELECT `time`, `denied` FROM `ban_appeals` WHERE `ban_id` = " . (int)$ban['id']) or error(db_error());
+ while ($ban_appeal = $query->fetch(PDO::FETCH_ASSOC)) {
+ if ($ban_appeal['denied']) {
+ $denied_appeals[] = $ban_appeal['time'];
+ } else {
+ $pending_appeal = $ban_appeal['time'];
+ }
+ }
+ }
+
// Show banned page and exit
die(
Element('page.html', array(
@@ -651,7 +671,9 @@ function displayBan($ban) {
'config' => $config,
'ban' => $ban,
'board' => $board,
- 'post' => isset($post) ? $post->build(true) : false
+ 'post' => isset($post) ? $post->build(true) : false,
+ 'denied_appeals' => $denied_appeals,
+ 'pending_appeal' => $pending_appeal
)
))
));
diff --git a/inc/mod/pages.php b/inc/mod/pages.php
index 525a3d16..bae00a0f 100644
--- a/inc/mod/pages.php
+++ b/inc/mod/pages.php
@@ -197,37 +197,7 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
// Form a series of LIKE clauses for the query.
// This gets a little complicated.
- // Escape "escape" character
- $query = str_replace('!', '!!', $query);
-
- // Escape SQL wildcard
- $query = str_replace('%', '!%', $query);
-
- // Use asterisk as wildcard instead
- $query = str_replace('*', '%', $query);
-
- $query = str_replace('`', '!`', $query);
-
- // Array of phrases to match
- $match = array();
-
- // Exact phrases ("like this")
- if (preg_match_all('/"(.+?)"/', $query, $exact_phrases)) {
- $exact_phrases = $exact_phrases[1];
- foreach ($exact_phrases as $phrase) {
- $query = str_replace("\"{$phrase}\"", '', $query);
- $match[] = $pdo->quote($phrase);
- }
- }
-
- // Non-exact phrases (ie. plain keywords)
- $keywords = explode(' ', $query);
- foreach ($keywords as $word) {
- if (empty($word))
- continue;
- $match[] = $pdo->quote($word);
- }
-
+
// Which `field` to search?
if ($type == 'posts')
$sql_field = array('body_nomarkup', 'filename', 'subject', 'filehash', 'ip', 'name', 'trip');
@@ -238,22 +208,6 @@ function mod_search($type, $search_query_escaped, $page_no = 1) {
if ($type == 'log')
$sql_field = 'text';
- // Build the "LIKE 'this' AND LIKE 'that'" etc. part of the SQL query
- $sql_like = '';
- foreach ($match as $phrase) {
- if (!empty($sql_like))
- $sql_like .= ' AND ';
- $phrase = preg_replace('/^\'(.+)\'$/', '\'%$1%\'', $phrase);
- if (is_array($sql_field)) {
- foreach ($sql_field as $field) {
- $sql_like .= '`' . $field . '` LIKE ' . $phrase . ' ESCAPE \'!\' OR';
- }
- $sql_like = preg_replace('/ OR$/', '', $sql_like);
- } else {
- $sql_like .= '`' . $sql_field . '` LIKE ' . $phrase . ' ESCAPE \'!\'';
- }
- }
-
// Compile SQL query
@@ -884,6 +838,68 @@ function mod_bans($page_no = 1) {
mod_page(_('Ban list'), 'mod/ban_list.html', array('bans' => $bans, 'count' => Bans::count()));
}
+function mod_ban_appeals() {
+ global $config, $board;
+
+ if (!hasPermission($config['mod']['view_ban_appeals']))
+ error($config['error']['noaccess']);
+
+ // Remove stale ban appeals
+ query("DELETE FROM ``ban_appeals`` WHERE NOT EXISTS (SELECT 1 FROM ``bans`` WHERE `ban_id` = ``bans``.`id`)")
+ or error(db_error());
+
+ if (isset($_POST['appeal_id']) && (isset($_POST['unban']) || isset($_POST['deny']))) {
+ if (!hasPermission($config['mod']['ban_appeals']))
+ error($config['error']['noaccess']);
+ if (isset($_POST['unban'])) {
+ $query = query("SELECT `ban_id` FROM ``ban_appeals`` WHERE `id` = " .
+ (int)$_POST['appeal_id']) or error(db_error());
+ if ($ban_id = $query->fetchColumn()) {
+ Bans::delete($ban_id);
+ query("DELETE FROM ``ban_appeals`` WHERE `id` = " . (int)$_POST['appeal_id']) or error(db_error());
+ }
+ } else {
+ query("UPDATE ``ban_appeals`` SET `denied` = 1 WHERE `id` = " . (int)$_POST['appeal_id']) or error(db_error());
+ }
+
+ header('Location: ?/ban-appeals', true, $config['redirect_http']);
+ return;
+ }
+
+ $query = query("SELECT *, ``ban_appeals``.`id` AS `id` FROM ``ban_appeals``
+ LEFT JOIN ``bans`` ON `ban_id` = ``bans``.`id`
+ WHERE `denied` != 1 ORDER BY `time`") or error(db_error());
+ $ban_appeals = $query->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($ban_appeals as &$ban) {
+ if ($ban['post'])
+ $ban['post'] = json_decode($ban['post'], true);
+ $ban['mask'] = Bans::range_to_string(array($ban['ipstart'], $ban['ipend']));
+
+ if ($ban['post'] && isset($ban['post']['board'], $ban['post']['id'])) {
+ if (openBoard($ban['post']['board'])) {
+ $query = query(sprintf("SELECT `thumb`, `file` FROM ``posts_%s`` WHERE `id` = " .
+ (int)$ban['post']['id'], $board['uri']));
+ if ($_post = $query->fetch(PDO::FETCH_ASSOC)) {
+ $ban['post'] = array_merge($ban['post'], $_post);
+ } else {
+ $ban['post']['file'] = 'deleted';
+ $ban['post']['thumb'] = false;
+ }
+ } else {
+ $ban['post']['file'] = 'deleted';
+ $ban['post']['thumb'] = false;
+ }
+
+ if ($ban['post']['thread']) {
+ $ban['post'] = new Post($ban['post']);
+ } else {
+ $ban['post'] = new Thread($ban['post'], null, false, false);
+ }
+ }
+ }
+
+ mod_page(_('Ban appeals'), 'mod/ban_appeals.html', array('ban_appeals' => $ban_appeals));
+}
function mod_lock($board, $unlock, $post) {
global $config;
diff --git a/mod.php b/mod.php
index 6ef4644d..ca6d971e 100644
--- a/mod.php
+++ b/mod.php
@@ -59,6 +59,7 @@ $pages = array(
'/IP/([\w.:]+)/remove_note/(\d+)' => 'ip_remove_note', // remove note from ip address
'/bans' => 'bans', // ban list
'/bans/(\d+)' => 'bans', // ban list
+ '/ban-appeals' => 'ban_appeals', // view ban appeals
'/search' => 'search_redirect', // search
'/search/(posts|IP_notes|bans|log)/(.+)/(\d+)' => 'search', // search
diff --git a/post.php b/post.php
index 1328bed3..b1528870 100644
--- a/post.php
+++ b/post.php
@@ -763,6 +763,47 @@ if (isset($_POST['delete'])) {
'id' => $id
));
}
+} elseif (isset($_POST['appeal'])) {
+ if (!isset($_POST['ban_id']))
+ error($config['error']['bot']);
+
+ $ban_id = (int)$_POST['ban_id'];
+
+ $bans = Bans::find($_SERVER['REMOTE_ADDR']);
+ foreach ($bans as $_ban) {
+ if ($_ban['id'] == $ban_id) {
+ $ban = $_ban;
+ break;
+ }
+ }
+
+ if (!isset($ban)) {
+ error(_("That ban doesn't exist or is not for you."));
+ }
+
+ if ($ban['expires'] && $ban['expires'] - $ban['created'] <= $config['ban_appeals_min_length']) {
+ error(_("You cannot appeal a ban of this length."));
+ }
+
+ $query = query("SELECT `denied` FROM ``ban_appeals`` WHERE `ban_id` = $ban_id") or error(db_error());
+ $ban_appeals = $query->fetchAll(PDO::FETCH_COLUMN);
+
+ if (count($ban_appeals) >= $config['ban_appeals_max']) {
+ error(_("You cannot appeal this ban again."));
+ }
+
+ foreach ($ban_appeals as $is_denied) {
+ if (!$is_denied)
+ error(_("There is already a pending appeal for this ban."));
+ }
+
+ $query = prepare("INSERT INTO ``ban_appeals`` VALUES (NULL, :ban_id, :time, :message, 0)");
+ $query->bindValue(':ban_id', $ban_id, PDO::PARAM_INT);
+ $query->bindValue(':time', time(), PDO::PARAM_INT);
+ $query->bindValue(':message', $_POST['appeal']);
+ $query->execute() or error(db_error($query));
+
+ displayBan($ban);
} else {
if (!file_exists($config['has_installed'])) {
header('Location: install.php', true, $config['redirect_http']);
diff --git a/stylesheets/style.css b/stylesheets/style.css
index ef12a5f5..31b866ef 100644
--- a/stylesheets/style.css
+++ b/stylesheets/style.css
@@ -424,4 +424,10 @@ table.mod.config-editor input[type="text"] {
p.intro.thread-hidden {
margin: 0px;
padding: 0px;
+}
+form.ban-appeal {
+ margin: 9px 20px;
+}
+form.ban-appeal textarea {
+ display: block;
}
\ No newline at end of file
diff --git a/templates/banned.html b/templates/banned.html
index 79648156..666521a4 100644
--- a/templates/banned.html
+++ b/templates/banned.html
@@ -77,16 +77,60 @@
{% trans %}Your IP address is{% endtrans %} {{ ban.ip }}.
- {% if post %}
+ {% if config.ban_page_extra %}
+
{{ config.ban_page_extra }}
+ {% endif %}
+
+ {% if post and config.ban_show_post %}
-
You were banned for the following post on {{ board.url }}:
+
{% trans %}You were banned for the following post on {% endtrans %}{{ board.url }}:
{{ post }}
{% endif %}
- {% if config.ban_page_extra %}
-
{{ config.ban_page_extra }}
+ {% if config.ban_appeals %}
+
+ {% if pending_appeal %}
+
+ {% trans %}You submitted an appeal for this ban on{% endtrans %}
+ {{ pending_appeal|date(config.ban_date) }}. {% trans %}It is still pending{% endtrans %}.
+
+ {% trans %}You appealed this ban on{% endtrans %}
+ {{ denied_appeals[0]|date(config.ban_date) }}
+ {% trans %}and it was denied. You may not appeal this ban again.{% endtrans %}
+
+ {% else %}
+
{% trans %}You have submitted the maximum number of ban appeals allowed. You may not appeal this ban again.{% endtrans %}
+ {% trans %}You appealed this ban on{% endtrans %}
+ {{ denied_appeals[0]|date(config.ban_date) }}
+ {% trans %}and it was denied.{% endtrans %}
+
+
{% trans %}You may appeal this ban again. Please enter your reasoning below.{% endtrans %}
+ {% else %}
+
+ {% trans %}You last appealed this ban on{% endtrans %}
+ {{ denied_appeals[denied_appeals|length - 1]|date(config.ban_date) }}
+ {% trans %}and it was denied.{% endtrans %}
+
+
{% trans %}You may appeal this ban again. Please enter your reasoning below.{% endtrans %}
+ {% endif %}
+ {% else %}
+
{% trans %}You may appeal this ban. Please enter your reasoning below.{% endtrans %}
+ {% endif %}
+
+ {% endif %}
{% endif %}
-{% endfilter %}
-
+{% endfilter %}
\ No newline at end of file
diff --git a/templates/mod/ban_appeals.html b/templates/mod/ban_appeals.html
new file mode 100644
index 00000000..f43b7db5
--- /dev/null
+++ b/templates/mod/ban_appeals.html
@@ -0,0 +1,106 @@
+{% for ban in ban_appeals %}
+
+
+
+
+{% endfor %}
\ No newline at end of file
diff --git a/templates/mod/dashboard.html b/templates/mod/dashboard.html
index e2f7507d..916f0c03 100644
--- a/templates/mod/dashboard.html
+++ b/templates/mod/dashboard.html
@@ -86,6 +86,9 @@
{% if mod|hasPermission(config.mod.view_banlist) %}