‪TYPO3CMS  11.5
GridColumnClassAutoConfigurationViewHelper.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
22 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
23 use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
24 
28 class ‪GridColumnClassAutoConfigurationViewHelper extends AbstractViewHelper
29 {
30  use CompileWithRenderStatic;
31 
35  protected ‪$escapeOutput = false;
36 
42  public function ‪initializeArguments()
43  {
44  $this->registerArgument('element', RootRenderableInterface::class, 'A RootRenderableInterface instance', true);
45  }
46 
53  public static function ‪renderStatic(
54  array $arguments,
55  \Closure $renderChildrenClosure,
56  RenderingContextInterface $renderingContext
57  ) {
58  $formElement = $arguments['element'];
59 
60  $gridRowElement = $formElement->getParentRenderable();
61  $gridRowChildElements = $gridRowElement->getElements();
62 
63  $gridViewPortConfiguration = $gridRowElement->getProperties()['gridColumnClassAutoConfiguration'];
64 
65  if (empty($gridViewPortConfiguration)) {
66  return '';
67  }
68  $gridSize = (int)$gridViewPortConfiguration['gridSize'];
69 
70  $columnsToCalculate = [];
71  $usedColumns = [];
72  foreach ($gridRowChildElements as $childElement) {
73  if (empty($childElement->getProperties()['gridColumnClassAutoConfiguration'])) {
74  foreach ($gridViewPortConfiguration['viewPorts'] as $viewPortName => $configuration) {
75  $columnsToCalculate[$viewPortName]['elements'] = ($columnsToCalculate[$viewPortName]['elements'] ?? 0) + 1;
76  }
77  } else {
78  $gridColumnViewPortConfiguration = $childElement->getProperties()['gridColumnClassAutoConfiguration'];
79  foreach ($gridViewPortConfiguration['viewPorts'] as $viewPortName => $configuration) {
80  $configuration = $gridColumnViewPortConfiguration['viewPorts'][$viewPortName] ?? [];
81  if (
82  isset($configuration['numbersOfColumnsToUse'])
83  && (int)$configuration['numbersOfColumnsToUse'] > 0
84  ) {
85  $usedColumns[$viewPortName]['sum'] = ($usedColumns[$viewPortName]['sum'] ?? 0);
86  $usedColumns[$viewPortName]['sum'] += (int)$configuration['numbersOfColumnsToUse'];
87  if ($childElement->getIdentifier() === $formElement->getIdentifier()) {
88  $usedColumns[$viewPortName]['concreteNumbersOfColumnsToUse'] = (int)$configuration['numbersOfColumnsToUse'];
89  if ($usedColumns[$viewPortName]['concreteNumbersOfColumnsToUse'] > $gridSize) {
90  $usedColumns[$viewPortName]['concreteNumbersOfColumnsToUse'] = $gridSize;
91  }
92  }
93  } else {
94  $columnsToCalculate[$viewPortName]['elements'] = ($columnsToCalculate[$viewPortName]['elements'] ?? 0) + 1;
95  }
96  }
97  }
98  }
99 
100  $classes = [];
101  foreach ($gridViewPortConfiguration['viewPorts'] as $viewPortName => $configuration) {
102  if (isset($usedColumns[$viewPortName]['concreteNumbersOfColumnsToUse'])) {
103  $numbersOfColumnsToUse = $usedColumns[$viewPortName]['concreteNumbersOfColumnsToUse'];
104  } else {
105  $restColumnsToDivide = $gridSize - ($usedColumns[$viewPortName]['sum'] ?? 0);
106  $restElements = (int)$columnsToCalculate[$viewPortName]['elements'];
107 
108  if ($restColumnsToDivide < 1) {
109  $restColumnsToDivide = $gridSize;
110  }
111  if ($restElements < 1) {
112  $restElements = 1;
113  }
114  $numbersOfColumnsToUse = floor($restColumnsToDivide / $restElements);
115  }
116 
117  $classes[] = str_replace(
118  '{@numbersOfColumnsToUse}',
119  (string)$numbersOfColumnsToUse,
120  $configuration['classPattern']
121  );
122  }
123 
124  return implode(' ', $classes);
125  }
126 }
‪TYPO3\CMS\Form\ViewHelpers\GridColumnClassAutoConfigurationViewHelper
Definition: GridColumnClassAutoConfigurationViewHelper.php:29
‪TYPO3\CMS\Form\ViewHelpers\GridColumnClassAutoConfigurationViewHelper\renderStatic
‪static string renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
Definition: GridColumnClassAutoConfigurationViewHelper.php:51
‪TYPO3\CMS\Form\ViewHelpers\GridColumnClassAutoConfigurationViewHelper\initializeArguments
‪initializeArguments()
Definition: GridColumnClassAutoConfigurationViewHelper.php:40
‪TYPO3\CMS\Form\ViewHelpers\GridColumnClassAutoConfigurationViewHelper\$escapeOutput
‪bool $escapeOutput
Definition: GridColumnClassAutoConfigurationViewHelper.php:33
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface
Definition: RootRenderableInterface.php:31
‪TYPO3\CMS\Form\ViewHelpers