Enable ImageMagick during the setup if it is available
authorAlexander Ebert <ebert@woltlab.com>
Wed, 19 Dec 2018 13:03:01 +0000 (14:03 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 19 Dec 2018 13:03:01 +0000 (14:03 +0100)
See #2684

wcfsetup/install/files/lib/system/WCFSetup.class.php
wcfsetup/install/files/lib/system/image/adapter/ImagickImageAdapter.class.php
wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php
wcfsetup/setup/lang/setup_de.xml
wcfsetup/setup/lang/setup_en.xml
wcfsetup/setup/template/stepShowSystemRequirements.tpl

index 49da645fb1e6bb45349e4c607fb56d0ae8c6ed29..9435ee8ca4f58c35cdf9b00c1f2c62b7e81be559 100644 (file)
@@ -13,6 +13,7 @@ use wcf\system\database\MySQLDatabase;
 use wcf\system\devtools\DevtoolsSetup;
 use wcf\system\exception\SystemException;
 use wcf\system\exception\UserInputException;
+use wcf\system\image\adapter\ImagickImageAdapter;
 use wcf\system\io\File;
 use wcf\system\io\Tar;
 use wcf\system\language\LanguageFactory;
@@ -370,6 +371,16 @@ class WCFSetup extends WCF {
                }
                $system['gdLib']['result'] = (version_compare($system['gdLib']['value'], '2.0.0') >= 0);
                
+               // ImageMagick
+               $system['imagick'] = ['result' => false];
+               if (ImagickImageAdapter::isSupported()) {
+                       $system['imagick'] = [
+                               'result' => true,
+                               'value' => ImagickImageAdapter::getVersion(),
+                       ];
+                       $system['imagick']['supportsAnimatedGIFs'] = ImagickImageAdapter::supportsAnimatedGIFs($system['imagick']['value']);
+               }
+               
                // memory limit
                $system['memoryLimit']['value'] = ini_get('memory_limit');
                $system['memoryLimit']['result'] = $this->compareMemoryLimit();
@@ -1271,6 +1282,7 @@ class WCFSetup extends WCF {
                SessionHandler::getInstance()->register('masterPassword', 1);
                SessionHandler::getInstance()->register('__wcfSetup_developerMode', self::$developerMode);
                SessionHandler::getInstance()->register('__wcfSetup_directories', self::$directories);
+               SessionHandler::getInstance()->register('__wcfSetup_imagick', ImagickImageAdapter::isSupported());
                SessionHandler::getInstance()->unregister('__changeSessionID');
                SessionHandler::getInstance()->update();
                
index 22dca0c8773e792de8fe6621a661aa7c35e56a2e..f424843927a74cb2d5d4d8a6de401e4b2bca4000 100644 (file)
@@ -15,13 +15,13 @@ class ImagickImageAdapter implements IImageAdapter {
         * active color
         * @var \ImagickPixel
         */
-       protected $color = null;
+       protected $color;
        
        /**
         * Imagick object
         * @var \Imagick
         */
-       protected $imagick = null;
+       protected $imagick;
        
        /**
         * image height
@@ -48,10 +48,7 @@ class ImagickImageAdapter implements IImageAdapter {
        public function __construct() {
                $this->imagick = new \Imagick();
                
-               // check if writing animated gifs is supported
-               $version = $this->imagick->getVersion();
-               preg_match('~([0-9]+\.[0-9]+\.[0-9]+)~', $version['versionString'], $match);
-               if (version_compare($match[0], '6.3.6') < 0) {
+               if (!static::supportsAnimatedGIFs(static::getVersion())) {
                        $this->supportsWritingAnimatedGIF = false;
                }
        }
@@ -425,4 +422,21 @@ class ImagickImageAdapter implements IImageAdapter {
        public static function isSupported() {
                return class_exists('\Imagick', false);
        }
+       
+       /**
+        * @return string
+        */
+       public static function getVersion() {
+               preg_match('~(?P<version>[0-9]+\.[0-9]+\.[0-9]+)~', \Imagick::getVersion()['versionString'], $match);
+               
+               return $match['version'];
+       }
+       
+       /**
+        * @param string $version
+        * @return bool
+        */
+       public static function supportsAnimatedGIFs($version) {
+               return version_compare($version, '6.3.6') >= 0;
+       }
 }
index 007a3ff1f10342d7850e6626a992247647aa386f..1e94748c3e575afbd15526009aabee6e9b5c8697 100644 (file)
@@ -284,6 +284,13 @@ class PackageInstallationDispatcher {
                                                }
                                        }
                                        
+                                       if (WCF::getSession()->getVar('__wcfSetup_imagick')) {
+                                               $statement->execute([
+                                                       'imagick',
+                                                       'image_adapter_type',
+                                               ]);
+                                       }
+                                       
                                        // update options.inc.php
                                        OptionEditor::resetCache();
                                }
