<?php namespace SGalinski\SgNews\ViewHelpers\Backend; /*************************************************************** * Copyright notice * * (c) sgalinski Internet Services (https://www.sgalinski.de) * * 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 SGalinski\SgNews\Service\LicensingService; use SGalinski\SgNews\Utility\BackendNewsUtility; use SGalinski\SgNews\ViewHelpers\AbstractViewHelper; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Imaging\Icon; use TYPO3\CMS\Core\Imaging\IconFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; /** * Class EditOnClickViewHelper **/ class TranslationLinksViewHelper extends AbstractViewHelper { /** * Renders the translation links for the specified record * * @param int $pageUid * @param string $table * @param int $uid * @return string * @throws \InvalidArgumentException */ public function render($pageUid = 0, $table, $uid) { $out = ''; 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); if ($row) { /** @var IconFactory $iconFactory */ $iconFactory = GeneralUtility::makeInstance(IconFactory::class); $lanuageField = $GLOBALS['TCA'][$table]['ctrl']['languageField']; $currentLanguageUid = $table === 'pages' ? 0 : $row[$lanuageField]; if ($currentLanguageUid === -1) { $languages = [ -1 => [ 'title' => LocalizationUtility::translate('backend.language.allLanguages', 'SgNews'), 'flag' => 'flags-multiple' ] ]; } 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_language_overlay][' . $row['uid'] . ']=new'; $translationParameters .= '&overrideVals[pages_language_overlay][doktype]=' . $row['doktype']; $translationParameters .= '&overrideVals[pages_language_overlay][sys_language_uid]=%s'; } foreach ($languages as $languageUid => $language) { $translatedUid = 0; if ((int) $languageUid <= 0) { $translationTable = $table; $translatedUid = $uid; } else { $translationTable = $table === 'pages' ? 'pages_language_overlay' : $table; $translatedRows = BackendUtility::getRecordLocalization($table, $uid, $languageUid); if (count($translatedRows)) { $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 ); } else { $onClick = 'window.location.href=' . BackendUtility::getLinkToDataHandlerAction( sprintf($translationParameters, $languageUid), -1 ) . ' return false;'; } $out .= ' <a href="#" onclick="' . $onClick . '" title="' . $language['title'] . ' [' . $newLabel . ']" >' . $iconFactory->getIcon($language['flag'], Icon::SIZE_SMALL, 'overlay-new')->render() . '</a>'; } } } return $out; } }