rework setup check
[phorkie.git] / src / phorkie / SetupCheck.php
index 16631db673e2c75e5096b39cfb5fe204ad0062a7..c459e2af546d251c981fc9f0888dc525e9f53072 100644 (file)
@@ -11,13 +11,15 @@ class SetupCheck
         'pear.php.net/OpenID'              => 'OpenID',
         'pear.php.net/Pager'               => 'Pager',
         'pear.php.net/Services_Libravatar' => 'Services_Libravatar',
-        'pear2.php.net/Services_Linkback'  => '\\PEAR2\\Services\\Linkback\\Client',
+        'pear2.php.net/PEAR2_Services_Linkback'  => '\\PEAR2\\Services\\Linkback\\Client',
         'zustellzentrum.cweiske.de/MIME_Type_PlainDetect' => 'MIME_Type_PlainDetect',
     );
 
     protected $writableDirs;
     protected $elasticsearch;
 
+    public $messages = array();
+
     public function __construct()
     {
         $cfg = $GLOBALS['phorkie']['cfg'];
@@ -31,11 +33,25 @@ class SetupCheck
     public static function run()
     {
         $sc = new self();
+        $sc->checkConfigFiles();
         $sc->checkDeps();
         $sc->checkDirs();
         $sc->checkGit();
         $sc->checkDatabase();
         $sc->checkMimeTypeDetection();
+
+        return $sc->messages;
+    }
+
+    public function checkConfigFiles()
+    {
+        foreach ($GLOBALS['phorkie']['cfgfiles'] as $file => $loaded) {
+            if ($loaded) {
+                $this->ok('Loaded config file: ' . $file);
+            } else {
+                $this->info('Possible config file: ' . $file . ' (not loaded)');
+            }
+        }
     }
 
     public function checkDeps()
@@ -46,16 +62,21 @@ class SetupCheck
             }
         }
 
-        $geshi = stream_resolve_include_path(
-            $GLOBALS['phorkie']['cfg']['geshi']
-        );
-        if ($geshi === false) {
-            $this->fail('GeSHi not available');
+        if (!class_exists('geshi', true)) {
+            $geshi = stream_resolve_include_path(
+                $GLOBALS['phorkie']['cfg']['geshi']
+            );
+            if ($geshi === false) {
+                $this->fail('GeSHi not available');
+            }
         }
 
-        $markdown = stream_resolve_include_path('markdown.php');
-        if ($markdown === false) {
-            $this->fail('Markdown renderer not available');
+        if (!class_exists('\\Michelf\\Markdown', true)) {
+            //PEAR-installed version 1.0.2 has a different API
+            $markdown = stream_resolve_include_path('markdown.php');
+            if ($markdown === false) {
+                $this->fail('Markdown renderer not available');
+            }
         }
     }
 
@@ -64,8 +85,7 @@ class SetupCheck
         foreach ($this->writableDirs as $name => $dir) {
             if (!is_dir($dir)) {
                 $this->fail($name . ' directory does not exist at ' . $dir);
-            }
-            if (!is_writable($dir)) {
+            } else if (!is_writable($dir)) {
                 $this->fail($name . ' directory is not writable at ' . $dir);
             }
         }
@@ -115,7 +135,17 @@ class SetupCheck
 
     public function fail($msg)
     {
-        throw new Exception($msg);
+        $this->messages[] = array('error', $msg);
+    }
+
+    public function info($msg)
+    {
+        $this->messages[] = array('info', $msg);
+    }
+
+    public function ok($msg)
+    {
+        $this->messages[] = array('ok', $msg);
     }
 }