From 6d06b400709d0ef1099cc6734479a6726c170be6 Mon Sep 17 00:00:00 2001
From: Tim Wagner <tim.wagner@sgalinski.de>
Date: Fri, 17 Jul 2020 17:34:45 +0200
Subject: [PATCH] [TASK] Create backend preview for latest news plugin

---
 .../Hooks/PageLayoutView/PluginRenderer.php   | 35 ++++++-
 .../Private/Language/de.locallang_backend.xlf | 10 +-
 .../Private/Language/de.locallang_db.xlf      | 12 +--
 .../Private/Language/locallang_backend.xlf    |  8 +-
 Resources/Private/Language/locallang_db.xlf   | 10 +-
 .../Private/Templates/Backend/Latest.html     | 91 +++++++++++++++++++
 6 files changed, 150 insertions(+), 16 deletions(-)
 create mode 100644 Resources/Private/Templates/Backend/Latest.html

diff --git a/Classes/Hooks/PageLayoutView/PluginRenderer.php b/Classes/Hooks/PageLayoutView/PluginRenderer.php
index 10ce828..9ae143e 100644
--- a/Classes/Hooks/PageLayoutView/PluginRenderer.php
+++ b/Classes/Hooks/PageLayoutView/PluginRenderer.php
@@ -74,6 +74,37 @@ class PluginRenderer implements PageLayoutViewDrawItemHookInterface {
 
 				$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->addTitlesToRecordIdList(
+						'pages',$pluginConfiguration['settings.categories']['vDEF']
+					),
+					'tags' => $this->addTitlesToRecordIdList(
+						'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;
 			default:
@@ -147,9 +178,7 @@ class PluginRenderer implements PageLayoutViewDrawItemHookInterface {
 	 */
 	protected function addTitlesToRecordIdList(string $table, string $recordIdList): string {
 		$backendUtility = GeneralUtility::makeInstance(BackendUtility::class);
-		// Filtering because explode returns [0 => ''] if $recordIdList is empty (i.e. '')
-		// but we want an empty array in that case.
-		$recordIdsArray = array_filter(explode(',', $recordIdList));
+		$recordIdsArray = GeneralUtility::intExplode(',', $recordIdList, TRUE);
 		$recordsWithTitlesArray = [];
 
 		foreach ($recordIdsArray as $recordId) {
diff --git a/Resources/Private/Language/de.locallang_backend.xlf b/Resources/Private/Language/de.locallang_backend.xlf
index e08c71f..84fb957 100644
--- a/Resources/Private/Language/de.locallang_backend.xlf
+++ b/Resources/Private/Language/de.locallang_backend.xlf
@@ -1,6 +1,6 @@
 <?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="2020-07-17T14:09:42Z">
+	<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>
@@ -65,6 +65,14 @@
 				<source><![CDATA[[News] News Single View]]></source>
 				<target><![CDATA[[News] News Einzelansicht]]></target>
 			</trans-unit>
+			<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="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="titleLatestPlugin" approved="yes">
 				<source><![CDATA[Latest News]]></source>
 				<target><![CDATA[Neueste News]]></target>
diff --git a/Resources/Private/Language/de.locallang_db.xlf b/Resources/Private/Language/de.locallang_db.xlf
index dac5668..1e2734a 100644
--- a/Resources/Private/Language/de.locallang_db.xlf
+++ b/Resources/Private/Language/de.locallang_db.xlf
@@ -1,6 +1,6 @@
 <?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
diff --git a/Resources/Private/Language/locallang_backend.xlf b/Resources/Private/Language/locallang_backend.xlf
index 74fc1f6..fdcf2f9 100644
--- a/Resources/Private/Language/locallang_backend.xlf
+++ b/Resources/Private/Language/locallang_backend.xlf
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="messages" date="2020-07-17T14:09:42Z">
+	<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>
@@ -57,6 +57,12 @@
 			<trans-unit id="pageTypeTitlePluginSingle.news">
 				<source><![CDATA[[News] News Single View]]></source>
 			</trans-unit>
+			<trans-unit id="plugin.preview.latest.categories">
+				<source><![CDATA[Only show news from these categories]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.preview.latest.tags">
+				<source><![CDATA[Only show news with these tags]]></source>
+			</trans-unit>
 			<trans-unit id="titleLatestPlugin">
 				<source><![CDATA[Latest News]]></source>
 			</trans-unit>
diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf
index 24f4f54..2f7acd3 100644
--- a/Resources/Private/Language/locallang_db.xlf
+++ b/Resources/Private/Language/locallang_db.xlf
@@ -1,6 +1,6 @@
 <?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
diff --git a/Resources/Private/Templates/Backend/Latest.html b/Resources/Private/Templates/Backend/Latest.html
new file mode 100644
index 0000000..e8e6691
--- /dev/null
+++ b/Resources/Private/Templates/Backend/Latest.html
@@ -0,0 +1,91 @@
+{namespace be=TYPO3\CMS\Backend\ViewHelpers}
+
+<f:debug>{data}</f:debug>
+
+<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>
-- 
GitLab