diff --git a/Classes/Service/LicensingService.php b/Classes/Service/LicensingService.php index 3b9343580f67017205af4545f84dc88a044ac3e2..73a0f340e0671f677b465515722eb2fa5c721980 100644 --- a/Classes/Service/LicensingService.php +++ b/Classes/Service/LicensingService.php @@ -30,6 +30,7 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use SGalinski\SgNews\Utility\ExtensionUtility; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; +use TYPO3\CMS\Core\Http\NullResponse; use TYPO3\CMS\Core\Utility\GeneralUtility; /** @@ -104,13 +105,14 @@ class LicensingService { * @return ResponseInterface * @throws \InvalidArgumentException */ - public function ajaxPing(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { + public function ajaxPing(ServerRequestInterface $request, ResponseInterface $response = NULL): ResponseInterface { /** @var BackendUserAuthentication $backendUser */ $backendUser = $GLOBALS['BE_USER']; if ($backendUser && !$backendUser->getModuleData('tools_beuser/index.php/web_SgNewsNews_pinged', 'ses')) { $backendUser->pushModuleData('tools_beuser/index.php/web_SgNewsNews_pinged', TRUE); self::ping(); } - return $response; + + return $response ?? new NullResponse(); } } diff --git a/Classes/ViewHelpers/Backend/TranslationLinksViewHelper.php b/Classes/ViewHelpers/Backend/TranslationLinksViewHelper.php index 352743e06104f4fb9a08c92c24211b116446e1dc..5659c8a14d232caeb25422da2b44aca6fb4e519e 100644 --- a/Classes/ViewHelpers/Backend/TranslationLinksViewHelper.php +++ b/Classes/ViewHelpers/Backend/TranslationLinksViewHelper.php @@ -29,11 +29,13 @@ namespace SGalinski\SgNews\ViewHelpers\Backend; use SGalinski\SgNews\Service\LicensingService; use SGalinski\SgNews\Utility\BackendNewsUtility; use SGalinski\SgNews\ViewHelpers\AbstractViewHelper; +use TYPO3\CMS\Backend\Routing\UriBuilder; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Imaging\Icon; use TYPO3\CMS\Core\Imaging\IconFactory; use TYPO3\CMS\Core\Type\Icon\IconState; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Utility\VersionNumberUtility; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; /** @@ -65,10 +67,12 @@ class TranslationLinksViewHelper extends AbstractViewHelper { if (!LicensingService::checkKey()) { return $out; } + $table = trim($table); if ($table !== 'pages' && !isset($GLOBALS['TCA'][$table]['ctrl']['languageField'])) { return $out; } + $uid = (int) $uid; $pageUid = (int) $pageUid; $row = BackendUtility::getRecord($table, $uid); @@ -86,14 +90,17 @@ class TranslationLinksViewHelper extends AbstractViewHelper { } else { $languages = BackendNewsUtility::getAvailableLanguages($pageUid); } + $editLabel = LocalizationUtility::translate('backend.action.edit', 'SgNews'); $newLabel = LocalizationUtility::translate('backend.action.new', 'SgNews'); $translationParameters = '&cmd[' . $table . '][' . $row['uid'] . '][localize]=%s'; - if ($table === 'pages') { - $translationParameters = '&edit[pages][' . $row['uid'] . ']=new'; - $translationParameters .= '&overrideVals[pages][doktype]=' . $row['doktype']; - $translationParameters .= '&overrideVals[pages][sys_language_uid]=%s'; + if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) { + $returnUrl = BackendUtility::getModuleUrl('web_SgNewsNews', ['id' => GeneralUtility::_GP('id')]); + } else { + $returnUrl = GeneralUtility::makeInstance(UriBuilder::class) + ->buildUriFromRoute('web_SgNewsNews', ['id' => GeneralUtility::_GP('id')]); } + foreach ($languages as $languageUid => $language) { $translatedUid = 0; if ((int) $languageUid <= 0) { @@ -106,34 +113,49 @@ class TranslationLinksViewHelper extends AbstractViewHelper { $translatedUid = (int) $translatedRows[0]['uid']; } } + if ($translatedUid) { - $onClick = BackendUtility::editOnClick( - '&edit[' . $translationTable . '][' . $translatedUid . ']=edit', '', -1 - ); - $out .= ' <a href="#" onclick="' . $onClick . '" title="' . $language['title'] . ' [' . $editLabel . ']" >' . - $iconFactory->getIcon($language['flag'], Icon::SIZE_SMALL)->render() . - '</a>'; - } else { - if ($table === 'pages') { - $onClick = BackendUtility::editOnClick( - sprintf($translationParameters, $languageUid), '', -1 - ); + if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) { + $link = BackendUtility::getModuleUrl('record_edit', [ + 'edit' => [ + $translationTable => [ + $translatedUid => 'edit' + ] + ], + 'returnUrl' => $returnUrl + ]); } else { - $onClick = 'window.location.href=' . BackendUtility::getLinkToDataHandlerAction( - sprintf($translationParameters, $languageUid), -1 - ) . ' return false;'; + $link = GeneralUtility::makeInstance(UriBuilder::class) + ->buildUriFromRoute('record_edit', [ + 'edit' => [ + $translationTable => [ + $translatedUid => 'edit' + ] + ], + 'returnUrl' => (string) $returnUrl + ]); } - $out .= ' <a href="#" onclick="' . $onClick . '" title="' . $language['title'] . ' [' . $newLabel . ']" >' . - $iconFactory->getIcon( + + $out .= '<a href="' . $link . '" title="'. $language['title'] . ' [' . $editLabel . ']" >' + . $iconFactory->getIcon($language['flag'], Icon::SIZE_SMALL)->render() + . '</a>'; + } else { + $out .= ' <a href="' + . BackendUtility::getLinkToDataHandlerAction( + sprintf($translationParameters, $languageUid), $returnUrl + ) + . '" title="' . $language['title'] . ' [' . $newLabel . ']" >' + . $iconFactory->getIcon( $language['flag'], Icon::SIZE_SMALL, 'overlay-new', IconState::cast(IconState::STATE_DISABLED) - )->render() . - '</a>'; + )->render() + . '</a>'; } } } + return $out; } }