[TASK] Install Tool: Display a warning if PHP fileinfo extension is not loaded 33/54833/3
authorJonathan IROULIN <joniroutypo3@gmail.com>
Tue, 28 Nov 2017 10:18:25 +0000 (11:18 +0100)
committerMarkus Klein <markus.klein@typo3.org>
Tue, 28 Nov 2017 15:02:51 +0000 (16:02 +0100)
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/54833
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/install/Classes/SystemEnvironment/Check.php

index 2a4cb7e..daed2a1 100644 (file)
@@ -65,6 +65,13 @@ class Check implements CheckInterface
     ];
 
     /**
+     * @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
      *
      * @return array<\TYPO3\CMS\Install\Status\StatusInterface>
@@ -90,7 +97,11 @@ class Check implements CheckInterface
         $status[] = $this->checkWindowsApacheThreadStackSize();
 
         foreach ($this->requiredPhpExtensions as $extension) {
-            $status[] = $this->checkRequiredPhpExtension($extension);
+            $status[] = $this->checkPhpExtension($extension);
+        }
+
+        foreach ($this->suggestedPhpExtensions as $extension => $purpose) {
+            $status[] = $this->checkPhpExtension($extension, false, $purpose);
         }
 
         $status[] = $this->checkPcreVersion();
@@ -649,23 +660,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
      * @return Status\StatusInterface
      */
-    protected function checkRequiredPhpExtension($extension)
+    protected function checkPhpExtension(string $extension, bool $required = true, string $purpose = '')
     {
         if (!extension_loaded($extension)) {
-            $status = new Status\ErrorStatus();
+            $status = $required ? new Status\ErrorStatus() : new Status\WarningStatus();
             $status->setTitle('PHP extension ' . $extension . ' not loaded');
             $status->setMessage(
-                'TYPO3 CMS uses PHP extension ' . $extension . ' but it is not loaded' .
-                ' in your environment. Change your environment to provide this extension.'
+                'TYPO3 uses the PHP extension "' . $extension . '" but it is not loaded'
+                . ' in your environment. Change your environment to provide this extension. '
+                . $purpose
             );
         } else {
             $status = new Status\OkStatus();
-            $status->setTitle('PHP extension ' . $extension . ' loaded');
+            $status->setTitle('PHP extension "' . $extension . '" loaded');
         }
         return $status;
     }