rework setup check
authorChristian Weiske <cweiske@cweiske.de>
Fri, 4 Jul 2014 05:42:52 +0000 (07:42 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 4 Jul 2014 05:42:52 +0000 (07:42 +0200)
src/phorkie/SetupCheck.php
www/setup.php

index 177a0f75d8c98ffd32b9b328de0807671a3ca134..c459e2af546d251c981fc9f0888dc525e9f53072 100644 (file)
@@ -18,6 +18,8 @@ class SetupCheck
     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()
@@ -69,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);
             }
         }
@@ -120,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);
     }
 }
 
index d62efe0d3918f945bafab037369de75394d8daf8..cd0deaaa51f49912961f6dc786fe940f0e5f27c4 100644 (file)
@@ -3,6 +3,8 @@
  * Check if all is setup correctly
  */
 namespace phorkie;
+header('HTTP/1.0 500 Internal Server Error');
+
 $reqWritePermissions = false;
 require_once 'www-header.php';
 
@@ -13,8 +15,98 @@ if (!$GLOBALS['phorkie']['cfg']['setupcheck']) {
     exit(1);
 }
 
-SetupCheck::run();
+$messages = SetupCheck::run();
+$errors = 0;
+foreach ($messages as $arMessage) {
+    list($type, $message) = $arMessage;
+    $type == 'error' && ++$errors;
+}
+if ($errors == 0) {
+    header('HTTP/1.0 200 OK');
+}
+header('Content-type: text/html');
+
+if ($errors == 0) {
+    $messages[] =  array('ok', 'All fine');
+}
+
+$out = <<<HTM
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+  <title>phorkie setup check</title>
+  <link rel="stylesheet" href="css/bootstrap.min.css"/>
+  <link rel="stylesheet" href="css/font-awesome.css"/>
+  <link rel="stylesheet" href="css/phorkie.css"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1"/>
+  <style type="text/css">
+    /**/
+    li:before {
+        text-align: center;
+        display: inline-block;
+        width: 1em;
+        padding: 0 0.5ex;
+        margin-right: 0.5ex;
+    }
+    li.list-group-item-success:before {
+        content: '✔';
+        color: green;
+    }
+    li.list-group-item-danger:before {
+        content: "✘";
+        color: white;
+        background-color: red;
+    }
+    li.list-group-item-info:before {
+        content: "i";
+        font-weight: bold;
+        color: blue;
+    }
+/**/
+  </style>
+ </head>
+ <body>
+  <div class="container">
+   <div class="row">
+    <div class="span12">
+
+     <div class="page-header">
+      <h1>phorkie setup check</h1>
+     </div>
+
+     <ul class="list-group">
+HTM;
+$stateMap = array(
+    'ok'    => 'success',
+    'info'  => 'info',
+    'error' => 'danger'
+);
+foreach ($messages as $arMessage) {
+    list($type, $message) = $arMessage;
+    $out .= '<li class="list-group-item list-group-item-'
+        . $stateMap[$type] . '">';
+    $out .= htmlspecialchars($message);
+    $out .= '</li>' . "\n";
+}
+$out .= <<<HTM
+     </ul>
+     <p>
+      <a href="./">back</a> to the index
+     </p>
+    </div>
+   </div>
+  </div>
+
+  <div class="container footer">
+   <a href="//sf.net/p/phorkie/">phorkie</a>,
+   the self-hosted, git-based pastebin software is available under the
+   <a href="http://www.gnu.org/licenses/agpl-3.0.html">
+    <abbr title="GNU Affero General Public License">AGPL</abbr></a>.
+  </div>
 
-header('Content-type: text/plain');
-echo "All fine\n";
+ </body>
+</html>
+HTM;
+echo $out;
 ?>