1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/agendav_ynh.git synced 2024-09-03 20:36:12 +02:00
agendav_ynh/sources/web/public/configtest.php
2014-01-07 17:53:08 +01:00

229 lines
5.9 KiB
PHP

<?php
/*
* Copyright 2012 Jorge López Pérez <jorge@adobo.org>
*
* This file is part of AgenDAV.
*
* AgenDAV is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* AgenDAV is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AgenDAV. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Set this to TRUE to enable config test (disabled by default)
* Remember to disable it again when finished
*/
define('ENABLE_SETUP_TESTS', FALSE);
/*
* Checks:
*
* - PHP >= 5.3.0
* - magic_quotes_gpc and magic_quotes_runtime disabled
* - php-mbstring available
* - php-curl available
* - Correctly configured config.php, database.php and caldav.php
* - PHP database module (mysql, mysqli or postgresql)
* - Existing log directory and writable by current user
*/
if (ENABLE_SETUP_TESTS === FALSE) {
echo "Access to setup tests is disabled";
exit;
}
// Abort tests on error (e.g. syntax errors)
set_error_handler('error_abort_tests');
$tests = array();
$keep_checking = TRUE;
// PHP version
$cmp = version_compare(phpversion(), '5.3.0');
$tests[] = array('PHP version', phpversion(),
($cmp >= 0) ? 'OK' : 'PHP 5.3.0 or later required');
// magic_quotes_gpc
$res_magic_quotes_gpc = (get_magic_quotes_gpc() == 0);
$tests[] = array('magic_quotes_gpc', $res_magic_quotes_gpc ? 'Disabled' :
'Enabled', $res_magic_quotes_gpc ? 'OK' :
'Disable it inside <tt>php.ini</tt>');
// magic_quotes_runtime
$res_magic_quotes_runtime = (get_magic_quotes_runtime() == 0);
$tests[] = array('magic_quotes_runtime',
$res_magic_quotes_runtime ? 'Disabled' : 'Enabled',
$res_magic_quotes_runtime ? 'OK' :
'Disable it inside <tt>php.ini</tt>');
// PHP cURL
if (extension_loaded('curl')) {
$tests[] = array('cURL extension', 'Available', 'OK');
} else {
$tests[] = array('cURL extension', 'Not installed',
'cURL extension is needed by AgenDAV');
}
// PHP mbstring
if (extension_loaded('mbstring')) {
$tests[] = array('mbstring extension', 'Available', 'OK');
} else {
$tests[] = array('mbstring extension', 'Not installed',
'mbstring extension is needed by AgenDAV');
}
// Configuration files: config.php, database.php and caldav.php
$cwd = dirname(__FILE__);
$configdir = preg_replace('/public$/', 'application/config', $cwd);
$test_subj = 'File <tt>config.php</tt>';
if (!file_exists($configdir . '/config.php')) {
$tests[] = array($test_subj,
'Not present or readable',
'Create it using template <tt>config.php.template</tt>');
$keep_checking = FALSE;
} else {
$tests[] = array($test_subj, 'Exists', 'OK');
}
$test_subj = 'File <tt>database.php</tt>';
if ($keep_checking && !file_exists($configdir . '/database.php')) {
$tests[] = array($test_subj,
'Not present or readable',
'Create it using template <tt>database.php.template</tt>');
$keep_checking = FALSE;
} elseif ($keep_checking) {
$tests[] = array($test_subj, 'Exists', 'OK');
}
$test_subj = 'File <tt>caldav.php</tt>';
if ($keep_checking && !file_exists($configdir . '/caldav.php')) {
$tests[] = array($test_subj,
'Not present or readable',
'Create it using template <tt>caldav.php.template</tt>');
$keep_checking = FALSE;
} elseif ($keep_checking) {
$tests[] = array($test_subj, 'Exists', 'OK');
}
// Fool CodeIgniter and load configuration files
define('BASEPATH', '/tmp');
include($configdir .'/config.php');
include($configdir .'/database.php');
if ($keep_checking) {
// Database
switch ($db['default']['dbdriver']) {
case 'mysql':
$check_sql_ext = 'mysql';
break;
case 'mysqli':
$check_sql_ext = 'mysqli';
break;
case 'postgre':
$check_sql_ext = 'pgsql';
break;
default:
$tests[] = array('SQL driver', 'Unsupported ' .
$db['default']['dbdriver'],
'AgenDAV requires a MySQL or PostgreSQL database');
$keep_checking = FALSE;
}
if ($keep_checking) {
if (!extension_loaded($check_sql_ext)) {
$tests[] = array('PHP supported database', 'Not available',
'Configured DB driver inside database.php (<tt>'
. $db['default']['dbdriver'] . '</tt>) is not'
. ' available to PHP');
} else {
$tests[] = array('PHP supported database',
'Yes (<tt>'.$check_sql_ext.'</tt>)', 'OK');
}
}
// Log directory
$test_subj = 'Log directory';
if (!is_writable($config['log_path'])) {
$tests[] = array($test_subj,
'Does not exist or is not writable by web server',
'Check directory <tt>'.$config['log_path'].'</tt>');
} else {
$tests[] = array($test_subj,
'All right', 'OK');
}
// ---- Tests end -----
} // $keep_checking
?>
<!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="es" lang="es">
<head>
<title>AgenDAV configuration test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Configuration test</h1>
<table>
<thead>
<tr>
<th>Test</th>
<th>Result</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<?php
foreach ($tests as $test) {
?>
<tr>
<td><?php echo $test[0]?></td>
<td style="color: #ffffff; background-color: <?php
echo $test[2] == 'OK' ?
'#00bb00' : '#bb0000' ?>"><?php echo $test[1]?></td>
<td><?php echo $test[2] ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
<?php
// Abort tests on error
function error_abort_tests($errno, $errstr, $errfile, $errline) {
echo "<p>There is an error on " . $errfile . " @ line " . $errline;
echo ':</p>';
echo '<pre>' . $errstr . '</pre>';
exit;
}
?>