From add0708f631532b284b11d5507c5efefce36b7c1 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Wed, 18 Apr 2012 22:07:07 +0200 Subject: [PATCH] setup check --- data/config.default.php | 15 +++++----- src/phorkie/SetupCheck.php | 58 ++++++++++++++++++++++++++++++++++++++ www/www-header.php | 12 ++++++-- 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 src/phorkie/SetupCheck.php 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 @@ 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 @@ + '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 '

Exception

'; + echo '

' . $e->getMessage() . '

'; + 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']); -- 2.30.2