diff --git a/Classes/ViewHelpers/Backend/EditOnClickViewHelper.php b/Classes/ViewHelpers/Backend/EditOnClickViewHelper.php index 9645ebf43252d074dd791cd6151da6863d22f80b..2d3cbb0d57a1ebe15c913922a3c2f78fdc5257db 100644 --- a/Classes/ViewHelpers/Backend/EditOnClickViewHelper.php +++ b/Classes/ViewHelpers/Backend/EditOnClickViewHelper.php @@ -28,7 +28,10 @@ namespace SGalinski\SgNews\ViewHelpers\Backend; use SGalinski\SgNews\Utility\BackendNewsUtility; use SGalinski\SgNews\ViewHelpers\AbstractViewHelper; -use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Backend\Routing\Exception\RouteNotFoundException; +use TYPO3\CMS\Backend\Routing\UriBuilder; +use TYPO3\CMS\Core\Utility\ArrayUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; /** * Class EditOnClickViewHelper @@ -52,18 +55,36 @@ class EditOnClickViewHelper extends AbstractViewHelper { * @return string */ public function render(): string { - $table = $this->arguments['table']; - $uid = $this->arguments['uid']; - $new = $this->arguments['new']; - $type = $this->arguments['type']; - $additionalParameters = ''; - if ($new && $table === 'pages' && in_array($type, ['news', 'category'], TRUE)) { - $additionalParameters = '&overrideVals[pages][doktype]=' . - ($type === 'news' ? BackendNewsUtility::NEWS_DOKTYPE : BackendNewsUtility::CATEGORY_DOKTYPE); + $additionalParameters = []; + if ($this->arguments['new'] && $this->arguments['table'] === 'pages' && in_array($this->arguments['type'], ['news', 'category'], TRUE)) { + $additionalParameters = [ + 'overrideVals' => + [ + 'pages' => + [ + 'doktype' => $this->arguments['type'] === 'news' ? BackendNewsUtility::NEWS_DOKTYPE : BackendNewsUtility::CATEGORY_DOKTYPE + ] + ] + ]; + } + $parameters = [ + 'edit' => [ + $this->arguments['table'] => [ + $this->arguments['uid'] => [ + $this->arguments['new'] ? 'new' : 'edit' + ] + ] + ], + 'returnUrl' => rawurlencode(GeneralUtility::getIndpEnv('REQUEST_URI')) + ]; + ArrayUtility::mergeRecursiveWithOverrule($parameters, $additionalParameters); + try { + return GeneralUtility::makeInstance(UriBuilder::class)->buildUriFromRoute( + 'record_edit', + $parameters + ); + } catch (RouteNotFoundException $exception) { + return ''; } - - return BackendUtility::editOnClick( - '&edit[' . $table . '][' . $uid . ']=' . ($new ? 'new' : 'edit') . $additionalParameters, '', -1 - ); } }