index a4c1fa8052a290cf042ea7261b37babb8c556197..26011e774183fcb772d687312969d48bbf995653 100644 (file)
@@ -30,6 +30,8 @@
                <item name="wcf.global.systemRequirements.uploadMaxFilesize.description"><![CDATA[Die derzeitige Konfiguration der Skriptsprache „PHP“ macht das Hochladen von Dateien unmöglich. Einige Funktionalitäten werden durch diese Konfiguration nur eingeschränkt funktionieren.]]></item>
                <item name="wcf.global.systemRequirements.gdLib"><![CDATA[Installierte Version der Grafikbearbeitungs-Bibliothek „gdlib“]]></item>
                <item name="wcf.global.systemRequirements.gdLib.description"><![CDATA[Grafikbearbeitungs-Bibliothek „gdlib“ ist für die Verarbeitung und dynamische Generierung von Bildern zuständig.]]></item>
+               <item name="wcf.global.systemRequirements.imagick"><![CDATA[Installierte Version der Grafikbearbeitungs-Bibliothek „ImageMagick“]]></item>
+               <item name="wcf.global.systemRequirements.imagick.description"><![CDATA[Grafikbearbeitungs-Bibliothek „ImageMagick“ ist für die Verarbeitung und dynamische Generierung von Bildern zuständig. Unterstützt zusätzlich die Skalierung von animierten GIF-Dateien.]]></item>
                <item name="wcf.global.systemRequirements.gdLib.notFound"><![CDATA[nicht gefunden]]></item>
                <item name="wcf.global.systemRequirements.active"><![CDATA[aktiviert]]></item>
                <item name="wcf.global.systemRequirements.notActive"><![CDATA[nicht aktiviert]]></item>
index 7756c83e30c6516fe5e84407e0c804ddb19537a6..3dbe8935959e0c0bf716a0c33e9fc8b51f98bd6f 100644 (file)
@@ -31,6 +31,8 @@
                <item name="wcf.global.systemRequirements.gdLib"><![CDATA[Installed version of the graphics library “GDLib”]]></item>
                <item name="wcf.global.systemRequirements.gdLib.description"><![CDATA[The graphics-library “GDLib” is needed to read images and for the dynamic image generation.]]></item>
                <item name="wcf.global.systemRequirements.gdLib.notFound"><![CDATA[not found]]></item>
+               <item name="wcf.global.systemRequirements.imagick"><![CDATA[Installed version of the graphics library “ImageMagick”]]></item>
+               <item name="wcf.global.systemRequirements.imagick.description"><![CDATA[The graphics-library “ImageMagick” is used to read images and for the dynamic image generation. Supports for scaling of animated GIF files.]]></item>
                <item name="wcf.global.systemRequirements.active"><![CDATA[Enabled]]></item>
                <item name="wcf.global.systemRequirements.notActive"><![CDATA[Not enabled]]></item>
                <item name="wcf.global.systemRequirements.memoryLimit"><![CDATA[PHP memory limit]]></item>
index a500ec29d68e3f2d4795eff3abcd57192ce3789e..05609e746edcde873bf1a6d86ad96419a5bba4e0 100644 (file)
                                </dl>
                        </div>
                </section>
+               
+               <section class="section">
+                       <h2 class="sectionTitle">{lang}wcf.global.systemRequirements.imagick{/lang}</h2>
+                       
+                       <div class="row rowColGap formGrid">
+                               <dl class="col-xs-12 col-md-6">
+                                       <dt>{lang}wcf.global.systemRequirements.element.recommended{/lang}</dt>
+                                       <dd>{lang}wcf.global.systemRequirements.active{/lang}</dd>
+                               </dl>
+                               
+                               <dl class="col-xs-12 col-md-6">
+                                       <dt>{lang}wcf.global.systemRequirements.element.yours{/lang}</dt>
+                                       <dd>
+                                               <span class="badge {if !$system.imagick.result}red{elseif !$system.imagick.supportsAnimatedGIFs}yellow{else}green{/if}">{$system.imagick.value}</span>
+                                               {if !$system.imagick.result}<small>{lang}wcf.global.systemRequirements.imagick.description{/lang}</small>{/if}
+                                       </dd>
+                               </dl>
+                       </div>
+               </section>
        </section>
 
        <div class="formSubmit">
-               <input type="submit" value="{lang}wcf.global.button.next{/lang}"{if !$system.phpVersion.result || !$system.sql.result || !$system.memoryLimit.result || !$system.gdLib.result} disabled{/if} accesskey="s">
+               <input type="submit" value="{lang}wcf.global.button.next{/lang}"{if !$system.phpVersion.result || !$system.sql.result || !$system.memoryLimit.result || (!$system.gdLib.result && !$system.imagick.result)} disabled{/if} accesskey="s">
                <input type="hidden" name="step" value="{@$nextStep}">
                <input type="hidden" name="tmpFilePrefix" value="{@$tmpFilePrefix}">
                <input type="hidden" name="languageCode" value="{@$languageCode}">