/** * @test */ public function theRepresentationFormatCanBeSetAndRetrieved() { $this->actionRequest->setFormat('html'); $this->assertEquals('html', $this->actionRequest->getFormat()); $this->actionRequest->setFormat('doc'); $this->assertEquals('doc', $this->actionRequest->getFormat()); $this->actionRequest->setFormat('hTmL'); $this->assertEquals('html', $this->actionRequest->getFormat()); }
/** * @param array $module * @return mixed */ public function indexAction(array $module) { $moduleRequest = new ActionRequest($this->request); $moduleRequest->setArgumentNamespace('moduleArguments'); $moduleRequest->setControllerObjectName($module['controller']); $moduleRequest->setControllerActionName($module['action']); if (isset($module['format'])) { $moduleRequest->setFormat($module['format']); } if ($this->request->hasArgument($moduleRequest->getArgumentNamespace()) === true && is_array($this->request->getArgument($moduleRequest->getArgumentNamespace()))) { $moduleRequest->setArguments($this->request->getArgument($moduleRequest->getArgumentNamespace())); } foreach ($this->request->getPluginArguments() as $argumentNamespace => $argument) { $moduleRequest->setArgument('--' . $argumentNamespace, $argument); } $modules = explode('/', $module['module']); $moduleConfiguration = Arrays::getValueByPath($this->settings['modules'], implode('.submodules.', $modules)); $moduleConfiguration['path'] = $module['module']; if (!$this->menuHelper->isModuleEnabled($moduleConfiguration['path'])) { throw new DisabledModuleException(sprintf('The module "%s" is disabled. You can enable it with the "enabled" flag in Settings.yaml.', $module['module']), 1437148922); } $moduleBreadcrumb = array(); $path = array(); foreach ($modules as $moduleIdentifier) { array_push($path, $moduleIdentifier); $config = Arrays::getValueByPath($this->settings['modules'], implode('.submodules.', $path)); $moduleBreadcrumb[implode('/', $path)] = $config; } $moduleRequest->setArgument('__moduleConfiguration', $moduleConfiguration); $moduleResponse = new Response($this->response); $this->dispatcher->dispatch($moduleRequest, $moduleResponse); if ($moduleResponse->hasHeader('Location')) { $this->redirectToUri($moduleResponse->getHeader('Location'), 0, $moduleResponse->getStatusCode()); } elseif ($moduleRequest->getFormat() !== 'html') { $mediaType = MediaTypes::getMediaTypeFromFilename('file.' . $moduleRequest->getFormat()); if ($mediaType !== 'application/octet-stream') { $this->controllerContext->getResponse()->setHeader('Content-Type', $mediaType); } return $moduleResponse->getContent(); } else { $user = $this->securityContext->getPartyByType('TYPO3\\Neos\\Domain\\Model\\User'); $sites = $this->menuHelper->buildSiteList($this->controllerContext); $this->view->assignMultiple(array('moduleClass' => implode('-', $modules), 'moduleContents' => $moduleResponse->getContent(), 'title' => $moduleRequest->hasArgument('title') ? $moduleRequest->getArgument('title') : $moduleConfiguration['label'], 'rootModule' => array_shift($modules), 'submodule' => array_shift($modules), 'moduleConfiguration' => $moduleConfiguration, 'moduleBreadcrumb' => $moduleBreadcrumb, 'user' => $user, 'modules' => $this->menuHelper->buildModuleList($this->controllerContext), 'sites' => $sites)); } }
/** * Initializes the controller * * This method should be called by the concrete processRequest() method. * * @param \TYPO3\Flow\Mvc\RequestInterface $request * @param \TYPO3\Flow\Mvc\ResponseInterface $response * @throws \TYPO3\Flow\Mvc\Exception\UnsupportedRequestTypeException */ protected function initializeController(\TYPO3\Flow\Mvc\RequestInterface $request, \TYPO3\Flow\Mvc\ResponseInterface $response) { if (!$request instanceof ActionRequest) { throw new \TYPO3\Flow\Mvc\Exception\UnsupportedRequestTypeException(get_class($this) . ' only supports action requests – requests of type "' . get_class($request) . '" given.', 1187701131); } $this->request = $request; $this->request->setDispatched(true); $this->response = $response; $this->uriBuilder = new UriBuilder(); $this->uriBuilder->setRequest($this->request); $this->arguments = new Arguments(array()); $this->controllerContext = new ControllerContext($this->request, $this->response, $this->arguments, $this->uriBuilder); $mediaType = $request->getHttpRequest()->getNegotiatedMediaType($this->supportedMediaTypes); if ($mediaType === null) { $this->throwStatus(406); } if ($request->getFormat() === null) { $this->request->setFormat(MediaTypes::getFilenameExtensionFromMediaType($mediaType)); } }
/** * Tests the wrong interceptor behavior described in ticket FLOW-430 * Basically the rendering should be consistent regardless of cache flushes, * but due to the way the interceptor configuration was build the second second * rendering was bound to fail, this should never happen. * * @test */ public function interceptorsWorkInPartialRenderedInStandaloneSection() { $httpRequest = Request::create(new Uri('http://localhost')); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setFormat('html'); $standaloneView = new StandaloneView($actionRequest, $this->standaloneViewNonce); $standaloneView->assign('hack', '<h1>HACK</h1>'); $standaloneView->setTemplatePathAndFilename(__DIR__ . '/Fixtures/NestedRenderingConfiguration/TemplateWithSection.txt'); $expected = 'Christian uses <h1>HACK</h1>'; $actual = trim($standaloneView->renderSection('test')); $this->assertSame($expected, $actual, 'First rendering was not escaped.'); // To avoid any side effects we create a separate accessible mock to find the cache identifier for the partial $dummyTemplateView = $this->getAccessibleMock(StandaloneView::class, null, array($actionRequest, $this->standaloneViewNonce)); $partialCacheIdentifier = $dummyTemplateView->_call('createIdentifierForFile', __DIR__ . '/Fixtures/NestedRenderingConfiguration/Partials/Test.html', 'partial_Test'); $templateCache = $this->objectManager->get(CacheManager::class)->getCache('Fluid_TemplateCache'); $templateCache->remove($partialCacheIdentifier); $expected = 'Christian uses <h1>HACK</h1>'; $actual = trim($standaloneView->renderSection('test')); $this->assertSame($expected, $actual, 'Second rendering was not escaped.'); }
/** * @test */ public function xmlNamespacesCanBeIgnored() { $httpRequest = Request::create(new Uri('http://localhost')); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setFormat('txt'); $standaloneView = new Fixtures\View\StandaloneView($actionRequest, $this->standaloneViewNonce); $standaloneView->setTemplatePathAndFilename(__DIR__ . '/Fixtures/TestTemplateWithCustomNamespaces.txt'); $standaloneView->setLayoutRootPath(__DIR__ . '/Fixtures/SpecialLayouts'); $expected = '<foo:bar /><bar:foo></bar:foo><foo.bar:baz />foobar'; $actual = $standaloneView->render(); $this->assertSame($expected, $actual); }
/** * @test */ public function explicitLayoutPathIsUsed() { $httpRequest = Request::create(new Uri('http://localhost')); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setFormat('txt'); $standaloneView = new StandaloneView($actionRequest, $this->standaloneViewNonce); $standaloneView->setTemplatePathAndFilename(__DIR__ . '/Fixtures/TestTemplateWithLayout.txt'); $standaloneView->setLayoutRootPath(__DIR__ . '/Fixtures/SpecialLayouts'); $expected = 'Hey -- overridden -- HEY HO'; $actual = $standaloneView->render(); $this->assertSame($expected, $actual); }
/** * @test */ public function theRepresentationFormatCanBeSetAndRetrieved() { $httpRequest = HttpRequest::create(new Uri('http://foo.com')); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setFormat('html'); $this->assertEquals('html', $actionRequest->getFormat()); $actionRequest->setFormat('doc'); $this->assertEquals('doc', $actionRequest->getFormat()); $actionRequest->setFormat('hTmL'); $this->assertEquals('html', $actionRequest->getFormat()); }
/** * @test */ public function redirectUsesRequestFormatAsDefaultAndUnsetsSubPackageKeyIfNeccessary() { $arguments = array('foo' => 'bar'); $request = new ActionRequest(HttpRequest::create(new Uri('http://localhost/foo.json'))); $request->setFormat('json'); $response = new HttpResponse(); $mockUriBuilder = $this->getMock('TYPO3\\Flow\\Mvc\\Routing\\UriBuilder'); $mockUriBuilder->expects($this->once())->method('reset')->will($this->returnValue($mockUriBuilder)); $mockUriBuilder->expects($this->once())->method('setFormat')->with('json')->will($this->returnValue($mockUriBuilder)); $mockUriBuilder->expects($this->once())->method('setCreateAbsoluteUri')->will($this->returnValue($mockUriBuilder)); $mockUriBuilder->expects($this->once())->method('uriFor')->with('show', $arguments, 'Stuff', 'Super', NULL)->will($this->returnValue('the uri')); $controller = $this->getAccessibleMock('TYPO3\\Flow\\Mvc\\Controller\\AbstractController', array('processRequest', 'redirectToUri')); $this->inject($controller, 'flashMessageContainer', new FlashMessageContainer()); $controller->_call('initializeController', $request, $response); $this->inject($controller, 'uriBuilder', $mockUriBuilder); $controller->expects($this->once())->method('redirectToUri')->with('the uri'); $controller->_call('redirect', 'show', 'Stuff', 'Super', $arguments); }