Completed
Pull Request — master (#526)
by Claus
01:34
created

ViewHelperNode::abortIfRequiredArgumentsAreMissing()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 3
nop 2
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
1
<?php
2
namespace TYPO3Fluid\Fluid\Core\Parser\SyntaxTree;
3
4
/*
5
 * This file belongs to the package "TYPO3 Fluid".
6
 * See LICENSE.txt that was shipped with this package.
7
 */
8
9
use TYPO3Fluid\Fluid\Core\Parser\Exception;
10
use TYPO3Fluid\Fluid\Core\Parser\ParsingState;
11
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
12
use TYPO3Fluid\Fluid\Core\ViewHelper\ArgumentDefinition;
13
use TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperInterface;
14
15
/**
16
 * Node which will call a ViewHelper associated with this node.
17
 */
18
class ViewHelperNode extends AbstractNode
19
{
20
21
    /**
22
     * @var string
23
     */
24
    protected $viewHelperClassName;
25
26
    /**
27
     * @var NodeInterface[]
28
     */
29
    protected $arguments = [];
30
31
    /**
32
     * @var ViewHelperInterface
33
     */
34
    protected $uninitializedViewHelper = null;
35
36
    /**
37
     * @var ArgumentDefinition[]
38
     */
39
    protected $argumentDefinitions = [];
40
41
    /**
42
     * @var string
43
     */
44
    protected $pointerTemplateCode = null;
45
46
    /**
47
     * Constructor.
48
     *
49
     * @param RenderingContextInterface $renderingContext a RenderingContext, provided by invoker
50
     * @param string $namespace the namespace identifier of the ViewHelper.
51
     * @param string $identifier the name of the ViewHelper to render, inside the namespace provided.
52
     * @param NodeInterface[] $arguments Arguments of view helper - each value is a RootNode.
53
     * @param ParsingState $state
54
     */
55
    public function __construct(RenderingContextInterface $renderingContext, $namespace, $identifier, array $arguments, ParsingState $state)
0 ignored issues
show
Unused Code introduced by
The parameter $state is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
56
    {
57
        $resolver = $renderingContext->getViewHelperResolver();
58
        $this->arguments = $arguments;
59
        $this->viewHelperClassName = $resolver->resolveViewHelperClassName($namespace, $identifier);
60
        $this->uninitializedViewHelper = $resolver->createViewHelperInstanceFromClassName($this->viewHelperClassName);
61
        $this->uninitializedViewHelper->setViewHelperNode($this);
62
        // Note: RenderingContext required here though replaced later. See https://github.com/TYPO3Fluid/Fluid/pull/93
63
        $this->uninitializedViewHelper->setRenderingContext($renderingContext);
64
        $this->argumentDefinitions = $resolver->getArgumentDefinitionsForViewHelper($this->uninitializedViewHelper);
65
    }
66
67
    /**
68
     * @return ArgumentDefinition[]
69
     */
70
    public function getArgumentDefinitions()
71
    {
72
        return $this->argumentDefinitions;
73
    }
74
75
    /**
76
     * Returns the attached (but still uninitialized) ViewHelper for this ViewHelperNode.
77
     * We need this method because sometimes Interceptors need to ask some information from the ViewHelper.
78
     *
79
     * @return ViewHelperInterface
80
     */
81
    public function getUninitializedViewHelper()
82
    {
83
        return $this->uninitializedViewHelper;
84
    }
85
86
    /**
87
     * Get class name of view helper
88
     *
89
     * @return string Class Name of associated view helper
90
     */
91
    public function getViewHelperClassName()
92
    {
93
        return $this->viewHelperClassName;
94
    }
95
96
    /**
97
     * INTERNAL - only needed for compiling templates
98
     *
99
     * @return NodeInterface[]
100
     */
101
    public function getArguments()
102
    {
103
        return $this->arguments;
104
    }
105
106
    /**
107
     * INTERNAL - only needed for compiling templates
108
     *
109
     * @param string $argumentName
110
     * @return ArgumentDefinition
111
     */
112
    public function getArgumentDefinition($argumentName)
113
    {
114
        return $this->argumentDefinitions[$argumentName];
115
    }
116
117
    /**
118
     * @param NodeInterface $childNode
119
     * @return void
120
     */
121
    public function addChildNode(NodeInterface $childNode)
122
    {
123
        parent::addChildNode($childNode);
124
        $this->uninitializedViewHelper->setChildNodes($this->childNodes);
125
    }
126
127
    /**
128
     * @param string $pointerTemplateCode
129
     * @return void
130
     */
131
    public function setPointerTemplateCode($pointerTemplateCode)
132
    {
133
        $this->pointerTemplateCode = $pointerTemplateCode;
134
    }
135
136
    /**
137
     * Call the view helper associated with this object.
138
     *
139
     * First, it evaluates the arguments of the view helper.
140
     *
141
     * If the view helper implements \TYPO3Fluid\Fluid\Core\ViewHelper\ChildNodeAccessInterface,
142
     * it calls setChildNodes(array childNodes) on the view helper.
143
     *
144
     * Afterwards, checks that the view helper did not leave a variable lying around.
145
     *
146
     * @param RenderingContextInterface $renderingContext
147
     * @return string evaluated node after the view helper has been called.
148
     */
149
    public function evaluate(RenderingContextInterface $renderingContext)
150
    {
151
        return $renderingContext->getViewHelperInvoker()->invoke($this->uninitializedViewHelper, $this->arguments, $renderingContext);
152
    }
153
}
154