Skip to content
Snippets Groups Projects
Commit 4867d658 authored by Matthias Adrowski's avatar Matthias Adrowski
Browse files

Merge branch 'master' into feature_Upgrade-to-TYPO3-11

parents 7d89596b e38adeb7
No related branches found
No related tags found
1 merge request!38Feature upgrade to typo3 11
......@@ -30,6 +30,7 @@ use RuntimeException;
use SGalinski\SgNews\Domain\Model\Category;
use SGalinski\SgNews\Domain\Model\News;
use SGalinski\SgNews\Service\ImageService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
......@@ -95,6 +96,9 @@ abstract class AbstractController extends ActionController {
return $this->cachedSingleNews[$newsId];
}
$fileRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\FileRepository::class);
$fileObjects = $fileRepository->findByRelation('pages', 'media', $news->getUid());
$singleNewsImageData = $this->getDataForSingleViewImage($news, $category);
$teaserImageData = $this->getDataForTeaserImage($news, $category);
......@@ -114,7 +118,8 @@ abstract class AbstractController extends ActionController {
'news' => $news,
],
$singleNewsImageData,
$teaserImageData
$teaserImageData,
['media' => $fileObjects]
);
$this->cachedSingleNews[$newsId] = $newsRecord;
......
......@@ -355,6 +355,9 @@ class OverviewController extends AbstractController {
if (isset($newsFilter['tag']) && $newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds,
$newsLimitPerCategory,
......@@ -407,6 +410,11 @@ class OverviewController extends AbstractController {
if (isset($newsFilter['tag'])) {
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
}
$selectedCategory = NULL;
if(isset($newsFilter['category'])) {
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
}
$this->view->assign('selectedCategory', $selectedCategory);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags);
$this->view->assign('categories', $categories);
......@@ -534,6 +542,9 @@ class OverviewController extends AbstractController {
}
// Get all news by tags.
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds,
$newsLimitPerTag,
......@@ -583,8 +594,10 @@ class OverviewController extends AbstractController {
}
// remember selection of the filter values, if any
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
$this->view->assign('selectedCategory', $selectedCategory);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags);
$this->view->assign('categories', $categories);
$this->view->assign('numberOfPages', $numberOfPages);
......
......@@ -80,12 +80,29 @@
<settings.enableFilter>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter.description</description>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.enableFilter>
<settings.categoryLabel>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.categoryLabel</label>
<config>
<type>input</type>
</config>
</TCEforms>
</settings.categoryLabel>
<settings.tagLabel>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.tagLabel</label>
<config>
<type>input</type>
</config>
</TCEforms>
</settings.tagLabel>
<settings.newsLimit>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.newsLimit</label>
......
......@@ -133,7 +133,7 @@ if (version_compare(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getExten
--palette--;;media,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
seo_title,canonical_link, ' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') ? '':'description,') . '
seo_title,canonical_link, ' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') || \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('seo') ? '':'description,') . '
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
......@@ -157,7 +157,7 @@ if (version_compare(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getExten
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
tx_projectbase_devnullrobots_flags,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
tx_projectbase_seo_titletag,tx_projectbase_seo_canonicaltag, ' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') ? '':'description,') . '
tx_projectbase_seo_titletag,tx_projectbase_seo_canonicaltag, ' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') || \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('seo') ? '':'description,') . '
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
......@@ -456,7 +456,7 @@ if (version_compare(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getExten
$GLOBALS['TCA']['pages']['palettes']['titleDescriptionAndHighlightFlag'] = [
'showitem' => 'subtitle;' . $localLangDbPath . 'pages.subtitle.inPalette,
--linebreak--, title,
' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') ? '':'--linebreak--, description,') . '
' . (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('yoast_seo') || \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('seo') ? '':'--linebreak--, description,') . '
--linebreak--, slug,
--linebreak--, tx_projectbase_path_segment, tx_projectbase_excludefromsluggeneration,
--linebreak--, tx_realurl_pathsegment, tx_realurl_exclude,
......
......@@ -142,8 +142,8 @@
<target><![CDATA[News Autor]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.orderInPageTree" approved="yes">
<source><![CDATA[Order in pagetree]]></source>
<target><![CDATA[Reihenfolge im Seitenbaum]]></target>
<source><![CDATA[Order in pagetree (Only one category allowed)]]></source>
<target><![CDATA[Reihenfolge im Seitenbaum (Nur eine Kategorie erlaubt)]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.showDetails" approved="yes">
<source><![CDATA[Show the information of the author.]]></source>
......@@ -189,6 +189,14 @@
<source><![CDATA[Categories]]></source>
<target><![CDATA[Kategorien]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.categoryLabel" approved="yes">
<source><![CDATA[Override category label]]></source>
<target><![CDATA[Kategorie-Label überschreiben]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.tagLabel" approved="yes">
<source><![CDATA[Override tag label]]></source>
<target><![CDATA[Tag-Label überschreiben]]></target>
</trans-unit>
<trans-unit id="plugin.listByCategory.flexForm.categories.description" approved="yes">
<source><![CDATA[If more than one category is selected the pagination breaks so you need to make sure to set the news limit high enough to display all news on one page.]]></source>
<target><![CDATA[Falls mehr als eine Kategorie ausgewählt ist, bricht die Paginierung, deshalb muss sichergestellt werden, dass das Anzeigelimit ausreichend hoch eingestellt ist, dass alle News auf einer Seite angezeigt werden.]]></target>
......@@ -212,8 +220,12 @@ If none are selected, all categories will be available in the frontend.]]></sour
Wenn keine ausgewählt werden, sind alle Kategorien im Frontend verfügbar.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes">
<source><![CDATA[Enable filtering by criteria that are not grouped in tabs]]></source>
<target><![CDATA[Filtern nach Kriterien, die nicht in Tabs sortiert sind, ermöglichen]]></target>
<source><![CDATA[Enable filtering by all criteria.]]></source>
<target><![CDATA[Ermögliche das Filtern mit allen Krierien.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter.description" approved="yes">
<source><![CDATA[Filters will be rendered as select boxes and tabs will be hidden.]]></source>
<target><![CDATA[Filter werden als Dropdown-Box angezeigt und die Tabs ausgeblendet.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy" approved="yes">
<source><![CDATA[Group news pages in tabs by]]></source>
......
......@@ -109,7 +109,7 @@
<source><![CDATA[News Author]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.orderInPageTree">
<source><![CDATA[Order in pagetree]]></source>
<source><![CDATA[Order in pagetree (Only one category allowed)]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.showDetails">
<source><![CDATA[Show the information of the author.]]></source>
......@@ -156,12 +156,21 @@
<trans-unit id="plugin.overview.flexForm.categoryRestrictions">
<source><![CDATA[Category Selection]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.categoryLabel">
<source><![CDATA[Override category label]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.tagLabel">
<source><![CDATA[Override tag label]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.categoryRestrictions.description">
<source><![CDATA[You can select specific categories to be shown in the tabs.
If none are selected, all categories will be available in the frontend.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter">
<source><![CDATA[Enable filtering by criteria that are not grouped in tabs]]></source>
<source><![CDATA[Enable filtering by all criteria.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter.description">
<source><![CDATA[Filters will be rendered as select boxes and tabs will be hidden.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy">
<source><![CDATA[Group news pages in tabs by]]></source>
......
<f:form id="tx-sgnews-filter" method="get" objectName="newsFilter">
<div class="tx-sgnews-filter-bar">
<f:if condition="!{categoryTabs}">
<div class="tx-sgnews-filter-bar-form-control">
<label for="filter-categories">
<f:translate key="frontend.filter.category" />
</label>
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedCategory.uid}"
property="category" optionLabelField="title" optionValueField="uid" options="{categories}"
id="filter-categories" prependOptionLabel="" prependOptionValue="" />
</div>
</f:if>
<f:if condition="!{tagTabs}">
<div class="tx-sgnews-filter-bar-form-control">
<label for="filter-tags">
<f:translate key="frontend.filter.tag" />
</label>
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedTag.uid}"
property="tag" optionValueField="uid" options="{tags}" id="filter-tags"
optionLabelField="title" prependOptionLabel="" prependOptionValue="" />
</div>
</f:if>
<div class="tx-sgnews-filter-bar-form-control">
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedCategory.uid}"
property="category" optionLabelField="title" optionValueField="uid" options="{categories}"
id="filter-categories" prependOptionValue=""
prependOptionLabel="{f:if(condition: '{categoryLabel}', then: '{categoryLabel}', else: '{f:translate(key: \'frontend.filter.category\')}')}" />
</div>
<div class="tx-sgnews-filter-bar-form-control">
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedTag.uid}"
property="tag" optionValueField="uid" options="{tags}" id="filter-tags"
optionLabelField="title" prependOptionValue=""
prependOptionLabel="{f:if(condition: '{tagLabel}', then: '{tagLabel}', else: '{f:translate(key: \'frontend.filter.tag\')}')}"/>
</div>
</div>
</f:form>
......@@ -7,83 +7,92 @@
<f:render partial="OverviewSchema" arguments="{newsItems: allNews}" />
<f:if condition="{settings.enableFilter}">
<div id="tx-sgnews-newslist">
<f:render partial="Filter" arguments="{tagTabs: tagTabs, categoryTabs: categoryTabs, categories: categories,
tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" />
</div>
</f:if>
<br />
<div class="tx-sgnews-categories m-tabs" data-more-label="Mehr">
<div class="m-tabs__tablist" role="tablist">
<button class="m-tabs__tab" role="tab" aria-controls="news-category-0" id="tab-news-0" aria-selected="true">
<f:translate key="frontend.overview.allTabLabel" />
</button>
<f:for each="{newsItems}" as="dataItems" iteration="iterator">
<button class="m-tabs__tab" role="tab" aria-controls="news-category-{iterator.index + 1}" id="tab-news-{iterator.index + 1}" aria-selected="false">
<f:if condition="{dataItems.recordType} == 'category'">
<f:then>
{dataItems.record.subtitleWithFallbackToTitle}
</f:then>
<f:else>
{dataItems.record.title}
</f:else>
</f:if>
</button>
</f:for>
</div>
<div class="m-tabs__panellist">
<div class="m-tabs__panel" role="tabpanel" aria-labelledby="tab-news-0" id="news-category-0">
<h4 class="tx-sgnews-tab-title"><f:translate key="frontend.overview.allTabLabel" /></h4>
<ul class="tx-sgnews-list tx-sgnews-list-0 row" data-record="0">
<f:for each="{allNews}" as="newsMetaDataEntry">
<li class="col-md-4 col-sm-6 col-xs-12">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
closingHeaderTag: '</h2>',
showCategory: '{f:if(condition: \'{groupBy} == \" category\"\', then: 0, else: 1)}'
}" />
</li>
</f:for>
</ul>
<f:then>
<div id="tx-sgnews-newslist" class="tx-sgnews-categories">
<f:render partial="Filter" arguments="{tagTabs: tagTabs, categoryTabs: categoryTabs, categories: categories,
tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory, categoryLabel: settings.categoryLabel, tagLabel: settings.tagLabel}" />
<f:render section="content" arguments="{_all}" />
</div>
</f:then>
<f:else>
<div class="tx-sgnews-categories m-tabs" data-more-label="Mehr">
<div class="m-tabs__tablist" role="tablist">
<button class="m-tabs__tab" role="tab" aria-controls="news-category-0" id="tab-news-0" aria-selected="true">
<f:translate key="frontend.overview.allTabLabel" />
</button>
<f:for each="{newsItems}" as="dataItems" iteration="iterator">
<button class="m-tabs__tab" role="tab" aria-controls="news-category-{iterator.index + 1}" id="tab-news-{iterator.index + 1}" aria-selected="false">
<f:if condition="{dataItems.recordType} == 'category'">
<f:then>
{dataItems.record.subtitleWithFallbackToTitle}
</f:then>
<f:else>
{dataItems.record.title}
</f:else>
</f:if>
</button>
</f:for>
</div>
<div class="m-tabs__panellist">
<div class="m-tabs__panel" role="tabpanel" aria-labelledby="tab-news-0" id="news-category-0">
<h4 class="tx-sgnews-tab-title"><f:translate key="frontend.overview.allTabLabel" /></h4>
<f:render section="content" arguments="{_all}" />
</div>
<f:for each="{newsItems}" as="dataItems" iteration="iterator">
<div class="m-tabs__panel m-tabs__panel--closed" role="tabpanel" aria-labelledby="tab-news-{iterator.index + 1}" id="news-category-{iterator.index + 1}">
<f:if condition="{dataItems.newsCount} == 0">
<p>
<f:translate key="frontend.filter.no_result" />
</p>
</f:if>
<h4 class="tx-sgnews-tab-title">{dataItems.record.title}</h4>
<ul class="tx-sgnews-list tx-sgnews-list-{dataItems.record.uid} row" data-record="{dataItems.record.uid}">
<f:for each="{dataItems.newsMetaData}" as="newsMetaDataEntry">
<f:if condition="{newsMetaDataEntry.news}">
<li class="col-md-4 col-sm-6 col-xs-12">
<f:render partial="Teaser" arguments="{
<f:for each="{newsItems}" as="dataItems" iteration="iterator">
<div class="m-tabs__panel m-tabs__panel--closed" role="tabpanel" aria-labelledby="tab-news-{iterator.index + 1}" id="news-category-{iterator.index + 1}">
<f:if condition="{dataItems.newsCount} == 0">
<p>
<f:translate key="frontend.filter.no_result" />
</p>
</f:if>
<h4 class="tx-sgnews-tab-title">{dataItems.record.title}</h4>
<ul class="tx-sgnews-list tx-sgnews-list-{dataItems.record.uid} row" data-record="{dataItems.record.uid}">
<f:for each="{dataItems.newsMetaData}" as="newsMetaDataEntry">
<f:if condition="{newsMetaDataEntry.news}">
<li class="col-md-4 col-sm-6 col-xs-12">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
closingHeaderTag: '</h2>',
showCategory: '{f:if(condition: \'{groupBy} == \" category\"\', then: 0, else: 1)}'
}" />
</li>
}" />
</li>
</f:if>
</f:for>
</ul>
<f:if condition="{dataItems.recordType} == 'category'">
<div class="text-center">
<a class="btn btn-md btn-success category-{dataItems.recordId}" href="{f:uri.page(pageUid: '{dataItems.recordId}')}">
<f:translate key="frontend.overview.showAllEntries" />
</a>
</div>
</f:if>
</f:for>
</ul>
<f:if condition="{dataItems.recordType} == 'category'">
<div class="text-center">
<a class="btn btn-md btn-success category-{dataItems.recordId}" href="{f:uri.page(pageUid: '{dataItems.recordId}')}">
<f:translate key="frontend.overview.showAllEntries" />
</a>
</div>
</f:if>
</f:for>
</div>
</f:for>
</div>
</div>
</div>
</f:else>
</f:if>
<sg:pageBrowser numberOfPages="{numberOfPages}" />
</f:section>
<f:section name="content">
<ul class="tx-sgnews-list tx-sgnews-list-0 row" data-record="0">
<f:for each="{allNews}" as="newsMetaDataEntry">
<li class="col-md-4 col-sm-6 col-xs-12">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
closingHeaderTag: '</h2>',
showCategory: '{f:if(condition: \'{groupBy} == \" category\"\', then: 0, else: 1)}'
}" />
</li>
</f:for>
</ul>
</f:section>
......@@ -85,6 +85,12 @@ export default class ScrollBrowser {
this.lastUrl = this.url;
this.url = doc.querySelector('.tx-pagebrowse-next a').getAttribute('href');
this.lock = false;
const displayNewDataEvent = new CustomEvent('sg_news:displayNewData', {
detail: results
});
document.dispatchEvent(displayNewDataEvent);
}
/**
......
......@@ -2,6 +2,10 @@
- Dropped TYPO3 9 support
## Upgrade from ```9.5.x``` to ```9.6.x```
- Filters are now visible when using the option ```settings.enableFilter``` in the **Overview** plugin.
# Upgrade from ```8.x.x``` to ```9.x.x```
- Dropped TYPO3 8 support
......
......@@ -6,7 +6,7 @@
"license": [
"GPL-2.0-or-later"
],
"version": "9.5.4",
"version": "9.6.3",
"support": {
},
"repositories": [
......
......@@ -19,7 +19,7 @@ $EM_CONF['sg_news'] = [
'modify_tables' => '',
'clearCacheOnLoad' => 0,
'lockType' => '',
'version' => '9.5.4',
'version' => '9.6.3',
'constraints' => [
'depends' => [
'typo3' => '10.4.0-11.5.99',
......
......@@ -37,7 +37,7 @@ call_user_func(
'SgNews',
'Overview',
[\SGalinski\SgNews\Controller\OverviewController::class => 'overview',],
[\SGalinski\SgNews\Controller\OverviewController::class => '',]
[\SGalinski\SgNews\Controller\OverviewController::class => 'overview',]
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
......
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