From e1c25e69bdadba124ddb8ee2f3ae8bf1ca1d6123 Mon Sep 17 00:00:00 2001
From: Fabian Galinski <fabian@sgalinski.de>
Date: Fri, 17 Jun 2016 10:11:33 +0200
Subject: [PATCH] [FEATURE] Use the single news imaga data for teaser image
 data, if they are empty.

---
 Classes/Controller/AbstractController.php | 58 +++++++++++++++++++----
 1 file changed, 50 insertions(+), 8 deletions(-)

diff --git a/Classes/Controller/AbstractController.php b/Classes/Controller/AbstractController.php
index 7385c5a..e7d15e3 100644
--- a/Classes/Controller/AbstractController.php
+++ b/Classes/Controller/AbstractController.php
@@ -80,11 +80,41 @@ abstract class AbstractController extends ActionController {
 	 * @return array
 	 */
 	protected function getMetaDataForNews(News $news, Category $category) {
-		/** @var FileReference $teaserImage */
+		$singleNewsImageData = $this->getDataForSingleViewImage($news, $category);
+		$teaserImageData = $this->getDataForTeaserImage($news, $category);
+
+		// Use single news image data for teaser image data, if the teaser imaga data are empty.
+		$teaserIsEmpty = $teaserImageData['teaserImage'] === NULL && $teaserImageData['teaserImageObject'] === NULL;
+		$singleNewsIsEmpty = $singleNewsImageData['image'] === NULL && $singleNewsImageData['imageObject'] === NULL;
+		if ($teaserIsEmpty && !$singleNewsIsEmpty) {
+			$teaserImageData = [
+				'teaserImage' => $singleNewsImageData['image'],
+				'teaserImageObject' => $singleNewsImageData['imageObject'],
+				'teaserImageHeadlineColor' => $singleNewsImageData['imageHeadlineColor'],
+			];
+		}
+
+		return array_merge(
+			[
+				'category' => $category,
+				'news' => $news,
+			],
+			$singleNewsImageData,
+			$teaserImageData
+		);
+	}
+
+	/**
+	 * Returns the single view image data as an array for the given news and category as fallback.
+	 *
+	 * @param News $news
+	 * @param Category $category
+	 * @return array
+	 */
+	protected function getDataForSingleViewImage(News $news, Category $category) {
 		/** @var FileReference $singleNewsImage */
+		$singleNewsImage = $singleNewsImageObject = NULL;
 		$objectForData = $news;
-		$teaserImage = $singleNewsImage = $singleNewsImageObject = $teaserImageObject = NULL;
-
 		$singleNewsImages = $news->getTeaser2Image();
 		if (count($singleNewsImages)) {
 			$singleNewsImage = $singleNewsImages->current();
@@ -108,6 +138,23 @@ abstract class AbstractController extends ActionController {
 			}
 		}
 
+		return [
+			'image' => $singleNewsImage,
+			'imageObject' => $singleNewsImageObject,
+			'imageHeadlineColor' => $imageHeadlineColor,
+		];
+	}
+
+	/**
+	 * Returns the teaser image data as an array for the given news and category as fallback.
+	 *
+	 * @param News $news
+	 * @param Category $category
+	 * @return array
+	 */
+	protected function getDataForTeaserImage(News $news, Category $category) {
+		/** @var FileReference $teaserImage */
+		$teaserImage = $teaserImageObject = NULL;
 		$objectForData = $news;
 		$teaserImages = $news->getTeaser1Image();
 		if (count($teaserImages)) {
@@ -133,13 +180,8 @@ abstract class AbstractController extends ActionController {
 		}
 
 		return [
-			'category' => $category,
-			'news' => $news,
-			'image' => $singleNewsImage,
-			'imageObject' => $singleNewsImageObject,
 			'teaserImage' => $teaserImage,
 			'teaserImageObject' => $teaserImageObject,
-			'imageHeadlineColor' => $imageHeadlineColor,
 			'teaserImageHeadlineColor' => $teaserImageHeadlineColor,
 		];
 	}
-- 
GitLab