[TASK] Remove closing PHP tags
[Packages/TYPO3.CMS.git] / typo3 / sysext / fluid / Classes / ViewHelpers / RenderChildrenViewHelper.php
1 <?php
2 namespace TYPO3\CMS\Fluid\ViewHelpers;
3
4 /*
5 * This script is backported from the TYPO3 Flow package "TYPO3.Fluid". *
6 * *
7 * It is free software; you can redistribute it and/or modify it under *
8 * the terms of the GNU Lesser General Public License, either version 3 *
9 * of the License, or (at your option) any later version. *
10 * *
11 * *
12 * This script is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- *
14 * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser *
15 * General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU Lesser General Public *
18 * License along with the script. *
19 * If not, see http://www.gnu.org/licenses/lgpl.html *
20 * *
21 * The TYPO3 project - inspiring people to share! *
22 * */
23 /**
24 * Render the inner parts of a Widget.
25 * This ViewHelper can only be used in a template which belongs to a Widget Controller.
26 *
27 * It renders everything inside the Widget ViewHelper, and you can pass additional
28 * arguments.
29 *
30 * @api
31 */
32 class RenderChildrenViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
33
34 /**
35 * @param array $arguments
36 * @return string
37 */
38 public function render(array $arguments = array()) {
39 $renderingContext = $this->getWidgetRenderingContext();
40 $widgetChildNodes = $this->getWidgetChildNodes();
41 $this->addArgumentsToTemplateVariableContainer($arguments);
42 $output = $widgetChildNodes->evaluate($renderingContext);
43 $this->removeArgumentsFromTemplateVariableContainer($arguments);
44 return $output;
45 }
46
47 /**
48 * Get the widget rendering context, or throw an exception if it cannot be found.
49 *
50 * @throws \TYPO3\CMS\Fluid\Core\Widget\Exception\RenderingContextNotFoundException
51 * @return \TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface
52 */
53 protected function getWidgetRenderingContext() {
54 $renderingContext = $this->getWidgetContext()->getViewHelperChildNodeRenderingContext();
55 if (!$renderingContext instanceof \TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface) {
56 throw new \TYPO3\CMS\Fluid\Core\Widget\Exception\RenderingContextNotFoundException('Rendering Context not found inside Widget. <f:renderChildren> has been used in an AJAX Request, but is only usable in non-ajax mode.', 1284986604);
57 }
58 return $renderingContext;
59 }
60
61 /**
62 * @return \TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\RootNode
63 */
64 protected function getWidgetChildNodes() {
65 return $this->getWidgetContext()->getViewHelperChildNodes();
66 }
67
68 /**
69 * @throws \TYPO3\CMS\Fluid\Core\Widget\Exception\WidgetRequestNotFoundException
70 * @return \TYPO3\CMS\Fluid\Core\Widget\WidgetContext
71 */
72 protected function getWidgetContext() {
73 $request = $this->controllerContext->getRequest();
74 if (!$request instanceof \TYPO3\CMS\Fluid\Core\Widget\WidgetRequest) {
75 throw new \TYPO3\CMS\Fluid\Core\Widget\Exception\WidgetRequestNotFoundException('The Request is not a WidgetRequest! <f:renderChildren> must be called inside a Widget Template.', 1284986120);
76 }
77 return $request->getWidgetContext();
78 }
79
80 /**
81 * Add the given arguments to the TemplateVariableContainer of the widget.
82 *
83 * @param array $arguments
84 * @return void
85 */
86 protected function addArgumentsToTemplateVariableContainer(array $arguments) {
87 $templateVariableContainer = $this->getWidgetRenderingContext()->getTemplateVariableContainer();
88 foreach ($arguments as $identifier => $value) {
89 $templateVariableContainer->add($identifier, $value);
90 }
91 }
92
93 /**
94 * Remove the given arguments from the TemplateVariableContainer of the widget.
95 *
96 * @param array $arguments
97 * @return void
98 */
99 protected function removeArgumentsFromTemplateVariableContainer(array $arguments) {
100 $templateVariableContainer = $this->getWidgetRenderingContext()->getTemplateVariableContainer();
101 foreach ($arguments as $identifier => $value) {
102 $templateVariableContainer->remove($identifier);
103 }
104 }
105 }