/** * Sets up this test case * * @return void */ public function setUp() { $this->view = $this->getAccessibleMock('TYPO3\\Fluid\\View\\StandaloneView', array('dummy'), array(), '', FALSE); $this->mockTemplateParser = $this->getMock('TYPO3\\Fluid\\Core\\Parser\\TemplateParser'); $this->mockParsedTemplate = $this->getMock('TYPO3\\Fluid\\Core\\Parser\\ParsedTemplateInterface'); $this->mockTemplateParser->expects($this->any())->method('parse')->will($this->returnValue($this->mockParsedTemplate)); $this->mockConfigurationManager = $this->getMock('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface'); $this->mockObjectManager = $this->getMock('TYPO3\\Fluid\\Object\\ObjectManagerInterface'); $this->mockObjectManager->expects($this->any())->method('get')->will($this->returnCallback(array($this, 'objectManagerCallback'))); $this->mockObjectManager->expects($this->any())->method('create')->will($this->returnCallback(array($this, 'objectManagerCallback'))); $this->mockRequest = $this->getMock('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Request'); $this->mockUriBuilder = $this->getMock('TYPO3\\CMS\\Extbase\\Mvc\\Web\\Routing\\UriBuilder'); $this->mockFlashMessages = $this->getMock('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\FlashMessages'); $this->mockContentObject = $this->getMock('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer'); $this->mockControllerContext = $this->getMock('TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerContext'); $this->mockControllerContext->expects($this->any())->method('getRequest')->will($this->returnValue($this->mockRequest)); $this->mockViewHelperVariableContainer = $this->getMock('TYPO3\\Fluid\\Core\\ViewHelper\\ViewHelperVariableContainer'); $this->mockRenderingContext = $this->getMock('TYPO3\\Fluid\\Core\\Rendering\\RenderingContext'); $this->mockRenderingContext->expects($this->any())->method('getControllerContext')->will($this->returnValue($this->mockControllerContext)); $this->mockRenderingContext->expects($this->any())->method('getViewHelperVariableContainer')->will($this->returnValue($this->mockViewHelperVariableContainer)); $this->view->injectTemplateParser($this->mockTemplateParser); $this->view->injectObjectManager($this->mockObjectManager); $this->view->setRenderingContext($this->mockRenderingContext); $this->mockTemplateCompiler = $this->getMock('TYPO3\\Fluid\\Core\\Compiler\\TemplateCompiler'); $this->view->_set('templateCompiler', $this->mockTemplateCompiler); $this->singletonInstances = \TYPO3\CMS\Core\Utility\GeneralUtility::getSingletonInstances(); \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance('TYPO3\\Fluid\\Object\\ObjectManagerInterface', $this->mockObjectManager); \TYPO3\CMS\Core\Utility\GeneralUtility::addInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer', $this->mockContentObject); }
/** * @param array $arguments * @param Closure $renderChildrenClosure * @param \TYPO3\Fluid\Core\Rendering\RenderingContextInterface $renderingContext * @return string */ public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, \TYPO3\Fluid\Core\Rendering\RenderingContextInterface $renderingContext) { $templateVariableContainer = $renderingContext->getTemplateVariableContainer(); if ($arguments['each'] === NULL) { return ''; } if (is_object($arguments['each']) && !$arguments['each'] instanceof \Traversable) { throw new \TYPO3\Fluid\Core\ViewHelper\Exception('ForViewHelper only supports arrays and objects implementing Traversable interface', 1248728393); } if ($arguments['reverse'] === TRUE) { // array_reverse only supports arrays if (is_object($arguments['each'])) { $arguments['each'] = iterator_to_array($arguments['each']); } $arguments['each'] = array_reverse($arguments['each']); } $iterationData = array('index' => 0, 'cycle' => 1, 'total' => count($arguments['each'])); $output = ''; foreach ($arguments['each'] as $keyValue => $singleElement) { $templateVariableContainer->add($arguments['as'], $singleElement); if ($arguments['key'] !== '') { $templateVariableContainer->add($arguments['key'], $keyValue); } if ($arguments['iteration'] !== NULL) { $iterationData['isFirst'] = $iterationData['cycle'] === 1; $iterationData['isLast'] = $iterationData['cycle'] === $iterationData['total']; $iterationData['isEven'] = $iterationData['cycle'] % 2 === 0; $iterationData['isOdd'] = !$iterationData['isEven']; $templateVariableContainer->add($arguments['iteration'], $iterationData); $iterationData['index']++; $iterationData['cycle']++; } $output .= $renderChildrenClosure(); $templateVariableContainer->remove($arguments['as']); if ($arguments['key'] !== '') { $templateVariableContainer->remove($arguments['key']); } if ($arguments['iteration'] !== NULL) { $templateVariableContainer->remove($arguments['iteration']); } } return $output; }
/** * Assigns multiple values to the JSON output. * However, only the key "value" is accepted. * * @param array $values Keys and values - only a value with key "value" is considered * @return \TYPO3\Fluid\View\AbstractTemplateView the instance of this view to allow chaining * @api */ public function assignMultiple(array $values) { $templateVariableContainer = $this->baseRenderingContext->getTemplateVariableContainer(); foreach ($values as $key => $value) { if ($templateVariableContainer->exists($key)) { $templateVariableContainer->remove($key); } $templateVariableContainer->add($key, $value); } return $this; }
/** * @param array $arguments * @param \Closure $renderChildrenClosure * @param RenderingContextInterface $renderingContext * @return string * @throws ViewHelper\Exception */ public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) { $templateVariableContainer = $renderingContext->getTemplateVariableContainer(); if ($arguments['each'] === NULL) { return ''; } if (!is_array($arguments['each'])) { throw new ViewHelper\Exception('DataSheetViewHelper only supports arrays and objects', 1248728393); } $iterationData = array('index' => 0, 'cycle' => 1, 'total' => count($arguments['each'])); $output = ''; foreach ($arguments['each'] as $keyValue => $singleElement) { $templateVariableContainer->add($arguments['as'], $singleElement); if ($arguments['key'] !== '') { $templateVariableContainer->add($arguments['key'], $keyValue); } if ($arguments['iteration'] !== NULL) { $iterationData['isFirst'] = $iterationData['cycle'] === 1; $iterationData['isLast'] = $iterationData['cycle'] === $iterationData['total']; $iterationData['isEven'] = $iterationData['cycle'] % 2 === 0; $iterationData['isOdd'] = !$iterationData['isEven']; $templateVariableContainer->add($arguments['iteration'], $iterationData); $iterationData['index']++; $iterationData['cycle']++; } $output .= $renderChildrenClosure(); $templateVariableContainer->remove($arguments['as']); if ($arguments['key'] !== '') { $templateVariableContainer->remove($arguments['key']); } if ($arguments['iteration'] !== NULL) { $templateVariableContainer->remove($arguments['iteration']); } } return $output; }
/** * Renders a section on its own, i.e. without the a surrounding template. * * In this case, we just emulate that a surrounding (empty) layout exists, * and trigger the normal rendering flow then. * * @param string $sectionName Name of section to render * @param array $variables The variables to use * @param boolean $ignoreUnknown Ignore an unknown section and just return an empty string * @return string rendered template for the section */ protected function renderStandaloneSection($sectionName, array $variables = NULL, $ignoreUnknown = FALSE) { $templateIdentifier = $this->getTemplateIdentifier(); if ($this->templateCompiler->has($templateIdentifier)) { $parsedTemplate = $this->templateCompiler->get($templateIdentifier); } else { $this->templateParser->setConfiguration($this->buildParserConfiguration()); $parsedTemplate = $this->templateParser->parse($this->getTemplateSource()); if ($parsedTemplate->isCompilable()) { $this->templateCompiler->store($templateIdentifier, $parsedTemplate); } } $this->baseRenderingContext->setControllerContext($this->controllerContext); $this->startRendering(self::RENDERING_LAYOUT, $parsedTemplate, $this->baseRenderingContext); $output = $this->renderSection($sectionName, $variables, $ignoreUnknown); $this->stopRendering(); return $output; }
/** * @param RenderingContextInterface $renderingContext * @return void */ public function setRenderingContext(RenderingContextInterface $renderingContext) { $this->renderingContext = $renderingContext; $this->templateVariableContainer = $renderingContext->getTemplateVariableContainer(); if ($renderingContext->getControllerContext() !== NULL) { $this->controllerContext = $renderingContext->getControllerContext(); } $this->viewHelperVariableContainer = $renderingContext->getViewHelperVariableContainer(); }
/** * @test */ public function viewHelperVariableContainerCanBeReadCorrectly() { $viewHelperVariableContainer = $this->getMock(\TYPO3\Fluid\Core\ViewHelper\ViewHelperVariableContainer::class); $this->renderingContext->injectViewHelperVariableContainer($viewHelperVariableContainer); $this->assertSame($viewHelperVariableContainer, $this->renderingContext->getViewHelperVariableContainer()); }
/** * @param \TYPO3\Fluid\Core\Rendering\RenderingContextInterface $renderingContext * @return void */ public function setRenderingContext(\TYPO3\Fluid\Core\Rendering\RenderingContextInterface $renderingContext) { $this->renderingContext = $renderingContext; $this->templateVariableContainer = $renderingContext->getTemplateVariableContainer(); $this->viewHelperVariableContainer = $renderingContext->getViewHelperVariableContainer(); }