aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-04-18 22:07:07 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-04-18 22:07:07 +0200
commitadd0708f631532b284b11d5507c5efefce36b7c1 (patch)
treefc4ed5e9a5a2b8cdcacfe5c6520368f8d5c38387
parent3937fc938f4e5c1d61348029bc54bbb06d00fd09 (diff)
downloadphorkie-add0708f631532b284b11d5507c5efefce36b7c1.tar.gz
phorkie-add0708f631532b284b11d5507c5efefce36b7c1.zip
setup check
-rw-r--r--data/config.default.php15
-rw-r--r--src/phorkie/SetupCheck.php58
-rw-r--r--www/www-header.php12
3 files changed, 76 insertions, 9 deletions
diff --git a/data/config.default.php b/data/config.default.php
index 09cd58f..4ef5d05 100644
--- a/data/config.default.php
+++ b/data/config.default.php
@@ -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
index 0000000..959ff42
--- /dev/null
+++ b/src/phorkie/SetupCheck.php
@@ -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);
+ }
+}
+
+?>
diff --git a/www/www-header.php b/www/www-header.php
index 0fd3c79..f381872 100644
--- a/www/www-header.php
+++ b/www/www-header.php
@@ -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']);