Merge "[TASK] Increase version number"
[Packages/TYPO3.CMS.git] / typo3 / sysext / fluid / Classes / ViewHelpers / RenderChildrenViewHelper.php
1 <?php
2
3 /*
4 * This script is backported from the FLOW3 package "TYPO3.Fluid". *
5 * *
6 * It is free software; you can redistribute it and/or modify it under *
7 * the terms of the GNU Lesser General Public License, either version 3 *
8 * of the License, or (at your option) any later version. *
9 * *
10 * *
11 * This script is distributed in the hope that it will be useful, but *
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- *
13 * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser *
14 * General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU Lesser General Public *
17 * License along with the script. *
18 * If not, see http://www.gnu.org/licenses/lgpl.html *
19 * *
20 * The TYPO3 project - inspiring people to share! *
21 * */
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 Tx_Fluid_ViewHelpers_RenderChildrenViewHelper extends Tx_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
42 $this->addArgumentsToTemplateVariableContainer($arguments);
43 $output = $widgetChildNodes->evaluate($renderingContext);
44 $this->removeArgumentsFromTemplateVariableContainer($arguments);
45
46 return $output;
47 }
48
49 /**
50 * Get the widget rendering context, or throw an exception if it cannot be found.
51 *
52 * @return Tx_Fluid_Core_Rendering_RenderingContextInterface
53 */
54 protected function getWidgetRenderingContext() {
55 $renderingContext = $this->getWidgetContext()->getViewHelperChildNodeRenderingContext();
56 if (!($renderingContext instanceof Tx_Fluid_Core_Rendering_RenderingContextInterface)) {
57 throw new Tx_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);
58 }
59 return $renderingContext;
60 }
61
62 /**
63 * @return Tx_Fluid_Core_Parser_SyntaxTree_RootNode
64 */
65 protected function getWidgetChildNodes() {
66 return $this->getWidgetContext()->getViewHelperChildNodes();
67 }
68
69 /**
70 * @return Tx_Fluid_Core_Widget_WidgetContext
71 */
72 protected function getWidgetContext() {
73 $request = $this->controllerContext->getRequest();
74 if (!($request instanceof Tx_Fluid_Core_Widget_WidgetRequest)) {
75 throw new Tx_Fluid_Core_Widget_Exception_WidgetRequestNotFoundException('The Request is not a WidgetRequest! <f:renderChildren> must be called inside a Widget Template.', 1284986120);
76 }
77
78 return $request->getWidgetContext();
79 }
80
81 /**
82 * Add the given arguments to the TemplateVariableContainer of the widget.
83 *
84 * @param array $arguments
85 * @return void
86 */
87 protected function addArgumentsToTemplateVariableContainer(array $arguments) {
88 $templateVariableContainer = $this->getWidgetRenderingContext()->getTemplateVariableContainer();
89 foreach ($arguments as $identifier => $value) {
90 $templateVariableContainer->add($identifier, $value);
91 }
92 }
93
94 /**
95 * Remove the given arguments from the TemplateVariableContainer of the widget.
96 *
97 * @param array $arguments
98 * @return void
99 */
100 protected function removeArgumentsFromTemplateVariableContainer(array $arguments) {
101 $templateVariableContainer = $this->getWidgetRenderingContext()->getTemplateVariableContainer();
102 foreach ($arguments as $identifier => $value) {
103 $templateVariableContainer->remove($identifier);
104 }
105 }
106 }
107 ?>