From fe095d009d990337e27358eee7f2bcdb96a9266c Mon Sep 17 00:00:00 2001
From: Andrew McMillan
Date: Sat, 1 Jan 2011 21:23:25 +1300
Subject: [PATCH] Refactored to provide clearer display of issues.
---
htdocs/setup.php | 239 ++++++++++++++++++++++++++++-------------------
1 file changed, 144 insertions(+), 95 deletions(-)
diff --git a/htdocs/setup.php b/htdocs/setup.php
index 708f5584..bd776f01 100644
--- a/htdocs/setup.php
+++ b/htdocs/setup.php
@@ -1,85 +1,108 @@
ok = (boolean) $success;
+ $this->description = (isset($description)?$description : ($success===true? i18n('Passed') : i18n('Fail')));
+ $this->use_class = (isset($use_class)?$use_class:($success===true?'dep_ok' : 'dep_fail'));
+ }
+
+ public function getClass() {
+ return $this->use_class;
+ }
+
+ public function setClass( $new_class ) {
+ $this->use_class = $new_class;
+ }
+
+ public function getOK() {
+ return $this->ok;
+ }
+
+ public function getDescription() {
+ return translate($this->description);
+ }
+
+ public function setDescription( $new_desc ) {
+ $this->description = $new_desc;
+ }
+
+}
+
/**
* We put many of these checks before we even try to load always.php so that we
* can try and do some diagnostic work to ensure it will load OK.
*/
function check_pgsql() {
- return function_exists('pg_connect');
+ return new CheckResult(function_exists('pg_connect'));
}
function check_pdo() {
- return class_exists('PDO');
+ return new CheckResult(class_exists('PDO'));
}
function check_pdo_pgsql() {
global $loaded_extensions;
- if ( !check_pdo() ) return false;
- return isset($loaded_extensions['pdo_pgsql']);
+ if ( !check_pdo() ) return new CheckResult(false);
+ return new CheckResult(isset($loaded_extensions['pdo_pgsql']));
}
function check_gettext() {
global $phpinfo, $loaded_extensions;
- if ( !function_exists('gettext') ) return false;
- return isset($loaded_extensions['gettext']);
+ if ( !function_exists('gettext') ) return new CheckResult(false);
+ return new CheckResult(isset($loaded_extensions['gettext']));
}
function check_suhosin_server_strip() {
global $loaded_extensions;
- if ( !isset($loaded_extensions['suhosin']) ) return true;
- if ( ini_get('suhosin.server.strip') == "0" ) {
- return true;
- }
-
- return false;
+ if ( !isset($loaded_extensions['suhosin']) ) return new CheckResult(true);
+ return new CheckResult( ini_get('suhosin.server.strip') == "0" );
}
function check_magic_quotes_gpc() {
- global $loaded_extensions;
-
- if ( ini_get('magic_quotes_gpc') == "0" ) {
- return true;
- }
-
- return false;
+ return new CheckResult( (get_magic_quotes_gpc() == 0) );
}
function check_magic_quotes_runtime() {
- global $loaded_extensions;
-
- if ( ini_get('magic_quotes_runtime') == "0" ) {
- return true;
- }
-
- return false;
+ return new CheckResult( (get_magic_quotes_runtime() == 0) );
}
function do_error( $errormessage ) {
- printf("%s
", $errormessage );
+ printf("%s
", translate($errormessage) );
}
-$loaded_extensions = array_flip(get_loaded_extensions());
-if ( !check_pgsql() ) do_error("PHP 'pgsql' functions are not available" );
-if ( !check_pdo() ) do_error("PHP 'PDO' module is not available" );
-if ( !check_pdo_pgsql() ) do_error("The PDO drivers for PostgreSQL are not available" );
+$loaded_extensions = array_flip(get_loaded_extensions());
+if ( !check_pgsql()->getOK() ) do_error(i18n("PHP 'pgsql' functions are not available") );
+if ( !check_pdo()->getOK() ) do_error(i18n("PHP 'PDO' module is not available") );
+if ( !check_pdo_pgsql()->getOK() ) do_error(i18n("The PDO drivers for PostgreSQL are not available") );
+
+function get_phpinfo() {
+ ob_start( );
+ phpinfo();
+ $phpinfo = ob_get_contents( );
+ ob_end_clean( );
+
+ $phpinfo = preg_replace( '{^.*?}s', '', $phpinfo);
+ $phpinfo = preg_replace( '{.*?$}s', '', $phpinfo);
+ return $phpinfo;
+}
+$phpinfo = get_phpinfo();
include("./always.php");
include("DAViCalSession.php");
-ob_start( );
-phpinfo();
-$phpinfo = ob_get_contents( );
-ob_end_clean( );
-$phpinfo = preg_replace( '{^.*?}s', '', $phpinfo);
-$phpinfo = preg_replace( '{.*?$}s', '', $phpinfo);
-
-
-if ( check_pgsql() ) {
+if ( check_pgsql()->GetOK() ) {
$session->LoginRequired( (isset($c->restrict_setup_to_admin) && $c->restrict_setup_to_admin ? 'Admin' : null ) );
}
@@ -94,29 +117,51 @@ function check_schema_version() {
if ( $c->want_dbversion[0] == $c->schema_major
&& $c->want_dbversion[1] == $c->schema_minor
&& $c->want_dbversion[2] == $c->schema_patch ) {
- return true;
+ return new CheckResult( true );
}
- return false;
+ $result = new CheckResult(false);
+ if ( $c->want_dbversion[0] < $c->schema_major
+ || ($c->want_dbversion[0] == $c->schema_major && $c->want_dbversion[1] < $c->schema_minor)
+ || ($c->want_dbversion[0] == $c->schema_major
+ && $c->want_dbversion[1] == $c->schema_minor
+ && $c->want_dbversion[2] < $c->schema_patch)
+ )
+ {
+ $result->setClass('dep_warning');
+ }
+ $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), implode('.',$c->want_dbversion),
+ $c->schema_major.'.'.$c->schema_minor.'.'.$c->schema_patch));
+ return $result;
}
function check_davical_version() {
global $c;
$url = 'http://www.davical.org/current_davical_version?v='.$c->version_string;
$version_file = @fopen($url, 'r');
- if ( ! $version_file ) return translate("Could not retrieve") . " '$url'";
+ if ( ! $version_file ) return new CheckResult( false, translate("Could not retrieve") . " '$url'", 'dep_warning' );
$current_version = trim(fread( $version_file,12));
fclose($version_file);
- return ( $c->version_string == $current_version ? true : $current_version );
+ $result = new CheckResult($c->version_string == $current_version);
+ if ( ! $result->getOK() ) {
+ $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), $current_version, $c->version_string) );
+ if ( $c->version_string > $current_version ) $result->setClass('dep_warning');
+ }
+ return $result;
}
function check_awl_version() {
global $c;
- if ( function_exists('awl_version') ) {
- return ( $c->want_awl_version == awl_version() ? true : sprintf( "want %f", $c->awl_library_version) );
+ if ( !function_exists('awl_version') ) return new CheckResult(false);
+
+ $result = new CheckResult($c->want_awl_version == awl_version());
+ if ( ! $result->getOK() ) {
+ $result->setDescription( sprintf(i18n('Want: %s, Currently: %s'), $c->want_awl_version, awl_version()) );
+ if ( $c->want_awl_version < awl_version() ) $result->setClass('dep_warning');
}
- return false;
+ return $result;
+
}
@@ -148,36 +193,43 @@ EOTABLE;
}
-$dependencies = array(
- translate('Current DAViCal version '). $c->version_string => 'check_davical_version',
- translate('DAViCal DB Schema version '). implode('.',$c->want_dbversion) => 'check_schema_version',
- translate('AWL Library version '). $c->want_awl_version => 'check_awl_version',
- translate('PHP PDO module available') => 'check_pdo',
- translate('PDO PostgreSQL drivers') => 'check_pdo_pgsql',
- translate('PHP PostgreSQL available') => 'check_pgsql',
- translate('GNU gettext support') => 'check_gettext',
- translate('Suhosin "server.strip" disabled') => 'check_suhosin_server_strip',
- translate('PHP Magic Quotes GPC off') => 'check_magic_quotes_gpc',
- translate('PHP Magic Quotes runtime off') => 'check_magic_quotes_runtime' /*,
- 'YAML' => 'php5-syck' */
-);
-
-$dependencies_table = '';
-$dep_tpl = '
+function build_dependencies_table( ) {
+ $dependencies = array(
+ translate('Current DAViCal version ') => 'check_davical_version',
+ translate('DAViCal DB Schema version ') => 'check_schema_version',
+ translate('AWL Library version ') => 'check_awl_version',
+ translate('PHP PDO module available') => 'check_pdo',
+ translate('PDO PostgreSQL drivers') => 'check_pdo_pgsql',
+ translate('PHP PostgreSQL available') => 'check_pgsql',
+ translate('GNU gettext support') => 'check_gettext',
+ translate('Suhosin "server.strip" disabled') => 'check_suhosin_server_strip',
+ translate('PHP Magic Quotes GPC off') => 'check_magic_quotes_gpc',
+ translate('PHP Magic Quotes runtime off') => 'check_magic_quotes_runtime'
+ );
+
+ $dependencies_table = '';
+ $dep_tpl = '
| %s |
%s |
';
-foreach( $dependencies AS $k => $v ) {
- $ok = $v();
- $dependencies_table .= sprintf( $dep_tpl, ($ok === true ? 'dep_ok' : 'dep_fail'), $k, (is_string($ok) ? $ok : ($ok ? translate('OK') : translate('Failed'))) );
+ foreach( $dependencies AS $k => $v ) {
+ $check_result = $v();
+ $dependencies_table .= sprintf( $dep_tpl, $check_result->getClass(),
+ $k,
+ $check_result->getDescription()
+ );
+ }
+
+ return $dependencies_table;
}
-$want_dbversion = implode('.',$c->want_dbversion);
$heading_setup = translate('Setup');
$paragraph_setup = translate('This page primarily checks the environment needed for DAViCal to work correctly. Suggestions or patches to make it do more useful stuff will be gratefully received.');
+/*
+$want_dbversion = implode('.',$c->want_dbversion);
$heading_versions = translate('Current Versions');
if ( check_schema_version() != true )
{
@@ -187,24 +239,23 @@ if ( check_schema_version() != true )
$paragraph_versions = translate('You are currently running DAViCal version %s. The database schema is at version %d.%d.%d.');
$paragraph_versions = sprintf( $paragraph_versions, $c->version_string, $c->schema_major, $c->schema_minor, $c->schema_patch);
}
+*/
$heading_dependencies = translate('Dependencies');
$th_dependency = translate('Dependency');
$th_status = translate('Status');
+$dependencies_table = build_dependencies_table();
$heading_site_statistics = translate('Site Statistics');
$site_statistics_table = build_site_statistics();
$heading_config_clients = translate('Configuring Calendar Clients for DAViCal');
$heading_config_davical = translate('Configuring DAViCal');
-$davical_configuration_errors = '';
-if ( $config_warnings != '' ) {
- $davical_configuration_errors = '' . translate('Your configuration produced PHP errors which should be corrected') . '
-
-'.$config_warnings.'
-
-';
-}
+$davical_configuration_errors = ( $config_warnings == '' ? '' : ''
+ . translate('Your configuration produced PHP errors which should be corrected') . '
'
+ . $config_warnings.'
'
+ );
+
echo <<
@@ -212,7 +263,10 @@ tr.dep_ok {
background-color:#80ff80;
}
tr.dep_fail {
- background-color:#ffc0c0;
+ background-color:#ff8080;
+}
+tr.dep_warning {
+ background-color:#ffb040;
}
table, table.dependencies {
border: 1px grey solid;
@@ -232,11 +286,6 @@ p {
$heading_setup
$paragraph_setup
-
$heading_versions
-$paragraph_versions
-
-
-
$heading_dependencies
@@ -246,9 +295,22 @@ p {
$dependencies_table
-
+$heading_config_davical
+If you can read this then things must be mostly working already.
+$davical_configuration_errors
+The installation page on the DAViCal website has
+some further information on how to install and configure this application.
+$heading_config_clients
+The client setup page on the DAViCal website has information on how
+to configure Evolution, Sunbird, Lightning and Mulberry to use remotely hosted calendars.
+The administrative interface has no facility for viewing or modifying calendar data.
+
+$heading_site_statistics
+$site_statistics_table
+
+PHP Information
$phpinfo
-$heading_site_statistics
-$site_statistics_table
-
-$heading_config_clients
-The client setup page on the DAViCal website has information on how
-to configure Evolution, Sunbird, Lightning and Mulberry to use remotely hosted calendars.
-The administrative interface has no facility for viewing or modifying calendar data.
-
-$heading_config_davical
-If you can read this then things must be mostly working already.
-$davical_configuration_errors
-The installation page on the DAViCal website has
-some further information on how to install and configure this application.
EOBODY;
include("page-footer.php");