diff --git a/Classes/Controller/LatestController.php b/Classes/Controller/LatestController.php index d08977f29f5e6a5141837fd18deb49709e38a8b9..2221c06038c42a287cf6438602945f7fe830ee95 100644 --- a/Classes/Controller/LatestController.php +++ b/Classes/Controller/LatestController.php @@ -28,6 +28,7 @@ namespace SGalinski\SgNews\Controller; use SGalinski\SgNews\Domain\Model\Category; use SGalinski\SgNews\Domain\Model\News; +use SGalinski\SgNews\Service\ConfigurationService; use TYPO3\CMS\Core\Utility\GeneralUtility; /** @@ -60,11 +61,15 @@ class LatestController extends AbstractController { * @return void * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ public function indexAction(array $newsMetaData = [], $offset = 0) { $limit = ((int) $this->settings['limit']); $limit = ($limit < 1 ? 1 : $limit); + $configurationService = GeneralUtility::makeInstance(ConfigurationService::class); + $sortBy = $configurationService->getConfiguration('sortBy', $this->settings); + $categoryUids = GeneralUtility::intExplode(',', $this->settings['categories'], TRUE); $tagUids = GeneralUtility::intExplode(',', $this->settings['tags'], TRUE); if ((int) $GLOBALS['TSFE']->page['doktype'] === 117 && !count($categoryUids)) { @@ -74,7 +79,7 @@ class LatestController extends AbstractController { $startTime = (int) $this->settings['starttime']; $endTime = (int) $this->settings['endtime']; $latestNewsEntries = $this->newsRepository->findLastUpdatedOrHighlightedNewsByCategories( - $limit, FALSE, $categoryUids, $offset, TRUE, $this->settings['sortBy'], $tagUids, $startTime, $endTime + $limit, FALSE, $categoryUids, $offset, TRUE, $sortBy, $tagUids, $startTime, $endTime ); $categories = []; @@ -102,7 +107,7 @@ class LatestController extends AbstractController { if (count($newsMetaData) < $limit) { $offset += $limit; $maxCount = $this->newsRepository->getCountOfLastUpdatedOrHighlightedNewsByCategories( - FALSE, $categoryUids, TRUE, $this->settings['sortBy'], $tagUids, $startTime, $endTime + FALSE, $categoryUids, TRUE, $sortBy, $tagUids, $startTime, $endTime ); if ($offset < $maxCount) { $this->indexAction($newsMetaData, $offset); diff --git a/Classes/Controller/ListByCategoryController.php b/Classes/Controller/ListByCategoryController.php index 677a1b1f770a4f16aa0ed8ea972649e8004b1c88..48a1997b8cc37cef9408e96b3d5719f76aa9cc5e 100644 --- a/Classes/Controller/ListByCategoryController.php +++ b/Classes/Controller/ListByCategoryController.php @@ -27,8 +27,10 @@ namespace SGalinski\SgNews\Controller; ***************************************************************/ use SGalinski\SgNews\Domain\Model\News; +use SGalinski\SgNews\Service\ConfigurationService; use SGalinski\SgNews\Service\HeaderMetaDataService; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; /** * Controller that handles the list rendering of a single category @@ -72,6 +74,7 @@ class ListByCategoryController extends AbstractController { * @return void * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ public function indexAction(array $newsMetaData = [], $currentPageBrowserPage = 0) { $filterByCategories = FALSE; @@ -104,9 +107,14 @@ class ListByCategoryController extends AbstractController { $headerSet = FALSE; $offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsPerPage); + $configurationService = GeneralUtility::makeInstance(ConfigurationService::class); + $sortBy = $configurationService->getConfiguration('sortBy', $this->settings); + $sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings); + $news = $this->newsRepository->findAllSortedNewsByCategories( - $categoryUids, $newsPerPage, $offset, $this->settings['sortBy'], $tagUids, $startTime, $endTime + $categoryUids, $newsPerPage, $offset, $sortBy, $tagUids, $startTime, $endTime, $sortDirection )->toArray(); + foreach ($news as $newsEntry) { /** @var News $newsEntry */ $data = $this->getMetaDataForNews($newsEntry, $categories[$newsEntry->getPid()]); diff --git a/Classes/Controller/OverviewController.php b/Classes/Controller/OverviewController.php index 00fada20cc522b274ae140b70741d9d3d2e05689..12c71ffc841ab5cb8e658c497b4063d6cc418d56 100644 --- a/Classes/Controller/OverviewController.php +++ b/Classes/Controller/OverviewController.php @@ -29,6 +29,7 @@ namespace SGalinski\SgNews\Controller; use SGalinski\SgNews\Domain\Model\Category; use SGalinski\SgNews\Domain\Model\Tag; use SGalinski\SgNews\Domain\Model\News; +use SGalinski\SgNews\Service\ConfigurationService; use SGalinski\SgNews\Service\HeaderMetaDataService; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Persistence\Generic\Query; @@ -78,6 +79,7 @@ class OverviewController extends AbstractController { * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ public function overviewAction(array $newsFilter = [], $currentPageBrowserPage = 0) { switch ((int) $this->settings['groupBy']) { @@ -138,6 +140,7 @@ class OverviewController extends AbstractController { * @return void * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ protected function overviewWithCategories( array $newsByCategory = [], array $allNews = [], array $newsFilter = [], $currentPageBrowserPage = 0 @@ -157,6 +160,10 @@ class OverviewController extends AbstractController { $startTime = (int) $this->settings['starttime']; $endTime = (int) $this->settings['endtime']; + $configurationService = GeneralUtility::makeInstance(ConfigurationService::class); + $sortBy = $configurationService->getConfiguration('sortBy', $this->settings); + $sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings); + $categoryIds = []; $categoriesById = []; $newsMetaData = []; @@ -171,7 +178,7 @@ class OverviewController extends AbstractController { $tagIds = [(int) $newsFilter['tag']]; } $news = $this->newsRepository->findAllSortedNewsByCategories( - [$categoryId], $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime + [$categoryId], $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection ); $newsMetaData[$categoryId] = []; foreach ($news as $newsEntry) { @@ -218,7 +225,7 @@ class OverviewController extends AbstractController { $tagIds = [(int) $newsFilter['tag']]; } $news = $this->newsRepository->findAllSortedNewsByCategories( - $categoryIds, $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime + $categoryIds, $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection ); foreach ($news as $newsEntry) { @@ -279,6 +286,7 @@ class OverviewController extends AbstractController { * @return void * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ protected function overviewWithTags( array $newsByTag = [], array $allNews = [], array $newsFilter = [], $currentPageBrowserPage = 0 @@ -292,6 +300,10 @@ class OverviewController extends AbstractController { $tagPid = $GLOBALS['TSFE']->id; } + $configurationService = GeneralUtility::makeInstance(ConfigurationService::class); + $sortBy = $configurationService->getConfiguration('sortBy', $this->settings); + $sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings); + $categoryIds = NULL; if ($newsFilter['category']) { $categoryIds = [(int) $newsFilter['category']]; @@ -317,7 +329,7 @@ class OverviewController extends AbstractController { $tagsById[$tagId] = $tag; $news = $this->newsRepository->findAllSortedNewsByCategories( - $categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], [$tagId], $startTime, $endTime + $categoryIds, $newsLimitPerTag, $offset, $sortBy, [$tagId], $startTime, $endTime, $sortDirection ); $newsMetaData[$tagId] = []; foreach ($news as $newsEntry) { @@ -362,7 +374,7 @@ class OverviewController extends AbstractController { // Get all news by tags. $news = $this->newsRepository->findAllSortedNewsByCategories( - $categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime + $categoryIds, $newsLimitPerTag, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection ); foreach ($news as $newsEntry) { /** @var News $newsEntry */ @@ -435,6 +447,7 @@ class OverviewController extends AbstractController { * @throws \InvalidArgumentException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException + * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException */ protected function overviewWithoutCategoriesAction( array $newsMetaData = [], array $newsFilter = NULL, $currentPageBrowserPage = 0 @@ -445,6 +458,10 @@ class OverviewController extends AbstractController { $this->view->assign('selectedTag', $selectedTag); $this->view->assign('selectedCategory', $selectedCategory); + $configurationService = GeneralUtility::makeInstance(ConfigurationService::class); + $sortBy = $configurationService->getConfiguration('sortBy', $this->settings); + $sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings); + $newsPerPage = (int) $this->settings['newsLimit']; $offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsPerPage); @@ -496,7 +513,7 @@ class OverviewController extends AbstractController { } $news = $this->newsRepository->findAllSortedNewsByCategories( - $categoryIds, $newsPerPage, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime + $categoryIds, $newsPerPage, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection ); foreach ($news as $newsEntry) { /** @var News $newsEntry */ diff --git a/Classes/Domain/Repository/NewsRepository.php b/Classes/Domain/Repository/NewsRepository.php index 2112ac5e72cfff72f9530f1a19d862b971bffa4d..f931fea680c847d7b584c47d6da4f5079ed81697 100644 --- a/Classes/Domain/Repository/NewsRepository.php +++ b/Classes/Domain/Repository/NewsRepository.php @@ -45,12 +45,13 @@ class NewsRepository extends AbstractRepository { * @param array $tagIds NULL, if the tag filter isn't applied, otherwise an array with the tag uids. * @param int $startTime unix timestamp of the lower limit of the news results date * @param int $endTime unix timestamp of the upper limit of the news results date + * @param string $sortDirection either DESC or ASC * @return QueryResultInterface * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException */ public function findAllSortedNewsByCategories( array $categoryIds = NULL, $limit = 0, $offset = 0, $sortBy = 'date', array $tagIds = NULL, - $startTime = 0, $endTime = 0 + $startTime = 0, $endTime = 0, $sortDirection = 'DESC' ): QueryResultInterface { $query = $this->createQuery(); @@ -97,17 +98,23 @@ class NewsRepository extends AbstractRepository { $query->setOffset($offset); } + if ($sortDirection === 'ASC') { + $order = QueryInterface::ORDER_ASCENDING; + } else { + $order = QueryInterface::ORDER_DESCENDING; + } + if ($sortBy === 'date') { $query->setOrderings( [ - 'lastUpdated' => QueryInterface::ORDER_DESCENDING, - 'crdate' => QueryInterface::ORDER_DESCENDING, + 'lastUpdated' => $order, + 'crdate' => $order, ] ); } else { $query->setOrderings( [ - 'sorting' => QueryInterface::ORDER_ASCENDING, + 'sorting' => $order, 'lastUpdated' => QueryInterface::ORDER_DESCENDING, 'crdate' => QueryInterface::ORDER_DESCENDING, ] diff --git a/Classes/Service/ConfigurationService.php b/Classes/Service/ConfigurationService.php new file mode 100644 index 0000000000000000000000000000000000000000..6d97ba2e7e918db947c94714b286133f15c2b4bf --- /dev/null +++ b/Classes/Service/ConfigurationService.php @@ -0,0 +1,66 @@ +<?php + +namespace SGalinski\SgNews\Service; + +/*************************************************************** + * 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\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException; + +/** + * This service provides helper function for dealing with plugin configuration + */ +class ConfigurationService implements SingletonInterface { + + /** + * @var array + */ + protected $tsConfig; + + /** + * Returns the desired config value either from TypoScript settings or flexform config + * If the user set 'System default' in the flexform, the value will be fetched from TS + * + * @param string $key + * @param array $settings + * @throws InvalidConfigurationTypeException + * @return string + */ + public function getConfiguration($key, array $settings): string { + if (!$this->tsConfig) { + $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class); + $this->tsConfig = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); + } + if ($settings[$key] === 'typoscript') { + $setting = $this->tsConfig['plugin.']['tx_sgnews.']['settings.'][$key]; + } else { + $setting = $settings[$key]; + } + return $setting; + } +} diff --git a/Configuration/FlexForms/Latest.xml b/Configuration/FlexForms/Latest.xml index 2a2864db9d0468ee7d81ebbf8b89a9ce502427ab..d6609204b59dd493fa8fd4626f27cef193d3a325 100644 --- a/Configuration/FlexForms/Latest.xml +++ b/Configuration/FlexForms/Latest.xml @@ -79,6 +79,29 @@ </config> </TCEforms> </settings.endtime> + + <settings.sortBy> + <TCEforms> + <label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label> + <config> + <type>select</type> + <items> + <numIndex index="0"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex> + <numIndex index="1">typoscript</numIndex> + </numIndex> + <numIndex index="1"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex> + <numIndex index="1">date</numIndex> + </numIndex> + <numIndex index="2"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex> + <numIndex index="1">positionInTree</numIndex> + </numIndex> + </items> + </config> + </TCEforms> + </settings.sortBy> </el> </ROOT> </main> diff --git a/Configuration/FlexForms/ListByCategory.xml b/Configuration/FlexForms/ListByCategory.xml index 4d49f27a429d193d149020d51f54caef47c760dd..a47efa178d7edd427b6bfc8502568cae31252979 100644 --- a/Configuration/FlexForms/ListByCategory.xml +++ b/Configuration/FlexForms/ListByCategory.xml @@ -79,6 +79,52 @@ </config> </TCEforms> </settings.endtime> + + <settings.sortBy> + <TCEforms> + <label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label> + <config> + <type>select</type> + <items> + <numIndex index="0"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex> + <numIndex index="1">typoscript</numIndex> + </numIndex> + <numIndex index="1"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex> + <numIndex index="1">date</numIndex> + </numIndex> + <numIndex index="2"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex> + <numIndex index="1">positionInTree</numIndex> + </numIndex> + </items> + </config> + </TCEforms> + </settings.sortBy> + + <settings.sortDirection> + <TCEforms> + <label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortOrder</label> + <config> + <type>select</type> + <items> + <numIndex index="0"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex> + <numIndex index="1">typoscript</numIndex> + </numIndex> + <numIndex index="1"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.desc</numIndex> + <numIndex index="1">DESC</numIndex> + </numIndex> + <numIndex index="2"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.asc</numIndex> + <numIndex index="1">ASC</numIndex> + </numIndex> + </items> + </config> + </TCEforms> + </settings.sortDirection> </el> </ROOT> </main> diff --git a/Configuration/FlexForms/Overview.xml b/Configuration/FlexForms/Overview.xml index 379596990bcc564c23866cf043f704fe61f315ab..e6be473e90db4036244386b6fc7aecff7a41f568 100644 --- a/Configuration/FlexForms/Overview.xml +++ b/Configuration/FlexForms/Overview.xml @@ -82,6 +82,50 @@ </config> </TCEforms> </settings.endtime> + <settings.sortBy> + <TCEforms> + <label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label> + <config> + <type>select</type> + <items> + <numIndex index="0"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex> + <numIndex index="1">typoscript</numIndex> + </numIndex> + <numIndex index="1"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex> + <numIndex index="1">date</numIndex> + </numIndex> + <numIndex index="2"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex> + <numIndex index="1">positionInTree</numIndex> + </numIndex> + </items> + </config> + </TCEforms> + </settings.sortBy> + <settings.sortDirection> + <TCEforms> + <label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortOrder</label> + <config> + <type>select</type> + <items> + <numIndex index="0"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex> + <numIndex index="1">typoscript</numIndex> + </numIndex> + <numIndex index="1"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.desc</numIndex> + <numIndex index="1">DESC</numIndex> + </numIndex> + <numIndex index="2"> + <numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.asc</numIndex> + <numIndex index="1">ASC</numIndex> + </numIndex> + </items> + </config> + </TCEforms> + </settings.sortDirection> </el> </ROOT> </main> diff --git a/Configuration/TypoScript/Frontend/constants.txt b/Configuration/TypoScript/Frontend/constants.txt index 0d95fddf9df38c00aac100c9c6910394364a7b7d..6d1bb7ae3ff7b16c4de09d6a6a306b12fad222a3 100644 --- a/Configuration/TypoScript/Frontend/constants.txt +++ b/Configuration/TypoScript/Frontend/constants.txt @@ -13,6 +13,9 @@ plugin.tx_sgnews { settings { newsLimitPerPage = 12 tagPid = + + # sort direction (DESC / ASC) + sortDirection = DESC } pagebrowser.settings { diff --git a/Configuration/TypoScript/Frontend/setup.txt b/Configuration/TypoScript/Frontend/setup.txt index 9ec4f5e04d92d08d6a47b7ecef13bfc45ea647be..2b962113731b44d1bd9999e437c7a11872094d9d 100644 --- a/Configuration/TypoScript/Frontend/setup.txt +++ b/Configuration/TypoScript/Frontend/setup.txt @@ -98,6 +98,9 @@ plugin.tx_sgnews { # How to sort the news in general (date, positionInTree) sortBy = date + # sort direction (DESC / ASC) + sortDirection = {$plugin.tx_sgnews.settings.sortDirection} + # The publisher value for the structured data implementation (see single view template) publisher = diff --git a/Resources/Private/Language/de.locallang_db.xlf b/Resources/Private/Language/de.locallang_db.xlf index 547ef6c542ea9acd0c8c8d96d21b5f73ae0a6b03..1f7f9773e3c6a880a2724d1737daa71e9f3b77cc 100644 --- a/Resources/Private/Language/de.locallang_db.xlf +++ b/Resources/Private/Language/de.locallang_db.xlf @@ -9,114 +9,142 @@ <authorEmail>stefan@sgalinski.de</authorEmail> </header> <body> - <trans-unit id="pages.subtitle.inPalette" approved="yes"> - <source>Title</source> - <target>Titel</target> - </trans-unit> - <trans-unit id="pages.tabs.images" approved="yes"> - <source>Images</source> - <target>Bilder</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_author" approved="yes"> - <source>Author</source> - <target>Autor</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_author.inPalette" approved="yes"> - <source>Author (use the free text field if the author not in the list)</source> - <target>Autor (benutze das Freitextfeld, falls der Autor nicht in der Liste ist)</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_highlighted" approved="yes"> - <source>Highlighted / Top Element</source> - <target>Hervorgehoben / Top-Element</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_likes" approved="yes"> - <source>Like Count</source> - <target>Anzahl der Likes</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_never_highlighted" approved="yes"> - <source>Don't show in "Latest News"</source> - <target>Nicht in "letzten News" anzeigen</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_related_news" approved="yes"> - <source>Related Elements</source> - <target>Verwandte Elemente</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_tags" approved="yes"> - <source>Tags</source> - <target>Tags</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_teaser1_image" approved="yes"> - <source>Teaser image</source> - <target>Teaser-Bild</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_teaser2_image" approved="yes"> - <source>Single view image</source> - <target>Einzelansichts-Bild</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_use_image_crop" approved="yes"> - <source>Use Image Cropping</source> - <target>Bild-Cropping aktivieren</target> - </trans-unit> - <trans-unit id="pages.tx_sgnews_location"> - <source>Location</source> - <target>Ort</target> - </trans-unit> - <trans-unit id="plugin.flexForm" approved="yes"> - <source>Settings</source> - <target>Einstellungen</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.categories" approved="yes"> - <source>Categories (No Selection = all)</source> - <target>Kategorien (Keine Auswahl = alle)</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes"> - <source>Enable Filter</source> - <target>Filter aktivieren</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.endtime" approved="yes"> - <source>Show news until</source> - <target>Zeige News bis</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy" approved="yes"> - <source>Group by</source> - <target>Gruppiere nach</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.0" approved="yes"> - <source>None</source> - <target>Weder noch</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.1" approved="yes"> - <source>Categories</source> - <target>Kategorien</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.2" approved="yes"> - <source>Tags</source> - <target>Tags</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.listByCategory.categories" approved="yes"> - <source>Categories (No Selection = current page)</source> - <target>Kategorien (Keine Auswahl = aktuelle Seite)</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.listByCategory.tags" approved="yes"> - <source>Tags, if none is selected, then all will be displayed</source> - <target>Tags, wenn keine ausgewählt wird, dann werden alle angezeigt</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.newsLimit" approved="yes"> - <source>News limit (depending on the view by category or in total)</source> - <target>News-Limit (je nach Ansicht pro Kategorie oder insgesamt)</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.newsLimitPerPage" approved="yes"> - <source>News Limit per Page</source> - <target>News-Limit pro Seite</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection" approved="yes"> - <source>Only news within this page section</source> - <target>Nur News innerhalb dieses Seitenbereichs</target> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.starttime" approved="yes"> - <source>Show news from</source> - <target>Zeige News ab</target> - </trans-unit> + <trans-unit id="pages.subtitle.inPalette" approved="yes"> + <source><![CDATA[Title]]></source> + <target><![CDATA[Titel]]></target> + </trans-unit> + <trans-unit id="pages.tabs.images" approved="yes"> + <source><![CDATA[Images]]></source> + <target><![CDATA[Bilder]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_author" approved="yes"> + <source><![CDATA[Author]]></source> + <target><![CDATA[Autor]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_author.inPalette" approved="yes"> + <source><![CDATA[Author (use the free text field if the author not in the list)]]></source> + <target><![CDATA[Autor (benutze das Freitextfeld, falls der Autor nicht in der Liste ist)]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_highlighted" approved="yes"> + <source><![CDATA[Highlighted / Top Element]]></source> + <target><![CDATA[Hervorgehoben / Top-Element]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_likes" approved="yes"> + <source><![CDATA[Like Count]]></source> + <target><![CDATA[Anzahl der Likes]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_location" approved="yes"> + <source><![CDATA[Location]]></source> + <target><![CDATA[Ort]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_never_highlighted" approved="yes"> + <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_related_news" approved="yes"> + <source><![CDATA[Related Elements]]></source> + <target><![CDATA[Verwandte Elemente]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_tags" approved="yes"> + <source><![CDATA[Tags]]></source> + <target><![CDATA[Tags]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_teaser1_image" approved="yes"> + <source><![CDATA[Teaser image]]></source> + <target><![CDATA[Teaser-Bild]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_teaser2_image" approved="yes"> + <source><![CDATA[Single view image]]></source> + <target><![CDATA[Einzelansichts-Bild]]></target> + </trans-unit> + <trans-unit id="pages.tx_sgnews_use_image_crop" approved="yes"> + <source><![CDATA[Use Image Cropping]]></source> + <target><![CDATA[Bild-Cropping aktivieren]]></target> + </trans-unit> + <trans-unit id="plugin.flexForm" approved="yes"> + <source><![CDATA[Settings]]></source> + <target><![CDATA[Einstellungen]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.asc" approved="yes"> + <source><![CDATA[Ascending]]></source> + <target><![CDATA[Aufsteigend]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.dateOfPublication" approved="yes"> + <source><![CDATA[Date of publication]]></source> + <target><![CDATA[Tag der Veröffentlichung]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.desc" approved="yes"> + <source><![CDATA[Descending]]></source> + <target><![CDATA[Absteigend]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.orderInPageTree" approved="yes"> + <source><![CDATA[Order in pagetree]]></source> + <target><![CDATA[Reihenfolge im Seitenbaum]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.sortBy" approved="yes"> + <source><![CDATA[Sort by]]></source> + <target><![CDATA[Sortieren nach]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.sortOrder" approved="yes"> + <source><![CDATA[Sort order]]></source> + <target><![CDATA[Sortierreihenfolge]]></target> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.systemDefault" approved="yes"> + <source><![CDATA[System default]]></source> + <target><![CDATA[Systemstandard]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.categories" approved="yes"> + <source><![CDATA[Categories (No Selection = all)]]></source> + <target><![CDATA[Kategorien (Keine Auswahl = alle)]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes"> + <source><![CDATA[Enable Filter]]></source> + <target><![CDATA[Filter aktivieren]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.endtime" approved="yes"> + <source><![CDATA[Show news until]]></source> + <target><![CDATA[Zeige News bis]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy" approved="yes"> + <source><![CDATA[Group by]]></source> + <target><![CDATA[Gruppiere nach]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.0" approved="yes"> + <source><![CDATA[None]]></source> + <target><![CDATA[Weder noch]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.1" approved="yes"> + <source><![CDATA[Categories]]></source> + <target><![CDATA[Kategorien]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.2" approved="yes"> + <source><![CDATA[Tags]]></source> + <target><![CDATA[Tags]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.listByCategory.categories" approved="yes"> + <source><![CDATA[Categories (No Selection = current page)]]></source> + <target><![CDATA[Kategorien (Keine Auswahl = aktuelle Seite)]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.listByCategory.tags" approved="yes"> + <source><![CDATA[Tags, if none is selected, then all will be displayed]]></source> + <target><![CDATA[Tags, wenn keine ausgewählt wird, dann werden alle angezeigt]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.newsLimit" approved="yes"> + <source><![CDATA[News limit (depending on the view by category or in total)]]></source> + <target><![CDATA[News-Limit (je nach Ansicht pro Kategorie oder insgesamt)]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.newsLimitPerPage" approved="yes"> + <source><![CDATA[News Limit per Page]]></source> + <target><![CDATA[News-Limit pro Seite]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection" approved="yes"> + <source><![CDATA[Only news within this page section]]></source> + <target><![CDATA[Nur News innerhalb dieses Seitenbereichs]]></target> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.starttime" approved="yes"> + <source><![CDATA[Show news from]]></source> + <target><![CDATA[Zeige News ab]]></target> + </trans-unit> </body> </file> </xliff> \ No newline at end of file diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index a247299eef3b029d03c9913c81464fddddb1c0c8..e2cf33a9572f625f527aed80cbc533026678f139 100644 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -9,87 +9,108 @@ <authorEmail>stefan@sgalinski.de</authorEmail> </header> <body> - <trans-unit id="pages.subtitle.inPalette"> - <source>Title</source> - </trans-unit> - <trans-unit id="pages.tabs.images"> - <source>Images</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_author"> - <source>Author</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_author.inPalette"> - <source>Author (use the free text field if the author not in the list)</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_highlighted"> - <source>Highlighted / Top Element</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_likes"> - <source>Like Count</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_never_highlighted"> - <source>Don't show in "Latest News"</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_related_news"> - <source>Related Elements</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_tags"> - <source>Tags</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_teaser1_image"> - <source>Teaser image</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_teaser2_image"> - <source>Single view image</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_use_image_crop"> - <source>Use Image Cropping</source> - </trans-unit> - <trans-unit id="pages.tx_sgnews_location"> - <source>Location</source> - </trans-unit> - <trans-unit id="plugin.flexForm"> - <source>Settings</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.categories"> - <source>Categories (No Selection = all)</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.enableFilter"> - <source>Enable Filter</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.endtime"> - <source>Show news until</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy"> - <source>Group by</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.0"> - <source>None</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.1"> - <source>Categories</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.groupBy.I.2"> - <source>Tags</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.listByCategory.categories"> - <source>Categories (No Selection = current page)</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.listByCategory.tags"> - <source>Tags, if none is selected, then all will be displayed</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.newsLimit"> - <source>News limit (depending on the view by category or in total)</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.newsLimitPerPage"> - <source>News Limit per Page</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection"> - <source>Only news within this page section</source> - </trans-unit> - <trans-unit id="plugin.overview.flexForm.starttime"> - <source>Show news from</source> - </trans-unit> + <trans-unit id="pages.subtitle.inPalette"> + <source><![CDATA[Title]]></source> + </trans-unit> + <trans-unit id="pages.tabs.images"> + <source><![CDATA[Images]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_author"> + <source><![CDATA[Author]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_author.inPalette"> + <source><![CDATA[Author (use the free text field if the author not in the list)]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_highlighted"> + <source><![CDATA[Highlighted / Top Element]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_likes"> + <source><![CDATA[Like Count]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_location"> + <source><![CDATA[Location]]></source> + </trans-unit> + <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_related_news"> + <source><![CDATA[Related Elements]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_tags"> + <source><![CDATA[Tags]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_teaser1_image"> + <source><![CDATA[Teaser image]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_teaser2_image"> + <source><![CDATA[Single view image]]></source> + </trans-unit> + <trans-unit id="pages.tx_sgnews_use_image_crop"> + <source><![CDATA[Use Image Cropping]]></source> + </trans-unit> + <trans-unit id="plugin.flexForm"> + <source><![CDATA[Settings]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.asc"> + <source><![CDATA[Ascending]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.dateOfPublication"> + <source><![CDATA[Date of publication]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.desc"> + <source><![CDATA[Descending]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.orderInPageTree"> + <source><![CDATA[Order in pagetree]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.sortBy"> + <source><![CDATA[Sort by]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.sortOrder"> + <source><![CDATA[Sort order]]></source> + </trans-unit> + <trans-unit id="plugin.listByCategory.flexFrom.systemDefault"> + <source><![CDATA[System default]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.categories"> + <source><![CDATA[Categories (No Selection = all)]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.enableFilter"> + <source><![CDATA[Enable Filter]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.endtime"> + <source><![CDATA[Show news until]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy"> + <source><![CDATA[Group by]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.0"> + <source><![CDATA[None]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.1"> + <source><![CDATA[Categories]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.groupBy.I.2"> + <source><![CDATA[Tags]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.listByCategory.categories"> + <source><![CDATA[Categories (No Selection = current page)]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.listByCategory.tags"> + <source><![CDATA[Tags, if none is selected, then all will be displayed]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.newsLimit"> + <source><![CDATA[News limit (depending on the view by category or in total)]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.newsLimitPerPage"> + <source><![CDATA[News Limit per Page]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection"> + <source><![CDATA[Only news within this page section]]></source> + </trans-unit> + <trans-unit id="plugin.overview.flexForm.starttime"> + <source><![CDATA[Show news from]]></source> + </trans-unit> </body> </file> </xliff> \ No newline at end of file