[TASK] Show suited TYPO3 versions at distributions
[Packages/TYPO3.CMS.git] / typo3 / sysext / extensionmanager / Classes / ViewHelpers / Typo3DependencyViewHelper.php
1 <?php
2 namespace TYPO3\CMS\Extensionmanager\ViewHelpers;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Utility\MathUtility;
18 use TYPO3\CMS\Core\Utility\VersionNumberUtility;
19 use TYPO3\CMS\Extensionmanager\Domain\Model\Dependency;
20 use TYPO3\CMS\Extensionmanager\Domain\Model\Extension;
21
22 /**
23 * Shows the version numbers of the TYPO3 dependency, if any
24 *
25 * @internal
26 */
27 class Typo3DependencyViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
28
29 /**
30 * Finds and returns the suitable TYPO3 versions of an extension
31 *
32 * @param Extension $extension
33 * @return string
34 */
35 public function render(Extension $extension) {
36 /** @var Dependency $dependency */
37 foreach ($extension->getDependencies() as $dependency) {
38 if ($dependency->getIdentifier() === 'typo3') {
39 $lowestVersion = $dependency->getLowestVersion();
40 $highestVersion = $dependency->getHighestVersion();
41 $cssClass = $this->isVersionSuitable($lowestVersion, $highestVersion) ? 'success' : 'default';
42 return
43 '<span class="label label-' . $cssClass . '">'
44 . htmlspecialchars($lowestVersion) . ' - ' . htmlspecialchars($highestVersion)
45 . '</span>';
46 }
47 }
48 return '';
49 }
50
51 /**
52 * Check if current TYPO3 version is suitable for the extension
53 *
54 * @param string $lowestVersion
55 * @param string $highestVersion
56 * @return bool
57 */
58 protected function isVersionSuitable($lowestVersion, $highestVersion) {
59 $numericTypo3Version = VersionNumberUtility::convertVersionNumberToInteger(VersionNumberUtility::getNumericTypo3Version());
60 $numericLowestVersion = VersionNumberUtility::convertVersionNumberToInteger($lowestVersion);
61 $numericHighestVersion = VersionNumberUtility::convertVersionNumberToInteger($highestVersion);
62 return MathUtility::isIntegerInRange($numericTypo3Version, $numericLowestVersion, $numericHighestVersion);
63 }
64 }