From a2028028c04213962590ddeed717bd44deccb396 Mon Sep 17 00:00:00 2001
From: Michael Kessler <michael.kessler@sgalinski.de>
Date: Fri, 1 Apr 2022 07:55:45 +0200
Subject: [PATCH] [TASK] Assign grid columns in overview by controller

---
 Classes/Controller/OverviewController.php     | 30 +++++++++++++++++++
 Configuration/FlexForms/Overview.xml          | 10 +++----
 .../Private/Templates/Overview/Overview.html  |  4 +--
 .../Overview/OverviewWithoutCategories.html   |  2 +-
 4 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/Classes/Controller/OverviewController.php b/Classes/Controller/OverviewController.php
index f9035a7..00bcf18 100644
--- a/Classes/Controller/OverviewController.php
+++ b/Classes/Controller/OverviewController.php
@@ -123,6 +123,36 @@ class OverviewController extends AbstractController {
 					break;
 			}
 		}
+
+		$this->setupGridColumns();
+	}
+
+	/**
+	 * Assign the grid column classes to the frontend
+	 *
+	 * @return void
+	 */
+	protected function setupGridColumns(): void {
+		if (!isset($this->settings['gridColumns'])) {
+			$this->view->assign('gridColumnClasses', 'col-md-4 col-sm-6 col-xs-12');
+			return;
+		}
+
+		$columnAmount = (int) $this->settings['gridColumns'];
+		$columnClasses = '';
+
+		switch ($columnAmount) {
+			case 4:
+				$columnClasses .= 'col-lg-3 ';
+			case 3:
+				$columnClasses .= 'col-md-4 ';
+			case 2:
+				$columnClasses .= 'col-sm-6 ';
+			default:
+				$columnClasses .= 'col-xs-12';
+		}
+
+		$this->view->assign('gridColumnClasses', $columnClasses);
 	}
 
 	/**
diff --git a/Configuration/FlexForms/Overview.xml b/Configuration/FlexForms/Overview.xml
index 279dd4b..10b59fd 100644
--- a/Configuration/FlexForms/Overview.xml
+++ b/Configuration/FlexForms/Overview.xml
@@ -239,23 +239,23 @@
 							<config>
 								<type>select</type>
 								<renderType>selectSingle</renderType>
-								<default>col-md-4 col-sm-6 col-xs-12</default>
+								<default>3</default>
 								<items>
 									<numIndex index="0">
 										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.1</numIndex>
-										<numIndex index="1">col-xs-12</numIndex>
+										<numIndex index="1">1</numIndex>
 									</numIndex>
 									<numIndex index="1">
 										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.2</numIndex>
-										<numIndex index="1">col-sm-6 col-xs-12</numIndex>
+										<numIndex index="1">2</numIndex>
 									</numIndex>
 									<numIndex index="2">
 										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.3</numIndex>
-										<numIndex index="1">col-md-4 col-sm-6 col-xs-12</numIndex>
+										<numIndex index="1">3</numIndex>
 									</numIndex>
 									<numIndex index="3">
 										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.4</numIndex>
-										<numIndex index="1">col-lg-3 col-md-4 col-sm-6 col-xs-12</numIndex>
+										<numIndex index="1">4</numIndex>
 									</numIndex>
 								</items>
 							</config>
diff --git a/Resources/Private/Templates/Overview/Overview.html b/Resources/Private/Templates/Overview/Overview.html
index 69e998f..1538104 100644
--- a/Resources/Private/Templates/Overview/Overview.html
+++ b/Resources/Private/Templates/Overview/Overview.html
@@ -58,7 +58,7 @@
 							<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="{f:if(condition: '{settings.gridColumns}', then: '{settings.gridColumns}', else: 'col-md-4 col-sm-6 col-xs-12')}">
+										<li class="{gridColumnClasses}">
 											<f:render partial="Teaser" arguments="{
 											newsMetaData: newsMetaDataEntry,
 											headerTag: '<h2>',
@@ -92,7 +92,7 @@
 <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="{f:if(condition: '{settings.gridColumns}', then: '{settings.gridColumns}', else: 'col-md-4 col-sm-6 col-xs-12')}">
+			<li class="{gridColumnClasses}">
 				<f:render partial="Teaser" arguments="{
 								newsMetaData: newsMetaDataEntry,
 								headerTag: '<h2>',
diff --git a/Resources/Private/Templates/Overview/OverviewWithoutCategories.html b/Resources/Private/Templates/Overview/OverviewWithoutCategories.html
index 9402555..f1839f9 100644
--- a/Resources/Private/Templates/Overview/OverviewWithoutCategories.html
+++ b/Resources/Private/Templates/Overview/OverviewWithoutCategories.html
@@ -18,7 +18,7 @@
 			<f:then>
 				<ul class="tx-sgnews-list tx-sgnews-list-0 row" data-record="0">
 					<f:for each="{newsMetaData}" as="newsMetaDataEntry">
-						<li class="{f:if(condition: '{settings.gridColumns}', then: '{settings.gridColumns}', else: 'col-md-4 col-sm-6 col-xs-12')}">
+						<li class="{gridColumnClasses}">
 							<f:render partial="Teaser" arguments="{
 											newsMetaData: newsMetaDataEntry,
 											headerTag: '<h2>',
-- 
GitLab