From 4337087a3d05022760c968deae4b7a5341755bf8 Mon Sep 17 00:00:00 2001
From: Jonathan IROULIN <joniroutypo3@gmail.com>
Date: Tue, 28 Nov 2017 11:18:25 +0100
Subject: [PATCH] [TASK] Install Tool: Display a warning if PHP fileinfo
 extension is not loaded

Show a warning message during the installation process if
the PHP fileinfo extension is not loaded.
It only displays a warning because the fileinfo extension is just
a suggestions and not required.
The fileinfo extension is useful to extract file metadata.

Resolves: #78702
Releases: master, 8.7
Change-Id: Iea0fa087d96d5615056308b7b2fef082b9154a2d
Reviewed-on: https://review.typo3.org/54823
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
---
 .../Classes/SystemEnvironment/Check.php       | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/typo3/sysext/install/Classes/SystemEnvironment/Check.php b/typo3/sysext/install/Classes/SystemEnvironment/Check.php
index 75308c88e3ed..8cd8b90964f0 100644
--- a/typo3/sysext/install/Classes/SystemEnvironment/Check.php
+++ b/typo3/sysext/install/Classes/SystemEnvironment/Check.php
@@ -70,6 +70,13 @@ class Check implements CheckInterface
         'zlib',
     ];
 
+    /**
+     * @var string[]
+     */
+    protected $suggestedPhpExtensions = [
+        'fileinfo' => 'This extension is used for proper file type detection in the File Abstraction Layer.',
+    ];
+
     /**
      * Get all status information as array with status objects
      *
@@ -96,7 +103,11 @@ class Check implements CheckInterface
         $this->checkWindowsApacheThreadStackSize();
 
         foreach ($this->requiredPhpExtensions as $extension) {
-            $this->checkRequiredPhpExtension($extension);
+            $this->checkPhpExtension($extension);
+        }
+
+        foreach ($this->suggestedPhpExtensions as $extension => $purpose) {
+            $this->checkPhpExtension($extension, false, $purpose);
         }
 
         $this->checkPcreVersion();
@@ -637,23 +648,26 @@ class Check implements CheckInterface
     }
 
     /**
-     * Check if a specific required PHP extension is loaded
+     * Checks if a specific PHP extension is loaded.
      *
      * @param string $extension
+     * @param bool $required
+     * @param string $purpose
      */
-    protected function checkRequiredPhpExtension($extension)
+    protected function checkPhpExtension(string $extension, bool $required = true, string $purpose = '')
     {
         if (!extension_loaded($extension)) {
             $this->messageQueue->enqueue(new FlashMessage(
-                'TYPO3 CMS uses PHP extension ' . $extension . ' but it is not loaded'
-                    . ' in your environment. Change your environment to provide this extension.',
-                'PHP extension ' . $extension . ' not loaded',
-                FlashMessage::ERROR
+                'TYPO3 uses the PHP extension "' . $extension . '" but it is not loaded'
+                    . ' in your environment. Change your environment to provide this extension. '
+                    . $purpose,
+                'PHP extension "' . $extension . '" not loaded',
+                $required ? FlashMessage::ERROR : FlashMessage::WARNING
             ));
         } else {
             $this->messageQueue->enqueue(new FlashMessage(
                 '',
-                'PHP extension ' . $extension . ' loaded'
+                'PHP extension "' . $extension . '" loaded'
             ));
         }
     }
-- 
GitLab