, dreipunktnull * * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Utility\RootlineUtility; use TYPO3\CMS\Fluid\ViewHelpers\Uri\ActionViewHelper; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; /** * f:uri.action for the AJAX plugin: picks the page type from the format and links to the * root page unless a page is given. The core ViewHelper is final, so it is invoked instead * of extended. */ class AjaxViewHelper extends AbstractViewHelper { const PAGE_TYPE_JSON = 1701; const PAGE_TYPE_HTML = 1702; public function initializeArguments(): void { $this->registerArgument('action', 'string', 'Target action'); $this->registerArgument('arguments', 'array', 'Arguments for the controller action', false, []); $this->registerArgument('controller', 'string', 'Target controller'); $this->registerArgument('extensionName', 'string', 'Target extension name', false, 'epproducts'); $this->registerArgument('pluginName', 'string', 'Target plugin name', false, 'Ajax'); $this->registerArgument('pageUid', 'int', 'Target page, defaults to the root page'); $this->registerArgument('format', 'string', 'The requested format, json or html', false, 'json'); } public function render(): string { $arguments = $this->arguments; // Determine page type from format argument if (strtolower(trim($arguments['format'])) === 'json') { $arguments['pageType'] = self::PAGE_TYPE_JSON; } else { $arguments['pageType'] = self::PAGE_TYPE_HTML; } // Reset argument to keep it out of resulting url unset($arguments['format']); // Use root page uid as target unless provided if ($arguments['pageUid'] === null) { /** @var ServerRequestInterface $request */ $request = $this->renderingContext->getAttribute(ServerRequestInterface::class); $rootlineUtility = new RootlineUtility($request->getAttribute('frontend.page.information')->getId()); $rootline = $rootlineUtility->get(); $rootPage = array_pop($rootline); $arguments['pageUid'] = $rootPage['uid']; } // Force absolute urls $arguments['absolute'] = true; return (string)$this->renderingContext->getViewHelperInvoker()->invoke( ActionViewHelper::class, $arguments, $this->renderingContext, $this->buildRenderChildrenClosure() ); } }