setup check
authorChristian Weiske <cweiske@cweiske.de>
Wed, 18 Apr 2012 20:07:07 +0000 (22:07 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 18 Apr 2012 20:07:07 +0000 (22:07 +0200)
data/config.default.php
src/phorkie/SetupCheck.php [new file with mode: 0644]
www/www-header.php

index 09cd58f..4ef5d05 100644 (file)
@@ -1,12 +1,13 @@
 <?php
 $GLOBALS['phorkie']['cfg'] = array(
-    'debug'   => false,
-    'gitdir'  => __DIR__ . '/../repos/git/',
-    'workdir' => __DIR__ . '/../repos/work/',
-    'tpl'     => __DIR__ . '/templates/',
-    'css'     => 'http://twitter.github.com/bootstrap/assets/css/bootstrap.css',
-    'title'   => 'phorkie',
-    'topbar'  => '',
+    'debug'      => false,
+    'gitdir'     => __DIR__ . '/../repos/git/',
+    'workdir'    => __DIR__ . '/../repos/work/',
+    'tpl'        => __DIR__ . '/templates/',
+    'css'        => 'http://twitter.github.com/bootstrap/assets/css/bootstrap.css',
+    'title'      => 'phorkie',
+    'topbar'     => '',
+    'setupcheck' => true,
 );
 $GLOBALS['phorkie']['tools'] = array(
     '\\phorkie\\Tool_Xmllint' => true,
diff --git a/src/phorkie/SetupCheck.php b/src/phorkie/SetupCheck.php
new file mode 100644 (file)
index 0000000..959ff42
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+namespace phorkie;
+
+class SetupCheck
+{
+    protected $deps = array(
+        'pear.php.net/VersionControl_Git' => 'VersionControl_Git',
+        'pear.twig-project.org/Twig'      => 'Twig_Autoloader',
+        'pear.php.net/Date_HumanDiff'     => 'Date_HumanDiff',
+    );
+
+    protected $writableDirs;
+
+
+    public function __construct()
+    {
+        $cfg = $GLOBALS['phorkie']['cfg'];
+        $this->writableDirs = array(
+            'gitdir' => $cfg['gitdir'],
+            'workdir' => $cfg['workdir'],
+        );
+    }
+
+    public static function run()
+    {
+        $sc = new self();
+        $sc->checkDeps();
+        $sc->checkDirs();
+    }
+
+    public function checkDeps()
+    {
+        foreach ($this->deps as $package => $class) {
+            if (!class_exists($class, true)) {
+                $this->fail('PEAR package not installed: ' . $package);
+            }
+        }
+    }
+
+    public function checkDirs()
+    {
+        foreach ($this->writableDirs as $name => $dir) {
+            if (!is_dir($dir)) {
+                $this->fail($name . ' directory does not exist at ' . $dir);
+            }
+            if (!is_writable($dir)) {
+                $this->fail($name . ' directory is not writable at ' . $dir);
+            }
+        }
+    }
+
+    public function fail($msg)
+    {
+        throw new Exception($msg);
+    }
+}
+
+?>
index 0fd3c79..f381872 100644 (file)
@@ -21,6 +21,13 @@ set_exception_handler(
         } else {
             header('HTTP/1.0 500 Internal server error');
         }
+
+        if (!isset($GLOBALS['twig'])) {
+            echo '<h1>Exception</h1>';
+            echo '<p>' . $e->getMessage() . '</p>';
+            exit();
+        }
+
         render(
             'exception',
             array(
@@ -36,8 +43,9 @@ require_once __DIR__ . '/../data/config.default.php';
 if (file_exists(__DIR__ . '/../data/config.php')) {
     require_once __DIR__ . '/../data/config.php';
 }
-require_once 'VersionControl/Git.php';
-require_once 'Twig/Autoloader.php';
+if ($GLOBALS['phorkie']['cfg']['setupcheck']) {
+    SetupCheck::run();
+}
 \Twig_Autoloader::register();
 
 $loader = new \Twig_Loader_Filesystem($GLOBALS['phorkie']['cfg']['tpl']);