[FEATURE] Fallback/default case for SwitchViewhelper
[Packages/TYPO3.CMS.git] / typo3 / sysext / fluid / Classes / ViewHelpers / CaseViewHelper.php
index 21a834f..28bc487 100644 (file)
@@ -20,20 +20,26 @@ namespace TYPO3\CMS\Fluid\ViewHelpers;
 class CaseViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
 
        /**
-        * @param mixed $value
-        * @return string the contents of this view helper if $value equals the expression of the surrounding switch view helper, otherwise an empty string
+        * @param mixed $value The switch value. If it matches, the child will be rendered
+        * @param boolean $default If this is set, this child will be rendered, if none else matches
+        *
+        * @return string the contents of this view helper if $value equals the expression of the surrounding switch view helper, or $default is TRUE. otherwise an empty string
         * @throws \TYPO3\CMS\Fluid\Core\ViewHelper\Exception
+        *
         * @api
         */
-       public function render($value) {
+       public function render($value = NULL, $default = FALSE) {
                $viewHelperVariableContainer = $this->renderingContext->getViewHelperVariableContainer();
                if (!$viewHelperVariableContainer->exists('TYPO3\CMS\Fluid\ViewHelpers\SwitchViewHelper', 'switchExpression')) {
                        throw new \TYPO3\CMS\Fluid\Core\ViewHelper\Exception('The case View helper can only be used within a switch View helper', 1368112037);
                }
+               if (is_null($value) && $default === FALSE) {
+                       throw new \TYPO3\CMS\Fluid\Core\ViewHelper\Exception('The case View helper must have either value or default argument', 1382867521);
+               }
                $switchExpression = $viewHelperVariableContainer->get('TYPO3\CMS\Fluid\ViewHelpers\SwitchViewHelper', 'switchExpression');
 
                // non-type-safe comparison by intention
-               if ($switchExpression == $value) {
+               if ($default === TRUE || $switchExpression == $value) {
                        $viewHelperVariableContainer->addOrUpdate('TYPO3\CMS\Fluid\ViewHelpers\SwitchViewHelper', 'break', TRUE);
                        return $this->renderChildren();
                }