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

Merge branch 'feature_pluginPreview' into 'master'

[FEATURE] Plugin Backend Previews

See merge request !24
parents d07f3aa8 2d525366
No related branches found
No related tags found
1 merge request!24[FEATURE] Plugin Backend Previews
Showing
with 939 additions and 199 deletions
......@@ -29,6 +29,7 @@ namespace SGalinski\SgNews\Controller;
use SGalinski\SgNews\Service\LicensingService;
use SGalinski\SgNews\Utility\BackendNewsUtility;
use TYPO3\CMS\Backend\Clipboard\Clipboard;
use TYPO3\CMS\Backend\Routing\UriBuilder;
use TYPO3\CMS\Backend\Template\Components\ButtonBar;
use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent;
use TYPO3\CMS\Backend\Utility\BackendUtility;
......@@ -257,12 +258,13 @@ class BackendController extends ActionController {
$languageMenu = $this->docHeaderComponent->getMenuRegistry()->makeMenu();
$languageMenu->setIdentifier('languageMenu');
$languages = BackendNewsUtility::getAvailableLanguages($this->pageUid);
$uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
foreach ($languages as $key => $language) {
$menuItem = $languageMenu
->makeMenuItem()
->setTitle($language['title'])
->setHref(
BackendUtility::getModuleUrl('web_SgNewsNews') . '&id=' . $this->pageUid . '&SET[language]=' . $key
$uriBuilder->buildUriFromRoute('web_SgNewsNews', [ 'id' => $this->pageUid, 'SET' => ['language' => $key]])
);
if ((int) $this->language === (int) $key) {
$menuItem->setActive(TRUE);
......
<?php
namespace SGalinski\SgNews\Hooks\PageLayoutView;
/***************************************************************
* 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\Backend\Utility\BackendUtility;
use TYPO3\CMS\Backend\View\PageLayoutView;
use TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface;
use TYPO3\CMS\Core\Localization\LanguageService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
/**
* Class PluginRenderer
*
* @package SGalinski\SgNews\Hook\PagelayoutView\PluginRenderer
*/
class PluginRenderer implements PageLayoutViewDrawItemHookInterface {
/**
* Preprocesses the preview rendering of an sg_news content element plugin.
*
* @param PageLayoutView $parentObject Calling parent object
* @param bool $drawItem Whether to draw the item using the default functionalities
* @param string $headerContent Header content
* @param string $itemContent Item content
* @param array $row Record row of tt_content
* @noinspection ReferencingObjectsInspection
*/
public function preProcess(
PageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row
): void {
switch ($row['list_type']) {
case 'sgnews_overview':
$drawItem = FALSE;
$view = $this->createViewWithTemplate('Overview');
$view->assign('uid', $row['uid']);
$this->adaptPluginHeaderContent($headerContent, $row);
// Get available plugin settings and their values from flexform
$pluginConfiguration = GeneralUtility::xml2array(
$row['pi_flexform'], 'T3DataStructure'
)['data']['main']['lDEF'];
$templateData = [
'groupBy' => $pluginConfiguration['settings.groupBy']['vDEF'],
'enableFilter' => $pluginConfiguration['settings.enableFilter']['vDEF'],
'newsLimit' => $pluginConfiguration['settings.newsLimit']['vDEF'],
'onlyNewsWithinThisPageSection' => $pluginConfiguration['settings.onlyNewsWithinThisPageSection']['vDEF'],
'starttime' => $pluginConfiguration['settings.starttime']['vDEF'],
'endtime' => $pluginConfiguration['settings.endtime']['vDEF'],
'sortBy' => $pluginConfiguration['settings.sortBy']['vDEF'],
'sortDirection' => $pluginConfiguration['settings.sortDirection']['vDEF']
];
$view->assign('data', $templateData);
$itemContent .= $view->render();
break;
case 'sgnews_latest':
$drawItem = FALSE;
$view = $this->createViewWithTemplate('Latest');
$view->assign('uid', $row['uid']);
$this->adaptPluginHeaderContent($headerContent, $row);
// Get available plugin settings and their values from flexform
$pluginConfiguration = GeneralUtility::xml2array(
$row['pi_flexform'], 'T3DataStructure'
)['data']['main']['lDEF'];
$templateData = [
'limit' => $pluginConfiguration['settings.limit']['vDEF'],
'categories' => $this->addFieldContentsToRecordIdList(
'pages', $pluginConfiguration['settings.categories']['vDEF'] ?? ''
),
'tags' => $this->addFieldContentsToRecordIdList(
'sys_category', $pluginConfiguration['settings.tags']['vDEF'] ?? ''
),
'starttime' => $pluginConfiguration['settings.starttime']['vDEF'],
'endtime' => $pluginConfiguration['settings.endtime']['vDEF'],
'sortBy' => $pluginConfiguration['settings.sortBy']['vDEF']
];
$view->assign('data', $templateData);
$itemContent .= $view->render();
break;
case 'sgnews_listbycategory':
$drawItem = FALSE;
$view = $this->createViewWithTemplate('ListByCategory');
$view->assign('uid', $row['uid']);
$this->adaptPluginHeaderContent($headerContent, $row);
// Get available plugin settings and their values from flexform
$pluginConfiguration = GeneralUtility::xml2array(
$row['pi_flexform'], 'T3DataStructure'
)['data']['main']['lDEF'];
$templateData = [
'newsLimitPerPage' => $pluginConfiguration['settings.newsLimitPerPage']['vDEF'],
'categories' => $this->addFieldContentsToRecordIdList(
'pages', $pluginConfiguration['settings.categories']['vDEF']
),
'tags' => $this->addFieldContentsToRecordIdList(
'sys_category', $pluginConfiguration['settings.tags']['vDEF']
),
'starttime' => $pluginConfiguration['settings.starttime']['vDEF'],
'endtime' => $pluginConfiguration['settings.endtime']['vDEF'],
'sortBy' => $pluginConfiguration['settings.sortBy']['vDEF'],
'sortDirection' => $pluginConfiguration['settings.sortDirection']['vDEF']
];
$view->assign('data', $templateData);
$itemContent .= $view->render();
break;
case 'sgnews_newsbyauthor':
$drawItem = FALSE;
$view = $this->createViewWithTemplate('NewsByAuthor');
$view->assign('uid', $row['uid']);
$this->adaptPluginHeaderContent($headerContent, $row);
// Get available plugin settings and their values from flexform
$pluginConfiguration = GeneralUtility::xml2array(
$row['pi_flexform'], 'T3DataStructure'
)['data']['main']['lDEF'];
$templateData = [
'showDetails' => $pluginConfiguration['settings.showDetails']['vDEF'],
'newsAuthors' => $this->addFieldContentsToRecordIdList(
'tx_sgnews_domain_model_author',
$pluginConfiguration['settings.newsAuthors']['vDEF'],
'name'
)
];
$backendUtility = GeneralUtility::makeInstance(BackendUtility::class);
$excludedNewsIds = GeneralUtility::intExplode(
',', $pluginConfiguration['settings.excludedNews']['vDEF'], TRUE
);
$excludedNewsListWithTitles = [];
foreach ($excludedNewsIds as $excludedNewsId) {
$excludedNewsListWithTitles[] = $backendUtility::getRecord(
'pages', $excludedNewsId, 'title'
)['title'] . ' [' . $excludedNewsId . ']';
}
$templateData['excludedNews'] = $excludedNewsListWithTitles;
$view->assign('data', $templateData);
$itemContent .= $view->render();
break;
default:
// No need to do anything
}
}
/**
* Creates a new StandaloneView object with template and partial rot paths,
* attaches the template with the given name to it and returns it.
*
* @param string $templateName
* @return StandaloneView
*/
protected
function createViewWithTemplate(string $templateName): StandaloneView {
$view = GeneralUtility::makeInstance(StandaloneView::class);
$view->setTemplateRootPaths(['EXT:sg_news/Resources/Private/Templates/Backend']);
$view->setPartialRootPaths(['EXT:sg_news/Resources/Private/Partials/Backend']);
if (!str_ends_with($templateName, '.html')) {
$templateName .= '.html';
}
$view->setTemplate($templateName);
return $view;
}
/**
* Adapts the given $headerContent.
* To be used in all plugin previews so the Header Contents appear similarly.
*
* @param $headerContent
* @param $row
*/
protected
function adaptPluginHeaderContent(&$headerContent, $row): void {
$headerContent = '<h4>' . $this->getPluginNameForHeaderContent(
(int) $row['pid'], $row['list_type']
) . $headerContent . '</h4>';
}
/**
* Finds the label of the given $listType element on the page with the given $pid
* and returns it wrapped for use in the backend preview's header content.
*
* @param int $pid
* @param string $listType
* @return string
*/
protected
function getPluginNameForHeaderContent(int $pid, string $listType): string {
$languageService = GeneralUtility::makeInstance(LanguageService::class);
$pluginName = $languageService->sL(
BackendUtility::getLabelFromItemListMerged(
$pid, 'tt_content', 'list_type', $listType
)
);
return '<span class="label label-info">' . $pluginName . '</span>&nbsp;';
}
/**
* Takes a comma-separated list of record IDs, the corresponding table and optionally the field to look up.
* Returns another comma-space-separated list of the same records with the content of the field added.
* The returned list should look nice enough to be rendered in the backend preview directly.
*
* @param string $table
* @param string $recordIdList
* @param string $field
* @return string
*/
protected function addFieldContentsToRecordIdList(
string $table, string $recordIdList, string $field = 'title'
): string {
$backendUtility = GeneralUtility::makeInstance(BackendUtility::class);
$recordIdsArray = GeneralUtility::intExplode(',', $recordIdList, TRUE);
$recordsWithTitlesArray = [];
foreach ($recordIdsArray as $recordId) {
$recordsWithTitlesArray[] = $backendUtility::getRecord(
$table, $recordId, $field
)[$field] . ' [' . $recordId . ']';
}
return implode(', ', $recordsWithTitlesArray);
}
}
<?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\Utility\BackendNewsUtility;
use SGalinski\SgNews\ViewHelpers\AbstractViewHelper;
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
**/
class EditOnClickViewHelper extends AbstractViewHelper {
/**
* Register the ViewHelper arguments
*/
public function initializeArguments() {
parent::initializeArguments();
$this->registerArgument('table', 'string', 'The table for the clickenlarge link', TRUE);
$this->registerArgument('uid', 'int', 'The uid of the record to clickenlarge', TRUE);
$this->registerArgument('new', 'bool', 'Open a new record in the popup', FALSE, FALSE);
$this->registerArgument('type', 'string', 'The type of the news', FALSE, '');
}
/**
* Renders the onclick script for editing a record
*
* @return string
*/
public function render(): string {
$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 '';
}
}
}
<?php
declare(strict_types=1);
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
namespace SGalinski\SgNews\ViewHelpers\Backend\Link;
use SGalinski\SgNews\Utility\BackendNewsUtility;
use TYPO3\CMS\Backend\Routing\UriBuilder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
/**
* Use this ViewHelper to provide 'create new record' links.
* The ViewHelper will pass the command to FormEngine.
*
* The table argument is mandatory, it decides what record is to be created.
*
* The pid argument will put the new record on this page, if ``0`` given it will
* be placed to the root page.
*
* The uid argument accepts only negative values. If this is given, the new
* record will be placed (by sorting field) behind the record with the uid.
* It will end up on the same pid as this given record, so the pid must not
* be given explicitly by pid argument.
*
* An exception will be thrown, if both uid and pid are given.
* An exception will be thrown, if the uid argument is not a negative integer.
*
* To edit records, use the :ref:`<be:link.editRecordViewHelper> <typo3-backend-link-editrecord>`.
*
* Examples
* ========
*
* Link to create a new record of a_table after record 17 on the same pid::
*
* <be:link.newRecord table="a_table" returnUrl="foo/bar" uid="-17"/>
*
* Output::
*
* <a href="/typo3/index.php?route=/record/edit&edit[a_table][-17]=new&returnUrl=foo/bar">
* Edit record
* </a>
*
* Link to create a new record of a_table on root page::
*
* <be:link.newRecord table="a_table" returnUrl="foo/bar""/>
*
* Output::
*
* <a href="/typo3/index.php?route=/record/edit&edit[a_table][]=new&returnUrl=foo/bar">
* Edit record
* </a>
*
* Link to create a new record of a_table on page 17::
*
* <be:link.newRecord table="a_table" returnUrl="foo/bar" pid="17"/>
*
* Output::
*
* <a href="/typo3/index.php?route=/record/edit&edit[a_table][-17]=new&returnUrl=foo/bar">
* Edit record
* </a>
*
* Link to create a new record then return back to the BE module "web_MyextensionList"::
*
* <be:link.newRecord table="a_table" returnUrl="{f:be.uri(route: 'web_MyextensionList')}" pid="17">
*/
class NewRecordViewHelper extends AbstractTagBasedViewHelper
{
/**
* @var string
*/
protected $tagName = 'a';
public function initializeArguments()
{
parent::initializeArguments();
$this->registerUniversalTagAttributes();
$this->registerArgument('uid', 'int', 'uid < 0 will insert the record after the given uid', false);
$this->registerArgument('pid', 'int', 'the page id where the record will be created', false);
$this->registerArgument('table', 'string', 'target database table', true);
$this->registerArgument('type', 'string', 'The type of the news', true);
$this->registerArgument('returnUrl', 'string', 'return to this URL after closing the edit dialog', false, '');
}
/**
* @return string
* @throws \TYPO3\CMS\Backend\Routing\Exception\RouteNotFoundException
*/
public function render(): string
{
if ($this->arguments['uid'] && $this->arguments['pid']) {
throw new \InvalidArgumentException('Can\'t handle both uid and pid for new records', 1526129969);
}
if (isset($this->arguments['uid']) && $this->arguments['uid'] >= 0) {
throw new \InvalidArgumentException('Uid must be negative integer, ' . $this->arguments['uid'] . ' given', 1526134901);
}
if (empty($this->arguments['returnUrl'])) {
$this->arguments['returnUrl'] = GeneralUtility::getIndpEnv('REQUEST_URI');
}
$params = [
'edit' => [$this->arguments['table'] => [$this->arguments['uid'] ?? $this->arguments['pid'] ?? 0 => 'new']],
'returnUrl' => $this->arguments['returnUrl']
];
if ($this->arguments['table'] === 'pages' && in_array($this->arguments['type'], ['news', 'category'], TRUE)) {
$params['overrideVals'] = [
'pages' => [
'doktype' => $this->arguments['type'] === 'news' ? BackendNewsUtility::NEWS_DOKTYPE : BackendNewsUtility::CATEGORY_DOKTYPE
]
];
}
$uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
$uri = (string)$uriBuilder->buildUriFromRoute('record_edit', $params);
$this->tag->addAttribute('href', $uri);
$this->tag->setContent($this->renderChildren());
$this->tag->forceClosingTag(true);
return $this->tag->render();
}
}
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2014-03-18T12:47:57Z">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2020-07-17T15:32:34Z">
<header>
<type>module</type>
<description>Language labels for the backend module belonging to extension 'sg_news'</description>
......@@ -9,74 +9,90 @@
<authorEmail>stefan@sgalinski.de</authorEmail>
</header>
<body>
<trans-unit id="backend.plugin.preview.settings" approved="yes">
<source><![CDATA[Settings]]></source>
<target><![CDATA[Einstellungen]]></target>
</trans-unit>
<trans-unit id="backend.plugin.preview.values" approved="yes">
<source><![CDATA[Values]]></source>
<target><![CDATA[Werte]]></target>
</trans-unit>
<trans-unit id="coordinatePicker.missingImage" approved="yes">
<source>Please upload an image first and save the form!</source>
<target>Bitte lade zuerst ein Bild hoch und speichere anschließend das Formular!</target>
<source><![CDATA[Please upload an image first and save the form!]]></source>
<target><![CDATA[Bitte lade zuerst ein Bild hoch und speichere anschließend das Formular!]]></target>
</trans-unit>
<trans-unit id="descriptionLatestPlugin" approved="yes">
<source><![CDATA[Show latest news.]]></source>
<target><![CDATA[Zeige die neuesten News.]]></target>
</trans-unit>
<trans-unit id="descriptionListByCategoryPlugin" approved="yes">
<source><![CDATA[List news by category/tag]]></source>
<target><![CDATA[Eine Liste der News aus Kategorien/Tags.]]></target>
</trans-unit>
<trans-unit id="descriptionOverviewPlugin" approved="yes">
<source><![CDATA[Show an overview of all news.]]></source>
<target><![CDATA[Übersicht der News.]]></target>
</trans-unit>
<trans-unit id="descriptionSingleViewPlugin" approved="yes">
<source><![CDATA[Show a single view of news.]]></source>
<target><![CDATA[Zeige eine Einzelansicht der News.]]></target>
</trans-unit>
<trans-unit id="newsFromAuthorPlugin" approved="yes">
<source>[News] News from author</source>
<target>[News] News vom Author</target>
<source><![CDATA[[News] News from author]]></source>
<target><![CDATA[[News] News vom Author]]></target>
</trans-unit>
<trans-unit id="pageType.category" approved="yes">
<source>Category</source>
<target>Kategorie</target>
<source><![CDATA[Category]]></source>
<target><![CDATA[Kategorie]]></target>
</trans-unit>
<trans-unit id="pageType.news" approved="yes">
<source>News</source>
<target>News</target>
</trans-unit>
<trans-unit id="titleLatestPlugin" approved="yes">
<source>Latest News</source>
<target>Neueste News</target>
</trans-unit>
<trans-unit id="titleListByCategoryPlugin" approved="yes">
<source>List News by Category/Tag.</source>
<target>Liste News aus Kategorien/Tags</target>
<source><![CDATA[News]]></source>
<target><![CDATA[News]]></target>
</trans-unit>
<trans-unit id="titleNewsByAuthorPlugin" approved="yes">
<source>List News by Author.</source>
<target>Liste News vom Author</target>
<trans-unit id="pageTypeTitlePluginCategory.news" approved="yes">
<source><![CDATA[[News] News by Category]]></source>
<target><![CDATA[[News] News aus Kategorien]]></target>
</trans-unit>
<trans-unit id="titleOverviewPlugin" approved="yes">
<source>News Overview</source>
<target>News Übersicht</target>
<trans-unit id="pageTypeTitlePluginLatest.news" approved="yes">
<source><![CDATA[[News] News Latest]]></source>
<target><![CDATA[[News] Neueste News]]></target>
</trans-unit>
<trans-unit id="titleSingleViewPlugin" approved="yes">
<source>News Single View</source>
<target>News Einzelansicht</target>
<trans-unit id="pageTypeTitlePluginOverview.news" approved="yes">
<source><![CDATA[[News] News Overview]]></source>
<target><![CDATA[[News] News Übersicht]]></target>
</trans-unit>
<trans-unit id="descriptionLatestPlugin">
<source>Show latest news.</source>
<target>Zeige die neuesten News.</target>
<trans-unit id="pageTypeTitlePluginSingle.news" approved="yes">
<source><![CDATA[[News] News Single View]]></source>
<target><![CDATA[[News] News Einzelansicht]]></target>
</trans-unit>
<trans-unit id="descriptionListByCategoryPlugin">
<source>List news by category/tag.</source>
<target>Eine Liste der News aus Kategorien/Tags.</target>
<trans-unit id="plugin.preview.latest.categories" approved="yes">
<source><![CDATA[Only show news from these categories]]></source>
<target><![CDATA[Zeige nur News dieser Kategorien]]></target>
</trans-unit>
<trans-unit id="descriptionOverviewPlugin">
<source>Show an overview of all news.</source>
<target>Übersicht der News.</target>
<trans-unit id="plugin.preview.latest.tags" approved="yes">
<source><![CDATA[Only show news with these tags]]></source>
<target><![CDATA[Zeige nur News mit diesen Tags]]></target>
</trans-unit>
<trans-unit id="descriptionSingleViewPlugin">
<source>Show a single view of news.</source>
<target>Zeige eine Einzelansicht der News.</target>
<trans-unit id="titleLatestPlugin" approved="yes">
<source><![CDATA[Latest News]]></source>
<target><![CDATA[Neueste News]]></target>
</trans-unit>
<trans-unit id="pageTypeTitlePluginOverview.news">
<source>[News] News Overview</source>
<target>[News] News Übersicht</target>
<trans-unit id="titleListByCategoryPlugin" approved="yes">
<source><![CDATA[News by Category/Tag]]></source>
<target><![CDATA[Liste News aus Kategorien/Tags]]></target>
</trans-unit>
<trans-unit id="pageTypeTitlePluginLatest.news">
<source>[News] News Latest</source>
<target>[News] Neueste News</target>
<trans-unit id="titleNewsByAuthorPlugin" approved="yes">
<source><![CDATA[List News by Author.]]></source>
<target><![CDATA[Liste News vom Author]]></target>
</trans-unit>
<trans-unit id="pageTypeTitlePluginCategory.news">
<source>[News] News by Category</source>
<target>[News] News aus Kategorien</target>
<trans-unit id="titleOverviewPlugin" approved="yes">
<source><![CDATA[News Overview]]></source>
<target><![CDATA[News Übersicht]]></target>
</trans-unit>
<trans-unit id="pageTypeTitlePluginSingle.news">
<source>[News] News Single View</source>
<target>[News] News Einzelansicht</target>
<trans-unit id="titleSingleViewPlugin" approved="yes">
<source><![CDATA[News Single View]]></source>
<target><![CDATA[News Einzelansicht]]></target>
</trans-unit>
</body>
</file>
</xliff>
</xliff>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2019-06-21T20:03:43Z">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2020-07-17T15:31:49Z">
<header>
<type>database</type>
<description>Language labels for database tables/fields belonging to extension 'sg_news'</description>
......@@ -29,10 +29,6 @@
<source><![CDATA[Pagetitle (automatically generated from Last Update + Headline)]]></source>
<target><![CDATA[Seitentitel (automatisch generiert aus Letzte Aktualisierung + Schlagzeile)]]></target>
</trans-unit>
<trans-unit id="pages.tx_sgnews_news_author" approved="yes">
<source><![CDATA[Author]]></source>
<target><![CDATA[Autor]]></target>
</trans-unit>
<trans-unit id="pages.tx_sgnews_content_from_another_page" approved="yes">
<source><![CDATA[Show the content from another page]]></source>
<target><![CDATA[Zeige den Inhalt einer anderen Seite an]]></target>
......@@ -61,6 +57,10 @@
<source><![CDATA[Don't show in "Latest News"]]></source>
<target><![CDATA[Nicht in "letzten News" anzeigen]]></target>
</trans-unit>
<trans-unit id="pages.tx_sgnews_news_author" approved="yes">
<source><![CDATA[Author]]></source>
<target><![CDATA[Autor]]></target>
</trans-unit>
<trans-unit id="pages.tx_sgnews_related_news" approved="yes">
<source><![CDATA[Related Elements]]></source>
<target><![CDATA[Verwandte Elemente]]></target>
......@@ -235,4 +235,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" datatype="plaintext" original="messages" date="2014-03-18T12:47:57Z">
<file source-language="en" datatype="plaintext" original="messages" date="2020-07-17T15:32:34Z">
<header>
<type>module</type>
<description>Language labels for the backend module belonging to extension 'sg_news'</description>
......@@ -9,63 +9,75 @@
<authorEmail>stefan@sgalinski.de</authorEmail>
</header>
<body>
<trans-unit id="backend.plugin.preview.settings">
<source><![CDATA[Settings]]></source>
</trans-unit>
<trans-unit id="backend.plugin.preview.values">
<source><![CDATA[Values]]></source>
</trans-unit>
<trans-unit id="coordinatePicker.missingImage">
<source>Please upload an image first and save the form!</source>
<source><![CDATA[Please upload an image first and save the form!]]></source>
</trans-unit>
<trans-unit id="descriptionLatestPlugin">
<source><![CDATA[Show latest news.]]></source>
</trans-unit>
<trans-unit id="descriptionListByCategoryPlugin">
<source><![CDATA[List news by category/tag]]></source>
</trans-unit>
<trans-unit id="descriptionOverviewPlugin">
<source><![CDATA[Show an overview of all news.]]></source>
</trans-unit>
<trans-unit id="descriptionSingleViewPlugin">
<source><![CDATA[Show a single view of news.]]></source>
</trans-unit>
<trans-unit id="newsFromAuthorPlugin">
<source>[News] News from author</source>
<source><![CDATA[[News] News from author]]></source>
</trans-unit>
<trans-unit id="pageTitlePlugin.news">
<source><![CDATA[News]]></source>
</trans-unit>
<trans-unit id="pageType.category">
<source><![CDATA[Category]]></source>
</trans-unit>
<trans-unit id="pageType.news">
<source><![CDATA[News]]></source>
</trans-unit>
<trans-unit id="pageTypeTitlePlugin.news">
<source>[News] Plugins</source>
<source><![CDATA[[News] Plugins]]></source>
</trans-unit>
<trans-unit id="pageTypeTitlePluginOverview.news">
<source>[News] News Overview</source>
<trans-unit id="pageTypeTitlePluginCategory.news">
<source><![CDATA[[News] News by Category]]></source>
</trans-unit>
<trans-unit id="pageTypeTitlePluginLatest.news">
<source>[News] News Latest</source>
<source><![CDATA[[News] News Latest]]></source>
</trans-unit>
<trans-unit id="pageTypeTitlePluginCategory.news">
<source>[News] News by Category</source>
<trans-unit id="pageTypeTitlePluginOverview.news">
<source><![CDATA[[News] News Overview]]></source>
</trans-unit>
<trans-unit id="pageTypeTitlePluginSingle.news">
<source>[News] News Single View</source>
<source><![CDATA[[News] News Single View]]></source>
</trans-unit>
<trans-unit id="pageType.category">
<source>Category</source>
<trans-unit id="plugin.preview.latest.categories">
<source><![CDATA[Only show news from these categories]]></source>
</trans-unit>
<trans-unit id="pageType.news">
<source>News</source>
<trans-unit id="plugin.preview.latest.tags">
<source><![CDATA[Only show news with these tags]]></source>
</trans-unit>
<trans-unit id="titleLatestPlugin">
<source>Latest News</source>
</trans-unit>
<trans-unit id="descriptionLatestPlugin">
<source>Show latest news.</source>
<source><![CDATA[Latest News]]></source>
</trans-unit>
<trans-unit id="titleListByCategoryPlugin">
<source>News by Category/Tag</source>
<source><![CDATA[News by Category/Tag]]></source>
</trans-unit>
<trans-unit id="titleNewsByAuthorPlugin">
<source>List News by Author.</source>
</trans-unit>
<trans-unit id="descriptionListByCategoryPlugin">
<source>List news by category/tag</source>
<source><![CDATA[List News by Author.]]></source>
</trans-unit>
<trans-unit id="titleOverviewPlugin">
<source>News Overview</source>
</trans-unit>
<trans-unit id="descriptionOverviewPlugin">
<source>Show an overview of all news.</source>
<source><![CDATA[News Overview]]></source>
</trans-unit>
<trans-unit id="titleSingleViewPlugin">
<source>News Single View</source>
</trans-unit>
<trans-unit id="descriptionSingleViewPlugin">
<source>Show a single view of news.</source>
</trans-unit>
<trans-unit id="pageTitlePlugin.news">
<source>News</source>
<source><![CDATA[News Single View]]></source>
</trans-unit>
</body>
</file>
</xliff>
</xliff>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" datatype="plaintext" original="messages" date="2019-06-21T20:03:43Z">
<file source-language="en" datatype="plaintext" original="messages" date="2020-07-17T15:31:49Z">
<header>
<type>database</type>
<description>Language labels for database tables/fields belonging to extension 'sg_news'</description>
......@@ -27,9 +27,6 @@
<trans-unit id="pages.tx_sgnews_content_from_another_page">
<source><![CDATA[Show the content from another page]]></source>
</trans-unit>
<trans-unit id="pages.tx_sgnews_news_author">
<source><![CDATA[Author]]></source>
</trans-unit>
<trans-unit id="pages.tx_sgnews_date_end">
<source><![CDATA[Date until]]></source>
</trans-unit>
......@@ -48,6 +45,9 @@
<trans-unit id="pages.tx_sgnews_never_highlighted">
<source><![CDATA[Don't show in "Latest News"]]></source>
</trans-unit>
<trans-unit id="pages.tx_sgnews_news_author">
<source><![CDATA[Author]]></source>
</trans-unit>
<trans-unit id="pages.tx_sgnews_related_news">
<source><![CDATA[Related Elements]]></source>
</trans-unit>
......@@ -179,4 +179,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>
\ No newline at end of file
<thead>
<tr>
<th scope="col" style="width: 50%">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:backend.plugin.preview.settings"/>
</th>
<th scope="col" style="width: 50%">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:backend.plugin.preview.values"/>
</th>
</tr>
</thead>
......@@ -3,10 +3,10 @@
<f:translate key="backend.selectPage" /><f:if condition="{pageUid}"><f:else>.</f:else></f:if>
<f:if condition="{pageUid}">
<f:translate key="backend.selectPageOr" />
<a href="#" class="btn btn-default" onclick="{sg:backend.editOnClick(table: 'pages', uid: pageUid, new: 1, type: 'category')}">
<sg:backend.link.newRecord class="btn btn-default" type="category" table="pages" pid="{pageUid}">
<sg:backend.icon id="actions-document-new" size="small" />
<f:translate key="backend.button.createCategory" />
</a>
</sg:backend.link.newRecord>
</f:if>
</p>
<f:if condition="{pages}">
......
{namespace sg=SGalinski\SgNews\ViewHelpers}
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
<f:layout name="Backend" />
......@@ -23,20 +24,19 @@
</f:if>
<f:render partial="Backend/Filter" arguments="{categories: categories, tags: tags, showCategoryFilter: showCategoryFilter, filters: filters}" />
<div class="form-group">
<f:if condition="{showCategoryFilter}">
<f:then>
<a href="#" class="btn btn-default" onclick="{sg:backend.editOnClick(table: 'pages', uid: pageUid, new: 1, type: 'category')}">
<sg:backend.link.newRecord class="btn btn-default" table="pages" pid="{pageUid}" type="category">
<sg:backend.icon id="actions-document-new" size="small" />
<f:translate key="backend.button.createCategory" />
</a>
</sg:backend.link.newRecord>
</f:then>
<f:else>
<a href="#" class="btn btn-default" onclick="{sg:backend.editOnClick(table: 'pages', uid: pageUid, new: 1, type: 'news')}">
<sg:backend.link.newRecord class="btn btn-default" table="pages" pid="{pageUid}" type="news">
<sg:backend.icon id="actions-document-new" size="small" />
<f:translate key="backend.button.createNews" />
</a>
</sg:backend.link.newRecord>
</f:else>
</f:if>
</div>
......@@ -58,7 +58,7 @@
<f:alias map="{newsItemTags: '{sg:backend.newsItemTags(uid: singleNews.uid, languageUid: language)}'}">
<f:if condition="{singleNews.translation_uid}">
<f:then>
<a href="#" onclick="{sg:backend.editOnClick(table: 'pages', uid: singleNews.translation_uid)}">
<be:link.editRecord uid="{singleNews.translation_uid}" table="pages">
<span>
<f:if condition="{singleNews.translation_title}">
<f:then>
......@@ -70,15 +70,15 @@
</f:if>
<f:if condition="{newsItemTags}">({newsItemTags})</f:if>
</span>
</a>
</be:link.editRecord>
</f:then>
<f:else>
<a href="#" onclick="{sg:backend.editOnClick(table: 'pages', uid: singleNews.uid)}">
<be:link.editRecord uid="{singleNews.uid}" table="pages">
<span>
{singleNews.title}
<f:if condition="{newsItemTags}">({newsItemTags})</f:if>
</span>
</a>
</be:link.editRecord>
</f:else>
</f:if>
</f:alias>
......
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
<be:link.editRecord table="tt_content" uid="{uid}">
<br/>
<table class="table table-striped table-bordered">
<f:render partial="PluginDataTableHeader"/>
<tbody>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.latest.flexForm.newsLimit"/>
</th>
<td>
{data.limit}
</td>
</tr>
<f:if condition="{data.categories}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:plugin.preview.latest.categories"/>
</th>
<td>
{data.categories}
</td>
</tr>
</f:if>
<f:if condition="{data.tags}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:plugin.preview.latest.tags"/>
</th>
<td>
{data.tags}
</td>
</tr>
</f:if>
<f:if condition="{data.starttime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.starttime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.starttime}</f:format.date>
</td>
</tr>
</f:if>
<f:if condition="{data.endtime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.endtime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.endtime}</f:format.date>
</td>
</tr>
</f:if>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.sortBy"/>
</th>
<td>
<f:switch expression="{data.sortBy}">
<f:case value="typoscript">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.systemDefault"/>
</f:case>
<f:case value="date">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.dateOfPublication"/>
</f:case>
<f:case value="positionInTree">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.orderInPageTree"/>
</f:case>
</f:switch>
</td>
</tr>
</tbody>
</table>
</be:link.editRecord>
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
<be:link.editRecord table="tt_content" uid="{uid}">
<br/>
<table class="table table-striped table-bordered">
<f:render partial="PluginDataTableHeader"/>
<tbody>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.latest.flexForm.newsLimit"/>
</th>
<td>
{data.newsLimitPerPage}
</td>
</tr>
<f:comment><!-- Always rendered because having no categories means there is no frontend output. --></f:comment>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexForm.categories"/>
</th>
<td>
{data.categories}
</td>
</tr>
<f:if condition="{data.tags}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:plugin.preview.latest.tags"/>
</th>
<td>
{data.tags}
</td>
</tr>
</f:if>
<f:if condition="{data.starttime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.starttime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.starttime}</f:format.date>
</td>
</tr>
</f:if>
<f:if condition="{data.endtime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.endtime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.endtime}</f:format.date>
</td>
</tr>
</f:if>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.sortBy"/>
</th>
<td>
<f:switch expression="{data.sortBy}">
<f:case value="typoscript">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.systemDefault"/>
</f:case>
<f:case value="date">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.dateOfPublication"/>
</f:case>
<f:case value="positionInTree">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.orderInPageTree"/>
</f:case>
</f:switch>
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.sortOrder"/>
</th>
<td>
<f:switch expression="{data.sortDirection}">
<f:case value="typoscript">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.systemDefault"/>
</f:case>
<f:case value="DESC">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.desc"/>
</f:case>
<f:case value="ASC">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.asc"/>
</f:case>
</f:switch>
</td>
</tr>
</tbody>
</table>
</be:link.editRecord>
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
{namespace core=TYPO3\CMS\Core\ViewHelpers}
<be:link.editRecord table="tt_content" uid="{uid}">
<br/>
<table class="table table-striped table-bordered">
<f:render partial="PluginDataTableHeader"/>
<tbody>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.showDetails"/>
</th>
<td>
<f:if condition="{data.showDetails}">
<f:then>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-check"/>
</f:then>
<f:else>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-close"/>
</f:else>
</f:if>
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.newsAuthor"/>
</th>
<td>
{data.newsAuthors}
</td>
</tr>
<f:if condition="{data.excludedNews}">
<tr>
<th scope="row" rowspan="0">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.excludedNews"/>
</th>
</tr>
<f:for each="{data.excludedNews}" as="excludedNews">
<tr>
<td>
{excludedNews}
</td>
</tr>
</f:for>
</f:if>
</tbody>
</table>
</be:link.editRecord>
{namespace be=TYPO3\CMS\Backend\ViewHelpers}
{namespace core=TYPO3\CMS\Core\ViewHelpers}
<be:link.editRecord table="tt_content" uid="{uid}">
<br/>
<table class="table table-striped table-bordered">
<f:render partial="PluginDataTableHeader"/>
<tbody>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.groupBy"/>
</th>
<td>
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.groupBy.I.{data.groupBy}"/>
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter"/>
</th>
<td>
<f:if condition="{data.enableFilter}">
<f:then>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-check"/>
</f:then>
<f:else>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-close"/>
</f:else>
</f:if>
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.newsLimit"/>
</th>
<td>
{data.newsLimit}
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.onlyNewsWithinThisPageSection"/>
</th>
<td>
<f:if condition="{data.onlyNewsWithinThisPageSection}">
<f:then>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-check"/>
</f:then>
<f:else>
<core:icon alternativeMarkupIdentifier="inline" identifier="actions-close"/>
</f:else>
</f:if>
</td>
</tr>
<f:if condition="{data.starttime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.starttime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.starttime}</f:format.date>
</td>
</tr>
</f:if>
<f:if condition="{data.endtime}">
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.endtime"/>
</th>
<td>
<f:format.date format="d.m.Y">{data.endtime}</f:format.date>
</td>
</tr>
</f:if>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.sortBy"/>
</th>
<td>
<f:switch expression="{data.sortBy}">
<f:case value="typoscript">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.systemDefault"/>
</f:case>
<f:case value="date">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.dateOfPublication"/>
</f:case>
<f:case value="positionInTree">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.orderInPageTree"/>
</f:case>
</f:switch>
</td>
</tr>
<tr>
<th scope="row">
<f:translate
key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.sortOrder"/>
</th>
<td>
<f:switch expression="{data.sortDirection}">
<f:case value="typoscript">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.systemDefault"/>
</f:case>
<f:case value="DESC">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.desc"/>
</f:case>
<f:case value="ASC">
<f:translate key="LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.asc"/>
</f:case>
</f:switch>
</td>
</tr>
</tbody>
</table>
</be:link.editRecord>
......@@ -99,6 +99,8 @@ call_user_func(
// hook registration
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'SGalinski\SgNews\TCA\TcaProvider';
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']['sg_news']
= \SGalinski\SgNews\Hooks\PageLayoutView\PluginRenderer::class;
// Xclasses
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\CMS\Core\Page\PageRenderer'] =
......@@ -139,5 +141,11 @@ call_user_func(
\SGalinski\SgNews\Updates\UpdateAuthors::class;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\SGalinski\SgNews\Updates\MigrateSchedulerTasks::IDENTIFIER] =
\SGalinski\SgNews\Updates\MigrateSchedulerTasks::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][] = [
'nodeName' => 'languageVisibility',
'priority' => 40,
'class' => \TYPO3\Languagevisibility\UserFunction\FieldVisibilityUserFunction::class,
];
}, 'sg_news'
);
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