]> source.dussan.org Git - nextcloud-server.git/commitdiff
Deduplicate dependency checks
authorLukas Reschke <lukas@owncloud.com>
Mon, 15 Sep 2014 11:46:43 +0000 (13:46 +0200)
committerLukas Reschke <lukas@owncloud.com>
Tue, 16 Sep 2014 11:07:47 +0000 (13:07 +0200)
Some code that I also used for https://github.com/owncloud/administration/pull/11

lib/private/util.php

index 79f3eb7b48c50c62f725f48bbe88165e10b3543b..c5483c1654bfa9e3a65f23701f6298fa6e4d42e1 100755 (executable)
@@ -493,78 +493,57 @@ class OC_Util {
                        );
                }
 
+               // Contains the dependencies that should be checked against
+               // classes = class_exists
+               // functions = function_exists
+               // defined = defined
+               // If the dependency is not found the missing module name is shown to the EndUser
+               $dependencies = array(
+                       'classes' => array(
+                               'ZipArchive' => 'zip',
+                               'DOMDocument' => 'dom',
+                       ),
+                       'functions' => array(
+                               'xml_parser_create' => 'libxml',
+                               'mb_detect_encoding' => 'mb multibyte',
+                               'ctype_digit' => 'ctype',
+                               'json_encode' => 'JSON',
+                               'gd_info' => 'GD',
+                               'gzencode' => 'zlib',
+                               'iconv' => 'iconv',
+                               'simplexml_load_string' => 'SimpleXML'
+                       ),
+                       'defined' => array(
+                               'PDO::ATTR_DRIVER_NAME' => 'PDO'
+                       )
+               );
+               $missingDependencies = array();
                $moduleHint = $l->t('Please ask your server administrator to install the module.');
-               // check if all required php modules are present
-               if (!class_exists('ZipArchive')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('zip')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!class_exists('DOMDocument')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('dom')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!function_exists('xml_parser_create')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('libxml')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!function_exists('mb_detect_encoding')) {
-                       $errors[] = array(
-                               'error' => 'PHP module mb multibyte not installed.',
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!function_exists('ctype_digit')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('ctype')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!function_exists('json_encode')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('JSON')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
-               if (!extension_loaded('gd') || !function_exists('gd_info')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('GD')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
+
+               foreach ($dependencies['classes'] as $class => $module) {
+                       if (!class_exists($class)) {
+                               $missingDependencies[] = $module;
+                       }
                }
-               if (!function_exists('gzencode')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('zlib')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
+               foreach ($dependencies['functions'] as $function => $module) {
+                       if (!function_exists($function)) {
+                               $missingDependencies[] = $module;
+                       }
                }
-               if (!function_exists('iconv')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('iconv')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
+               foreach ($dependencies['defined'] as $defined => $module) {
+                       if (!defined($defined)) {
+                               $missingDependencies[] = $module;
+                       }
                }
-               if (!function_exists('simplexml_load_string')) {
+
+               foreach($missingDependencies as $missingDependency) {
                        $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('SimpleXML')),
+                               'error' => $l->t('PHP module %s not installed.', array($missingDependency)),
                                'hint' => $moduleHint
                        );
                        $webServerRestart = true;
                }
+
                if (version_compare(phpversion(), '5.3.3', '<')) {
                        $errors[] = array(
                                'error' => $l->t('PHP %s or higher is required.', '5.3.3'),
@@ -573,13 +552,6 @@ class OC_Util {
                        );
                        $webServerRestart = true;
                }
-               if (!defined('PDO::ATTR_DRIVER_NAME')) {
-                       $errors[] = array(
-                               'error' => $l->t('PHP module %s not installed.', array('PDO')),
-                               'hint' => $moduleHint
-                       );
-                       $webServerRestart = true;
-               }
                if (((strtolower(@ini_get('safe_mode')) == 'on')
                        || (strtolower(@ini_get('safe_mode')) == 'yes')
                        || (strtolower(@ini_get('safe_mode')) == 'true')