Skip to content
Snippets Groups Projects
Commit 4e21a5d3 authored by Kevin Ditscheid's avatar Kevin Ditscheid
Browse files

[TASK] Remove legacy code and switch to symfony command

parent 6adef852
No related branches found
No related tags found
1 merge request!25Feature upgrade to typo3 10
Showing
with 309 additions and 582 deletions
......@@ -29,65 +29,28 @@ namespace SGalinski\SgNews\Command;
use SGalinski\SgNews\Domain\Model\News;
use SGalinski\SgNews\Domain\Repository\FileReferenceRepository;
use SGalinski\SgNews\Domain\Repository\NewsRepository;
use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use TYPO3\CMS\Core\Core\Bootstrap;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction;
use TYPO3\CMS\Core\DataHandling\DataHandler;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\FileInterface;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\CommandController;
use Symfony\Component\Console\Command\Command;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException;
use TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException;
use TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager;
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
/**
* Command controller, that migrates data from tx_news to sg_news
*/
class MigrateNewsCommandController extends CommandController {
/**
* @var bool
*/
protected $requestAdminPermissions = TRUE;
/**
* @var PersistenceManager
*/
protected $persistenceManager;
/**
* @param PersistenceManager $persistenceManager
*/
public function injectPersistenceManager(PersistenceManager $persistenceManager) {
$this->persistenceManager = $persistenceManager;
}
/**
* @var NewsRepository
*/
protected $newsRepository;
/**
* @param NewsRepository $newsRepository
*/
public function injectNewsRepository(NewsRepository $newsRepository) {
$this->newsRepository = $newsRepository;
}
/**
* @var FileReferenceRepository
*/
private $fileReferenceRepository;
/**
* @param FileReferenceRepository $fileReferenceRepository
*/
public function injectFileReferenceRepository(FileReferenceRepository $fileReferenceRepository) {
$this->fileReferenceRepository = $fileReferenceRepository;
}
class MigrateNewsCommandController extends Command {
/**
* this array maps new pages to their original entry in the tx_news table
*
......@@ -95,13 +58,6 @@ class MigrateNewsCommandController extends CommandController {
*/
protected $newsPagesMap = [];
/**
* this array contains all pages that should be migrated to sg_news
*
* @var array $pagesToMigrate
*/
protected $pagesToMigrate = [];
/**
* @var array $languageMap
*/
......@@ -113,43 +69,55 @@ class MigrateNewsCommandController extends CommandController {
protected $categoryMap = [];
/**
* @param string $copyPageId the page id of the template that should be copied
* @param int $categoryPid the page id of the category page
* @param int $year only news from that year will be migrated
* @param string $languageMapAsJson a json, mapping language ids (old => new). this is needed if the sys_language_uids have changed
* @param string $categoryMapAsJson a json, mapping sys_category ids (old => new). t
* @param int $pId only news from that pid will be migrated
* Configure the command
*/
public function configure() {
$this->setDescription('Migrate data from tx_news to sg_news')
->addArgument('copyPageId', InputArgument::REQUIRED, 'The page id of the template that should be copied')
->addArgument('categoryPid', InputArgument::REQUIRED, 'The page id of the category page')
->addArgument('year', InputArgument::OPTIONAL, 'Only news from that year will be migrated', 2015)
->addArgument('languageMapAsJson', InputArgument::OPTIONAL, 'A json, mapping language ids (old => new). this is needed if the sys_language_uids have changed', '{"3":1,"1":0,"2":2,"0":3}')
->addArgument('categoryMapAsJson', InputArgument::OPTIONAL, 'A json, mapping sys_category ids (old => new).', '{"2":17,"3":16,"4":15,"5":14,"6":14,"7":15,"8":16,"9":17}')
->addArgument('pId', InputArgument::OPTIONAL, 'Only news from that pid will be migrated', 52);
}
/**
* Execute the command
*
* @param InputInterface $input
* @param OutputInterface $output
* @return int|void
* @throws IllegalObjectTypeException
* @throws UnknownObjectException
* @throws \Exception
* @throws \JsonException
* @throws \TYPO3\CMS\Extbase\Object\Exception
*/
public function runMigrateNewsCommand(
$copyPageId, $categoryPid, $year = 2015,
$languageMapAsJson = '{"3":1,"1":0,"2":2,"0":3}',
$categoryMapAsJson = '{"2":17,"3":16,"4":15,"5":14,"6":14,"7":15,"8":16,"9":17}',
$pId = 52
) {
// fix repair translation bug where tsfe is missing from command controller, can be removed when v1.5 is released
if (!$GLOBALS['TSFE']) {
$GLOBALS['TSFE'] = $this->objectManager->get(
TypoScriptFrontendController::class, $GLOBALS['TYPO3_CONF_VARS'], 0, 0
);
}
$this->languageMap = json_decode($languageMapAsJson, TRUE);
$this->categoryMap = json_decode($categoryMapAsJson, TRUE);
public function execute(InputInterface $input, OutputInterface $output) {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$persistenceManager = $objectManager->get(PersistenceManager::class);
$fileReferenceRepository = $objectManager->get(FileReferenceRepository::class);
$newsRepository = $objectManager->get(NewsRepository::class);
$copyPageId = $input->getArgument('copyPageId');
$categoryPid = $input->getArgument('categoryPid');
$year = $input->getArgument('year');
$languageMapAsJson = $input->getArgument('languageMapAsJson');
$categoryMapAsJson = $input->getArgument('categoryMapAsJson');
$pId = $input->getArgument('pId');
$this->languageMap = json_decode($languageMapAsJson, TRUE, 512, JSON_THROW_ON_ERROR);
$this->categoryMap = json_decode($categoryMapAsJson, TRUE, 512, JSON_THROW_ON_ERROR);
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_news_domain_model_news');
$queryBuilder->getRestrictions()->removeByType(StartTimeRestriction::class);
$rows = $queryBuilder->select('*')
->from('tx_news_domain_model_news')
->where(
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pId, \PDO::PARAM_INT))
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($pId, Connection::PARAM_INT))
)
->execute()->fetchAll();
$localDataHandler = GeneralUtility::makeInstance(DataHandler::class);
$beUser = $this->simulateBackendUser();
Bootstrap::initializeBackendAuthentication();
$localCommandMap = [
'pages' => [
$copyPageId => [
......@@ -166,7 +134,7 @@ class MigrateNewsCommandController extends CommandController {
// if no l10n_parent exists, create a copy of the page
if ((int) $row['l10n_parent'] === 0) {
$localDataHandler->start([], $localCommandMap, $beUser);
$localDataHandler->start([], $localCommandMap);
$localDataHandler->bypassAccessCheckForRecords = TRUE;
$localDataHandler->checkModifyAccessList('pages');
$localDataHandler->process_cmdmap();
......@@ -178,7 +146,7 @@ class MigrateNewsCommandController extends CommandController {
$this->newsPagesMap[$row['uid']] = $newPageId;
/** @var News $newsPage */
$newsPage = $this->newsRepository->findByUidIgnoreEnableFields($newPageId);
$newsPage = $newsRepository->findByUidIgnoreEnableFields($newPageId);
if ($newsPage !== NULL) {
$title = date('Y-m-d', $row['datetime']) . ' - ' . $row['title'];
......@@ -192,7 +160,7 @@ class MigrateNewsCommandController extends CommandController {
/** @var File $image */
$file = $this->getMatchingFile($row);
if ($file instanceof File) {
$teaserImage1 = $this->fileReferenceRepository->addFileReferenceFromFile(
$teaserImage1 = $fileReferenceRepository->addFileReferenceFromFile(
$file, $this->newsPagesMap[$row['uid']],
$this->newsPagesMap[$row['uid']], 'pages', 'tx_sgnews_teaser1_image'
);
......@@ -200,7 +168,7 @@ class MigrateNewsCommandController extends CommandController {
if ($teaserImage1) {
$newsPage->addTeaser1Image($teaserImage1);
$teaserImage2 = $this->fileReferenceRepository->addFileReferenceFromFile(
$teaserImage2 = $fileReferenceRepository->addFileReferenceFromFile(
$file, $this->newsPagesMap[$row['uid']],
$this->newsPagesMap[$row['uid']], 'pages', 'tx_sgnews_teaser2_image'
);
......@@ -208,8 +176,8 @@ class MigrateNewsCommandController extends CommandController {
}
}
$this->newsRepository->update($newsPage);
$this->persistenceManager->persistAll();
$newsRepository->update($newsPage);
$persistenceManager->persistAll();
// update content element from the new page
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
......@@ -217,7 +185,7 @@ class MigrateNewsCommandController extends CommandController {
$queryBuilder->update('tt_content')
->where(
$queryBuilder->expr()->andX(
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($newPageId, \PDO::PARAM_INT)),
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($newPageId, Connection::PARAM_INT)),
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[(int) $row['sys_language_uid']], \PDO::PARAM_INT))
)
)
......@@ -247,7 +215,7 @@ class MigrateNewsCommandController extends CommandController {
$queryBuilder->expr()->andX(
$queryBuilder->expr()->eq('tablenames', $queryBuilder->createNamedParameter('tx_news_domain_model_news')),
$queryBuilder->expr()->eq('fieldname', $queryBuilder->createNamedParameter('fal_media')),
$queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($row['uid'], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($row['uid'], Connection::PARAM_INT))
)
)
->execute()->fetch();
......@@ -260,7 +228,7 @@ class MigrateNewsCommandController extends CommandController {
$fileResult = $queryBuilder->select('identifier')
->from('sys_file_news_migration')
->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileReferenceResult['uid_local'], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($fileReferenceResult['uid_local'], Connection::PARAM_INT))
)
->execute()->fetch();
if (!$fileResult) {
......@@ -268,7 +236,7 @@ class MigrateNewsCommandController extends CommandController {
}
$oldIdentifier = $fileResult['identifier'];
$resourceFactory = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance();
$resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
$storage = $resourceFactory->getStorageObject(1);
if (!$storage->hasFile($oldIdentifier)) {
return NULL;
......@@ -288,7 +256,7 @@ class MigrateNewsCommandController extends CommandController {
$mmRows = $queryBuilder->select('uid_local', 'sorting_foreign')
->from('sys_category_record_mm_news_migration')
->where(
$queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($row['uid'], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid_foreign', $queryBuilder->createNamedParameter($row['uid'], Connection::PARAM_INT))
)
->execute()->fetchAll();
foreach ($mmRows as $mmRow) {
......@@ -312,13 +280,12 @@ class MigrateNewsCommandController extends CommandController {
private function updateTranslation(array $row) {
// get entry in news map
$parentId = $this->newsPagesMap[$row['l10n_parent']];
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder->getRestrictions()->removeAll();
$originalContentElement = $queryBuilder->select('l18n_parent')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($parentId, Connection::PARAM_INT))
)
->execute()->fetch();
......@@ -326,22 +293,22 @@ class MigrateNewsCommandController extends CommandController {
// if its the new default, there is no l18n_parent
if ((int) $this->languageMap[(int) $row['sys_language_uid'] === 0]) {
$queryBuilder->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($originalContentElement[0], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($originalContentElement[0], Connection::PARAM_INT))
);
} else {
$queryBuilder->where(
$queryBuilder->expr()->eq('l18n_parent', $queryBuilder->createNamedParameter($originalContentElement[0], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('l18n_parent', $queryBuilder->createNamedParameter($originalContentElement[0], Connection::PARAM_INT))
);
}
// look up the correct language id, if they have changed
if (isset($this->languageMap[(int) $row['sys_language_uid']])) {
$queryBuilder->andWhere(
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[(int) $row['sys_language_uid']], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[(int) $row['sys_language_uid']], Connection::PARAM_INT))
);
} else {
$queryBuilder->andWhere(
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($row['sys_language_uid'], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($row['sys_language_uid'], Connection::PARAM_INT))
);
}
$queryBuilder->set('bodytext', $row['bodytext'], TRUE)
......@@ -349,30 +316,22 @@ class MigrateNewsCommandController extends CommandController {
// possibly the default language needs to be overwritten and the old default translation needs to be preserved
if (isset($this->languageMap[(int) $row['sys_language_uid']]) && $this->languageMap[(int) $row['sys_language_uid']] === 0) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
$queryBuilder->getRestrictions()->removeAll();
$result = $queryBuilder->select('title', 'subtitle')
->from('pages')
->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($parentId, Connection::PARAM_INT))
)
->execute()->fetch();
if ($result) {
$queryBuilder->where(
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[0], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[0], Connection::PARAM_INT))
);
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$queryBuilder->update('pages_language_overlay')
->andWhere(
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
);
} else {
$queryBuilder->update('pages')
->andWhere(
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($this->languageMap[0], \PDO::PARAM_INT))
);
}
$queryBuilder->update('pages')
->andWhere(
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($this->languageMap[0], Connection::PARAM_INT))
);
$queryBuilder->set('title', $result['title'], TRUE)
->set('subtitle', $result['subtitle'], TRUE)
->set('navtitle', '', TRUE)
......@@ -382,7 +341,7 @@ class MigrateNewsCommandController extends CommandController {
$newTitle = date('Y-m-d', $row['datetime']) . ' - ' . $row['title'];
$queryBuilder->update('pages')
->where(
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($parentId, Connection::PARAM_INT))
)
->set('title', $newTitle, TRUE)
->set('subtitle', $row['title'], TRUE)
......@@ -390,48 +349,23 @@ class MigrateNewsCommandController extends CommandController {
->set('navtitle', '', TRUE)
->execute();
} else {
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$queryBuilder->update('pages_language_overlay')
->where(
$queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
);
} else {
$queryBuilder->update('pages')
->where(
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($parentId, \PDO::PARAM_INT))
);
}
$queryBuilder->update('pages')
->where(
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($parentId, Connection::PARAM_INT))
);
// finally translate the page title if necessary
if (isset($this->languageMap[(int) $row['sys_language_uid']]) && $this->languageMap[(int) $row['sys_language_uid']] > 0) {
$queryBuilder->andWhere(
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[(int) $row['sys_language_uid']], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($this->languageMap[(int) $row['sys_language_uid']], Connection::PARAM_INT))
);
} else {
$queryBuilder->andWhere(
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($row['sys_language_uid'], \PDO::PARAM_INT))
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter($row['sys_language_uid'], Connection::PARAM_INT))
);
}
$queryBuilder->set('title', date('Y-m-d', $row['datetime']) . ' - ' . $row['title'], TRUE)
->execute();
}
}
/**
* Simulate Backend User for DataHandler
*
* @return FrontendBackendUserAuthentication
*/
private function simulateBackendUser() {
/** @var \TYPO3\CMS\Backend\FrontendBackendUserAuthentication $BE_USER */
$BE_USER = GeneralUtility::makeInstance(FrontendBackendUserAuthentication::class);
$BE_USER->setBeUserByName('admin');
if ($BE_USER->user['uid']) {
$BE_USER->fetchGroupData();
}
$BE_USER->uc_default['copyLevels'] = '9999';
$BE_USER->uc = $BE_USER->uc_default;
$GLOBALS['PAGES_TYPES'][254]['allowedTables'] = '*';
return $BE_USER;
}
}
......@@ -60,7 +60,7 @@ abstract class AbstractController extends ActionController {
*/
public function initializeAction() {
$extensionKey = $this->request->getControllerExtensionKey();
$this->extensionConfiguration = ExtensionUtility::getExtensionConfiguration($extensionKey);
$this->extensionConfiguration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extensionKey] ?? [];
parent::initializeAction();
}
......
......@@ -35,9 +35,7 @@ use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
use TYPO3\CMS\Core\Imaging\Icon;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Page\PageRenderer;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
......@@ -154,14 +152,6 @@ class BackendController extends ActionController {
$currentLanguageInfo = $languageOptions[$this->language] ?? NULL;
}
$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
$pageRenderer->addJsInlineCode('typo3_version', 'TYPO3.version='
. VersionNumberUtility::convertVersionNumberToInteger(VersionNumberUtility::getCurrentTypo3Version())
. ';');
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$pageRenderer->loadExtJS();
}
$this->docHeaderComponent->setMetaInformation($this->pageInfo);
$this->makeButtons();
$this->makeLanguageMenu();
......@@ -170,7 +160,6 @@ class BackendController extends ActionController {
$this->view->assign('language', $this->language);
$this->view->assign('languageInfo', $currentLanguageInfo);
$this->view->assign('docHeader', $this->docHeaderComponent->docHeaderContent());
$this->view->assign('typo3Version', VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version));
}
}
......@@ -227,12 +216,7 @@ class BackendController extends ActionController {
/** @var IconFactory $iconFactory */
$iconFactory = GeneralUtility::makeInstance(IconFactory::class);
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$locallangPath = 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:';
} else {
$locallangPath = 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:';
}
$locallangPath = 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:';
// Refresh
$refreshButton = $buttonBar->makeLinkButton()
......
......@@ -32,7 +32,6 @@ use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Page\PageRenderer;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
/**
......@@ -80,22 +79,7 @@ class PageLayoutController {
$icon = '<span style="vertical-align: middle; display:inline-block;">' . $icon . '</span>';
$buttonLabel = LocalizationUtility::translate('backend.button.goToNewsModule', 'SgNews');
$buttonLabel = '<span style="vertical-align: middle;">' . $buttonLabel . '</span>';
$path = '';
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$pageRenderer->addJsInlineCode('typo3_version', 'TYPO3.version='
. VersionNumberUtility::convertVersionNumberToInteger(VersionNumberUtility::getCurrentTypo3Version())
. ';');
$rootline = BackendUtility::BEgetRootLine($categoryRow['uid'], '', TRUE);
ksort($rootline);
$path = '/root';
foreach ($rootline as $page) {
$path .= '/p' . dechex($page['uid']);
}
$path = ', \'' . $path . '\'';
}
$onclick = 'TYPO3.SgNewsModule.sgNewsGoToNewsModule(' . $categoryRow['uid'] . $path . '); return false;';
$wrap = ' <div class="btn-group" role="group">%s</div>';
$link = '<a href="#" onclick="' . $onclick . '" class="btn btn-primary">%s</a>';
......
......@@ -56,7 +56,7 @@ class LicensingService {
public static function checkKey(): bool {
if (static::$isLicenseKeyValid === NULL) {
static::$isLicenseKeyValid = FALSE;
$configuration = ExtensionUtility::getExtensionConfiguration(self::EXTENSION_KEY);
$configuration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][self::EXTENSION_KEY] ?? [];
if (isset($configuration['key']) && $key = trim($configuration['key'])) {
static::$isLicenseKeyValid = (bool) preg_match('/^([A-Z\d]{6}-?){4}$/', $key);
}
......@@ -73,7 +73,7 @@ class LicensingService {
*/
public static function ping($returnUrl = FALSE): string {
try {
$configuration = ExtensionUtility::getExtensionConfiguration(self::EXTENSION_KEY);
$configuration = $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][self::EXTENSION_KEY] ?? [];
$key = '';
if (isset($configuration['key'])) {
$key = trim($configuration['key']);
......
<?php
/***************************************************************
* 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!
***************************************************************/
namespace SGalinski\SgNews\Updates;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite;
use TYPO3\CMS\Install\Updates\UpgradeWizardInterface;
use TYPO3\CMS\Scheduler\Scheduler;
use TYPO3\CMS\Scheduler\Task\ExecuteSchedulableCommandTask;
/**
* Class MigrateSchedulerTasks
*
* @package SGalinski\SgNews\Updates
*/
class MigrateSchedulerTasks implements UpgradeWizardInterface {
/**
* Identifier of the upgrade
*/
const IDENTIFIER = 'tx_sgnews_migrateschedulertasks';
/**
* @inheritDoc
*/
public function getIdentifier(): string {
return self::IDENTIFIER;
}
/**
* @inheritDoc
*/
public function getTitle(): string {
return 'Migrate sg_news scheduler tasks to symfony commands API';
}
/**
* @inheritDoc
*/
public function getDescription(): string {
return 'This upgrade migrates all sg_news scheduler tasks, created with the old CommandController API to the new Symfony Commands API';
}
/**
* @inheritDoc
*/
public function executeUpdate(): bool {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'tx_scheduler_task'
);
$tasks = $queryBuilder->select('serialized_task_object')
->from('tx_scheduler_task')
->where(
$queryBuilder->expr()->eq('disable', 0)
)->execute()->fetchAll();
foreach ($tasks as $_task) {
$task = unserialize($_task['serialized_task_object'], [\__PHP_Incomplete_Class::class]);
$taskVars = $this->cleanArrayKeys((array)$task);
$identifier = $taskVars['*commandIdentifier'];
if (
$identifier === 'sg_news:migratenews:runmigratenews'
) {
$this->replaceTask($taskVars);
}
}
return TRUE;
}
/**
* Replace the given extbase task implementation with the new Symfony Commands API one
*
* @param array $task
*/
protected function replaceTask(array $task) {
$commandTask = GeneralUtility::makeInstance(ExecuteSchedulableCommandTask::class);
switch ($task['*commandIdentifier']) {
case 'sg_news:migratenews:runmigratenews':
$commandTask->setCommandIdentifier('sg_news:generateHttpCodeSites');
break;
}
if (is_array($task['*arguments'])) {
$commandTask->setArguments($task['*arguments']);
}
if (is_array($task['*defaults'])) {
foreach ($task['*defaults'] as $key => $default) {
$commandTask->addDefaultValue($key, $default);
}
}
$commandTask->setTaskGroup($task['*taskGroup']);
$commandTask->setExecution($task['*execution']);
$commandTask->setExecutionTime($task['*executionTime']);
$commandTask->setRunOnNextCronJob($task['*runOnNextCronJob']);
$commandTask->setTaskUid($task['*taskUid']);
GeneralUtility::makeInstance(Scheduler::class)->saveTask($commandTask);
}
/**
* @inheritDoc
*/
public function updateNecessary(): bool {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(
'tx_scheduler_task'
);
$tasks = $queryBuilder->select('serialized_task_object')
->from('tx_scheduler_task')
->where(
$queryBuilder->expr()->eq('disable', 0)
)->execute()->fetchAll();
foreach ($tasks as $_task) {
$task = unserialize($_task['serialized_task_object'], [\__PHP_Incomplete_Class::class]);
$taskVars = $this->cleanArrayKeys((array)$task);
$identifier = $taskVars['*commandIdentifier'];
if (
$identifier === 'sg_news:migratenews:runmigratenews'
) {
return TRUE;
}
}
return FALSE;
}
/**
* Cleans array keys from their hidden \0
*
* @param array $array
* @return array
*/
protected function cleanArrayKeys(array $array) {
$newArray = [];
foreach($array as $key => $value) {
$newArray[str_replace("\0", '', $key)] = $value;
}
return $newArray;
}
/**
* @inheritDoc
*/
public function getPrerequisites(): array {
return [
DatabaseUpdatedPrerequisite::class
];
}
}
......@@ -42,7 +42,6 @@ use TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider;
use TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider;
use TYPO3\CMS\Core\Imaging\IconRegistry;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
......@@ -91,9 +90,6 @@ class BackendNewsUtility {
public static function getAlternativePageOptions(): array {
$options = [];
$andWhere = ' AND sys_language_uid IN (0,-1)';
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$andWhere = '';
}
/** @var array $rootOptionRows */
$rootOptionRows = self::getRecordsByField(
'pages', 'is_siteroot', 1, $andWhere, '', 'sorting'
......@@ -363,21 +359,12 @@ class BackendNewsUtility {
->groupBy('p.uid')
->orderBy('p.sorting');
if ($languageUid) {
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$queryBuilder->leftJoin('p', 'pages_language_overlay', 'translation',
$queryBuilder->expr()->andX(
$queryBuilder->expr()->eq('translation.pid', 'p.uid'),
$queryBuilder->expr()->eq('translation.sys_language_uid', $queryBuilder->createNamedParameter($languageUid, \PDO::PARAM_INT))
)
);
} else {
$queryBuilder->leftJoin('p', 'pages', 'translation',
$queryBuilder->expr()->andX(
$queryBuilder->expr()->eq('translation.l10n_parent', 'p.uid'),
$queryBuilder->expr()->eq('translation.sys_language_uid', $queryBuilder->createNamedParameter($languageUid, \PDO::PARAM_INT))
)
);
}
$queryBuilder->leftJoin('p', 'pages', 'translation',
$queryBuilder->expr()->andX(
$queryBuilder->expr()->eq('translation.l10n_parent', 'p.uid'),
$queryBuilder->expr()->eq('translation.sys_language_uid', $queryBuilder->createNamedParameter($languageUid, \PDO::PARAM_INT))
)
);
}
if (isset($filters['tags']) && is_array($filters['tags']) && count($filters['tags'])) {
......
<?php
namespace SGalinski\SgNews\Utility;
/**
*
* 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 TYPO3\CMS\Core\Utility\VersionNumberUtility;
/**
* Class ExtensionUtility
*
* @package SGalinski\SgMail\Utility
* @author Kevin Ditscheid <kevin.ditscheid@sgalinski.de>
*/
class ExtensionUtility {
/**
* Get the extension configuration
*
* @param string $extKey
* @return array
*/
public static function getExtensionConfiguration(string $extKey = 'sg_news'): array {
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$extConf = \unserialize(
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf'][$extKey], ['allowed_classes' => FALSE]
);
return is_array($extConf) ? $extConf : [];
}
return $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS'][$extKey] ?? [];
}
}
......@@ -34,7 +34,6 @@ use TYPO3\CMS\Core\Imaging\Icon;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Page\PageRenderer;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
use TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList;
......@@ -77,12 +76,7 @@ class ControlViewHelper extends AbstractViewHelper {
$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
$pageRenderer->loadRequireJsModule('TYPO3/CMS/Backend/AjaxDataHandler');
$pageRenderer->addInlineLanguageLabelFile('EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf');
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$languageService = GeneralUtility::makeInstance(\TYPO3\CMS\Lang\LanguageService::class);
} else {
$languageService = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Localization\LanguageService::class);
}
$languageService = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Localization\LanguageService::class);
$languageService->includeLLFile('EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf');
$databaseRecordList->currentTable = $sortingData;
......@@ -103,17 +97,6 @@ class ControlViewHelper extends AbstractViewHelper {
$iconFactory = GeneralUtility::makeInstance(IconFactory::class);
$buttonLabel = LocalizationUtility::translate('backend.button.editPageContent', 'SgNews');
$path = '';
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$rootline = BackendUtility::BEgetRootLine($row['uid'], '', TRUE);
ksort($rootline);
$path = '/root';
foreach ($rootline as $page) {
$path .= '/p' . dechex($page['uid']);
}
$path = ', \'' . $path . '\'';
}
$onclick = 'return TYPO3.SgNewsModule.sgNewsGoToPageModule(' . $row['uid'] . $path . ');';
$icon = $iconFactory->getIcon('actions-document-open-white', Icon::SIZE_SMALL)->render();
$wrap = ' <div class="btn-group" role="group">%s</div>';
......
......@@ -35,7 +35,6 @@ 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;
/**
......@@ -94,13 +93,8 @@ class TranslationLinksViewHelper extends AbstractViewHelper {
$editLabel = LocalizationUtility::translate('backend.action.edit', 'SgNews');
$newLabel = LocalizationUtility::translate('backend.action.new', 'SgNews');
$translationParameters = '&cmd[' . $table . '][' . $row['uid'] . '][localize]=%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')]);
}
$returnUrl = GeneralUtility::makeInstance(UriBuilder::class)
->buildUriFromRoute('web_SgNewsNews', ['id' => GeneralUtility::_GP('id')]);
foreach ($languages as $languageUid => $language) {
$translatedUid = 0;
if ((int) $languageUid <= 0) {
......@@ -115,26 +109,15 @@ class TranslationLinksViewHelper extends AbstractViewHelper {
}
if ($translatedUid) {
if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$link = BackendUtility::getModuleUrl('record_edit', [
$link = GeneralUtility::makeInstance(UriBuilder::class)
->buildUriFromRoute('record_edit', [
'edit' => [
$translationTable => [
$translatedUid => 'edit'
]
],
'returnUrl' => $returnUrl
'returnUrl' => (string) $returnUrl
]);
} else {
$link = GeneralUtility::makeInstance(UriBuilder::class)
->buildUriFromRoute('record_edit', [
'edit' => [
$translationTable => [
$translatedUid => 'edit'
]
],
'returnUrl' => (string) $returnUrl
]);
}
$out .= ' <a href="' . $link . '" title="'. $language['title'] . ' [' . $editLabel . ']" >'
. $iconFactory->getIcon($language['flag'], Icon::SIZE_SMALL)->render()
......
<?php
return [
'sg_news:migrateNews' => [
'class' => \SGalinski\SgNews\Command\MigrateNewsCommandController::class
]
];
......@@ -225,11 +225,6 @@ call_user_func(
'items' => [
['', ''],
],
'wizards' => [
'suggest' => [
'type' => 'suggest',
],
],
'fieldControl' => [
'addRecord' => [
'disabled' => FALSE,
......@@ -250,12 +245,7 @@ call_user_func(
'maxitems' => 1,
'items' => [
['', ''],
],
'wizards' => [
'suggest' => [
'type' => 'suggest',
],
],
]
],
],
'tx_sgnews_related_news' => [
......@@ -268,12 +258,7 @@ call_user_func(
'allowed' => $table,
'size' => 5,
'minitems' => 0,
'maxitems' => 99,
'wizards' => [
'suggest' => [
'type' => 'suggest',
],
],
'maxitems' => 99
],
],
'tx_sgnews_highlighted' => [
......@@ -398,60 +383,45 @@ call_user_func(
'canNotCollapse' => 1,
];
// Removal of the realurl fields, if the extension isn't installed.
if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('realurl')) {
$GLOBALS['TCA'][$table]['palettes']['titleDescriptionAndHighlightFlag'] = str_replace(
'--linebreak--, tx_realurl_pathsegment, tx_realurl_exclude,', '',
$GLOBALS['TCA'][$table]['palettes']['titleDescriptionAndHighlightFlag']
);
$GLOBALS['TCA'][$table]['types'][117] = str_replace(
'tx_realurl_pathsegment, tx_realurl_exclude,', '',
$GLOBALS['TCA'][$table]['types'][117]
);
}
if (\version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '>')) {
// if TYPO3 9.5, exclude a lot of fields from the news doktype in localizations
foreach (
$GLOBALS['TCA'][$table]['columns'] as $languageExcludeField => $_
foreach (
$GLOBALS['TCA'][$table]['columns'] as $languageExcludeField => $_
) {
if (
!\in_array(
$languageExcludeField, [
'doktype',
'title',
'subtitle',
'description',
'slug',
'tx_projectbase_path_segment',
'tx_projectbase_excludefromsluggeneration',
'tx_sgnews_location',
'tx_sgnews_teaser1_image',
'tx_sgnews_teaser2_image',
'tx_sgnews_tags',
'abstract',
'tx_projectbase_seo_titletag',
'tx_projectbase_seo_canonicaltag',
'hidden',
'sys_language_uid',
'tx_languagevisibility_visibility',
'lastUpdated',
'tx_sgnews_date_end',
'tx_sgnews_highlighted',
'tx_sgnews_never_highlighted',
]
)
) {
if (
!\in_array(
$languageExcludeField, [
'doktype',
'title',
'subtitle',
'description',
'slug',
'tx_projectbase_path_segment',
'tx_projectbase_excludefromsluggeneration',
'tx_sgnews_location',
'tx_sgnews_teaser1_image',
'tx_sgnews_teaser2_image',
'tx_sgnews_tags',
'abstract',
'tx_projectbase_seo_titletag',
'tx_projectbase_seo_canonicaltag',
'hidden',
'sys_language_uid',
'tx_languagevisibility_visibility',
'lastUpdated',
'tx_sgnews_date_end',
'tx_sgnews_highlighted',
'tx_sgnews_never_highlighted',
]
)
) {
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides'][$languageExcludeField]['l10n_mode'] = 'exclude';
}
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides'][$languageExcludeField]['l10n_mode'] = 'exclude';
}
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['title']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.title';
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['subtitle']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.subtitle';
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['slug']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.slug';
}
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['title']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.title';
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['subtitle']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.subtitle';
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE]['columnsOverrides']['slug']['label'] =
'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.slug';
}, 'sg_news', 'pages'
);
<?php
/**
*
* 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!
*/
if (\version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
call_user_func(
function ($extKey, $table) {
$pagesTable = 'pages';
$localLangDbPath = 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:';
$localLangBackendPath = 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_backend.xlf:';
$GLOBALS['TYPO3_CONF_VARS']['FE']['pageOverlayFields'] .= ',tx_sgnews_teaser1_image,tx_sgnews_teaser2_image';
foreach (
[
\SGalinski\SgNews\Utility\BackendNewsUtility::CATEGORY_DOKTYPE => [
'icon' => 'EXT:sg_news/Resources/Public/Images/Category.png',
'locallangIndex' => 'pageType.category'
],
\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE => [
'icon' => 'EXT:sg_news/Resources/Public/Images/News.png',
'locallangIndex' => 'pageType.news'
]
] as $doktype => $configuration) {
// also add the new doktype to the page language overlays type selector (so that translations can inherit the same type)
$GLOBALS['TCA'][$table]['columns']['doktype']['config']['items'][] = [
$localLangBackendPath . $configuration['locallangIndex'],
$doktype,
$configuration['icon']
];
}
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE] = [
'showitem' => '--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.standard;standard,
subtitle;' . $localLangDbPath . $pagesTable . '.subtitle.inPalette,
description, tx_realurl_pathsegment, author, tx_sgnews_location,
--div--;' . $localLangDbPath . $pagesTable . '.tabs.images,
tx_sgnews_teaser2_image, tx_sgnews_teaser1_image,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:' . $pagesTable . '.tabs.metadata,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:' . $pagesTable . '.palettes.abstract;abstract,
tx_projectbase_seo_titletag,tx_projectbase_seo_canonicaltag,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
sys_language_uid,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.visibility;hiddenonly,
--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.access;access'
];
$GLOBALS['TCA'][$table]['types'][\SGalinski\SgNews\Utility\BackendNewsUtility::CATEGORY_DOKTYPE] = [
'showitem' => '--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.standard;standard,
title, tx_realurl_pathsegment,
--div--;' . $localLangDbPath . $table . '.tabs.images,
tx_sgnews_teaser2_image, tx_sgnews_teaser1_image,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:' . $pagesTable . '.tabs.metadata,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:' . $pagesTable . '.palettes.abstract;abstract,
tx_projectbase_seo_titletag,tx_projectbase_seo_canonicaltag, description,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
sys_language_uid,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.visibility;hiddenonly,
--palette--;LLL:EXT:cms/locallang_tca.xlf:' . $pagesTable . '.palettes.access;access'
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
$table, [
'tx_sgnews_teaser1_image' => [
'exclude' => TRUE,
'label' => $localLangDbPath . $pagesTable . '.tx_sgnews_teaser1_image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'tx_sgnews_teaser1_image',
[
'maxitems' => 9999,
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
]
],
'appearance' => [
'showPossibleLocalizationRecords' => TRUE,
'showRemovedLocalizationRecords' => TRUE,
'showSynchronizationLink' => TRUE,
'showAllLocalizationLink' => TRUE,
],
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
),
],
'tx_sgnews_teaser2_image' => [
'exclude' => TRUE,
'label' => $localLangDbPath . $pagesTable . '.tx_sgnews_teaser2_image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'tx_sgnews_teaser2_image',
[
'maxitems' => 9999,
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
]
],
'appearance' => [
'showPossibleLocalizationRecords' => TRUE,
'showRemovedLocalizationRecords' => TRUE,
'showSynchronizationLink' => TRUE,
'showAllLocalizationLink' => TRUE,
],
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
),
],
'tx_sgnews_location' => [
'exclude' => TRUE,
'label' => $localLangDbPath . $pagesTable . '.tx_sgnews_location',
'config' => [
'type' => 'input',
'size' => 20,
'eval' => 'trim'
]
]
]
);
}, 'sg_news', 'pages_language_overlay'
);
}
......@@ -46,7 +46,7 @@ $configuration = [
'iconfile' => 'EXT:sg_news/Resources/Public/Icons/module-sgnews.svg'
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, crdate, name, email,
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, crdate, name, email,
description, website, image, path_segment',
],
'types' => [
......@@ -73,7 +73,7 @@ $configuration = [
'label' => 'LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:tx_sgnews_domain_model_author.crdate',
'config' => [
'type' => 'input',
'max' => '20',
'max' => 20,
'eval' => 'datetime',
'default' => $GLOBALS['EXEC_TIME'],
]
......@@ -198,11 +198,4 @@ $configuration = [
]
];
// The slug field isn't available for TYPO3 8 and below.
if (TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version) < 9000000) {
unset($configuration['columns']['path_segment']);
$configuration['types'] = str_replace('path_segment', '', $configuration['types']);
}
return $configuration;
......@@ -104,12 +104,6 @@ call_user_func(
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\CMS\Core\Page\PageRenderer'] =
['className' => 'SGalinski\SgNews\Xclass\PageRenderer'];
// add realurl configuration
if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('realurl')) {
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/realurl/class.tx_realurl_autoconfgen.php']['extensionConfiguration']['sgnews'] =
\SGalinski\SgNews\Hooks\RealUrlAutoConfiguration::class . '->addNewsConfig';
}
/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class
......@@ -128,10 +122,6 @@ call_user_func(
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/db_layout.php']['drawHeaderHook'][] =
\SGalinski\SgNews\Hooks\PageLayoutController::class . '->addNewsModuleLink';
// register command controllers
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] =
'SGalinski\SgNews\Command\MigrateNewsCommandController';
// add the new doktype to the list of types available from the new page menu at the top of the page tree
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig(
'options.pageTree.doktypesToShowInNewPageDragArea := addToList(' . \SGalinski\SgNews\Utility\BackendNewsUtility::NEWS_DOKTYPE . ')' . PHP_EOL
......@@ -147,5 +137,7 @@ call_user_func(
// Add upgrade wizards
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\SGalinski\SgNews\Updates\UpdateAuthors::IDENTIFIER] =
\SGalinski\SgNews\Updates\UpdateAuthors::class;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\SGalinski\SgNews\Updates\MigrateSchedulerTasks::IDENTIFIER] =
\SGalinski\SgNews\Updates\MigrateSchedulerTasks::class;
}, 'sg_news'
);
......@@ -32,10 +32,6 @@ call_user_func(
if (TYPO3_MODE === 'BE') {
$navigationComponentId = 'TYPO3/CMS/Backend/PageTree/PageTreeElement';
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '9.0.0', '<')) {
$navigationComponentId = 'typo3-pagetree';
}
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
'SGalinski.' . $extKey,
'web',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment