Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/View/RenderTokenParser.php')
-rw-r--r--core/View/RenderTokenParser.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/core/View/RenderTokenParser.php b/core/View/RenderTokenParser.php
new file mode 100644
index 0000000000..14f1eb6806
--- /dev/null
+++ b/core/View/RenderTokenParser.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\View;
+
+use Twig_Token;
+use Twig_TokenParser;
+use Twig_Node_Expression_MethodCall;
+use Twig_Node_Expression_Array;
+use Twig_Node_Include;
+use Exception;
+
+/**
+ * Defines a new Twig tag that will render a Piwik View.
+ *
+ * Use the tag like this:
+ *
+ * {% render theView %}
+ *
+ * where `theView` is a variable referencing a View instance.
+ */
+class RenderTokenParser extends Twig_TokenParser
+{
+ /**
+ * Parses the Twig stream and creates a Twig_Node_Include instance that includes
+ * the View's template.
+ *
+ * @return Twig_Node_Include
+ */
+ public function parse(Twig_Token $token)
+ {
+ $parser = $this->parser;
+ $stream = $parser->getStream();
+
+ $view = $parser->getExpressionParser()->parseExpression();
+
+ $variablesOverride = null;
+ if ($stream->nextIf(Twig_Token::NAME_TYPE, 'with')) {
+ $variablesOverride = $this->parser->getExpressionParser()->parseExpression();
+ }
+
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+ $viewTemplateExpr = new Twig_Node_Expression_MethodCall(
+ $view,
+ 'getTemplateFile',
+ new Twig_Node_Expression_Array(array(), $token->getLine()),
+ $token->getLine()
+ );
+
+ $variablesOverrideExpr = $variablesOverride === null ? array() : array($variablesOverride);
+ $variablesExpr = new Twig_Node_Expression_MethodCall(
+ $view,
+ 'getTemplateVars',
+ new Twig_Node_Expression_Array($variablesOverrideExpr, $token->getLine()),
+ $token->getLine()
+ );
+
+ return new Twig_Node_Include(
+ $viewTemplateExpr,
+ $variablesExpr,
+ $only = false,
+ $ignoreMissing = false,
+ $token->getLine()
+ );
+ }
+
+ /**
+ * Returns the tag identifier.
+ *
+ * @return string
+ */
+ public function getTag()
+ {
+ return 'render';
+ }
+} \ No newline at end of file