From: Janusz Dobrowolski Date: Thu, 5 Aug 2010 10:04:39 +0000 (+0000) Subject: Diagnostic tests movedto separate file to be reused in install wizard. X-Git-Tag: v2.4.2~19^2~737 X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=79ad571f44f329428c5af41b41d9a61aa90e4be1;p=fa-stable.git Diagnostic tests movedto separate file to be reused in install wizard. --- diff --git a/admin/system_diagnostics.php b/admin/system_diagnostics.php index 665b6f02..94dc8aa3 100644 --- a/admin/system_diagnostics.php +++ b/admin/system_diagnostics.php @@ -17,375 +17,11 @@ include($path_to_root . "/includes/session.inc"); page(_($help_context = "System Diagnostics")); include($path_to_root . "/includes/ui.inc"); - -// Type of requirement for positive test result -$test_level = array( - 0 => _('Info'), - 1 => _('Optional'), - 2 => _('Recomended'), - 3 => _('Required ') -); - -$system_tests = array('tst_mysql', 'tst_php', 'tst_server', 'tst_system', 'tst_browser', - 'tst_gettext', 'tst_debug', 'tst_logging', - 'tst_dbversion', 'tst_subdirs', 'tst_langs', 'tst_tmpdir', 'tst_sessionpath', - 'tst_dbconfig', 'tst_config', 'tst_extconfig' - ); - -function tst_mysql() -{ - $test['descr'] = _('MySQL version'). ' >=4.1'; - $test['type'] = 3; - $test['test'] = mysql_get_server_info(); - $test['result'] = $test['test']>='4.1'; - $test['comments'] = _('Upgrade MySQL server to version at least 4.1'); - - return $test; -} - -function tst_php() -{ - $test['descr'] = _('PHP version').' >=4.3.3'; - $test['type'] = 3; - $test['test'] = phpversion(); - $test['result'] = $test['test']>='4.3.3'; - $test['comments'] = _('Upgrade PHP to version at least 4.3.3'); - - return $test; -} - -function tst_system() -{ - $test['descr'] = _('Server system'); - $test['type'] = 0; - $test['test'] = PHP_OS; - $test['result'] = true; - - return $test; -} - -function tst_sessionpath() -{ - $test['descr'] = _('Session save path'); - $test['type'] = 0; - $test['test'] = session_save_path(); - $test['result'] = true; - - return $test; -} - -function tst_browser() -{ - $test['descr'] = _('Browser type'); - $test['type'] = 0; - $test['test'] = $_SERVER['HTTP_USER_AGENT']; - $test['result'] = true; - $test['comments'] = _('Any browser is supported'); - - return $test; -} - -function tst_server() -{ - $test['descr'] = _('Http server type'); - $test['test'] = $_SERVER['SERVER_SOFTWARE']; - $test['type'] = 0; - $test['result'] = true; - $test['comments'] = _('Any server is supported'); - - return $test; -} - -function tst_gettext() -{ - $test['descr'] = _('Native gettext'); - $test['test'] = function_exists('gettext') ? _('Yes'): _('No'); - $test['type'] = 1; - $test['result'] = true; - $test['comments'] = _('In case of no getext support, php emulation is used'); - - return $test; -} - -function tst_debug() -{ - global $go_debug; - $test['descr'] = _('Debugging mode'); - $test['type'] = 0; - $test['test'] = $go_debug ? _("Yes") : _("No"); - $test['result'] = $go_debug != 0; - $test['comments'] = _('To switch debugging on set $go_debug>0 in config.php file'); - - return $test; -} - -function tst_logging() -{ - global $error_logfile; - - $test['descr'] = _('Error logging'); - $test['type'] = 2; - // if error lgging is on, but log file does not exists try write - if ($error_logfile && !is_file($error_logfile)) - { - @fclose(@fopen($error_logfile, 'w')); - } - $test['result'] = @$error_logfile != '' && is_writable($error_logfile); - $test['test'] = @$error_logfile == '' ? _("Disabled") : $error_logfile; - - if (@$error_logfile == '') - $test['comments'] = _('To switch error logging set $error_logging in config.php file'); - else - if (!is_writable($error_logfile)) - $test['comments'] = _('Log file is not writeable'); - - return $test; -} -// -// Installed FA database structure version -// -function tst_dbversion() -{ - global $core_version; - $test['descr'] = _('Current database version'); - $test['type'] = 3; - $test['test'] = get_company_pref('version_id'); - $test['result'] = $test['test'] == $core_version; - $test['comments'] = _('Database structure seems to be not upgraded to current version') - ." ($core_version)"; - - return $test; -} - - -function tst_subdirs() -{ - global $db_connections; - - $comp_subdirs = array('images', 'pdf_files', 'backup','js_cache'); - - $test['descr'] = _('Company subdirectories consistency'); - $test['type'] = 3; - $test['test'] = array(company_path().'/*'); - foreach($comp_subdirs as $sub) { - $test['test'][] = company_path().'/*/'.$sub; - } - $test['result'] = true; - - $comp_path = company_path(); - if (!is_dir($comp_path) || !is_writable($comp_path) ) { - $test['result'] = false; - $test['comments'][] = sprintf(_("'%s' is not writeable"), $comp_path); - return $test; - }; - foreach ($db_connections as $n => $comp) { - $path = company_path($n); - if (!is_dir($path) || !is_writable($path) ) { - $test['result'] = false; - $test['comments'][] = sprintf(_("'%s' is not writeable"), $path); - continue; - }; - foreach($comp_subdirs as $sub) { - $spath = $path.'/'.$sub; - if (!is_dir($spath) || !is_writable($spath) ) { - $test['result'] = false; - $test['comments'][] = sprintf(_("'%s' is not writeable"), $spath); - } else { - $dir = opendir($spath); - while (false !== ($fname = readdir($dir))) { - // check only *.js files. Manually installed package can contain other - // non-writable files which are non-crucial for normal operations - if (preg_match('/.*(\.js)/', $fname) && !is_writable("$spath/$fname")) { - $test['result'] = false; - $test['comments'][] = sprintf(_("'%s' is not writeable"), "$spath/$fname"); - } - } - } - } - } - return $test; -} - -function tst_tmpdir() -{ - global $path_to_root; - - $test['descr'] = _('Temporary directory'); - $test['type'] = 3; - $test['test'] = $path_to_root.'/tmp'; - $test['result'] = is_dir($test['test']) && is_writable($test['test']); - $test['comments'][] = sprintf(_("'%s' is not writeable"), $test['test']); - return $test; -} - -function tst_langs() -{ - global $installed_languages, $path_to_root; - - $test['descr'] = _('Language configuration consistency'); - $test['type'] = 3; - $test['result'] = true; - $test['comments'] = array(); - - $fname = $path_to_root.'/lang'; - $test['test'][] = $fname; - if (!(is_dir($fname) && is_writable($fname))) { - $test['result'] = false; - $test['comments'][] = _("Languages folder should be writeable."); - } - - $fname = $path_to_root.'/lang/installed_languages.inc'; - $test['test'][] = $fname; - if (!(is_file($fname) && is_writable($fname))) { - $test['result'] = false; - $test['comments'][] = _("Languages configuration file should be writeable."); - } - - $langs = array(); - - foreach ($installed_languages as $lang) { - $langs[] = $lang['code']; - if ($lang['code'] == 'en_GB') continue; // native FA language - - $file = $path_to_root.'/lang/'.$lang['code'].'/LC_MESSAGES/'.$lang['code']; - if (@$lang['version']) - $file .= '-'.$lang['version']; - $file .= function_exists('gettext') ? '.mo' : '.po'; - - if (!is_file($file)) { - $test['result'] = false; - $test['comments'][] = sprintf( _('Missing %s translation file.'), $file); - } - if (!$_SESSION['get_text']->check_support($lang['code'], $lang['encoding'])) - { - $test['result'] = false; - $test['comments'][] = sprintf(_('Missing system locale: %s'), $lang['code'].".".$lang['encoding']); - }; - } - - $test['test'] = $langs; - - return $test; -} - -function tst_config() -{ - global $path_to_root; - - $test['descr'] = _('Main config file'); - $test['type'] = 2; - $test['test'] = $path_to_root.'/config.php'; - $test['result'] = is_file($test['test']) && !is_writable($test['test']); - $test['comments'][] = sprintf(_("'%s' file should be read-only"), $test['test']); - return $test; -} - -function tst_dbconfig() -{ - global $path_to_root; - - $test['descr'] = _('Database auth file'); - $test['type'] = 2; - $test['test'] = $path_to_root.'/config_db.php'; - $test['result'] = is_file($test['test']) && !is_writable($test['test']); - $test['comments'][] = sprintf(_("'%s' file should be read-only if you do not plan to add or change companies"), $test['test']); - - return $test; -} - -function tst_extconfig() -{ - global $path_to_root, $db_connections; - - $test['descr'] = _('Extensions system'); - $test['type'] = 3; - $fname = $path_to_root.'/installed_extensions.php'; - $test['test'][] = $fname; - $test['result'] = is_file($fname) && is_writable($fname); - $test['test'][] = company_path().'/*/installed_extensions.php'; - - foreach ($db_connections as $n => $comp) { - $path = company_path($n); - if (!is_dir($path)) continue; - - $path .= "/installed_extensions.php"; - if (!is_file($path) || !is_writable($path) ) { - $test['result'] = false; - $test['comments'][] = sprintf(_("'%s' is not writeable"), $path); - continue; - }; - } - $fname = $path_to_root.'/modules'; - $test['test'][] = $fname; - $test['result'] &= is_dir($fname) && is_writable($fname); - $fname = $path_to_root.'/modules/_cache'; - - $test['test'][] = $fname; - $test['result'] &= is_dir($fname) && is_writable($fname); - $fname = $path_to_root.'/themes'; - - $test['test'][] = $fname; - $test['result'] &= is_dir($fname) && is_writable($fname); - if(!$test['result']) - $test['comments'][] = _("Extensions configuration files and directories should be writeable"); - - $themedir = opendir($fname); - while (false !== ($fname = readdir($themedir))) - { - if ($fname!='.' && $fname!='..' && $fname!='CVS' && is_dir($path_to_root.'/themes/'.$fname) - && !in_array($fname, array('aqua', 'cool', 'default'))) - { - $test['test'][] = $fname; - $test['result'] = is_writable($path_to_root.'/themes/'.$fname); - if (!$test['result']) { - $test['comments'][] = - sprintf(_("Non-standard theme directory '%s' is not writable"), $fname); - break; - } - } - } - closedir($themedir); - - $test['test'][] = 'OpenSSL PHP extension'; - if (!extension_loaded('openssl')) { - $test['result'] = false; - $test['comments'][] = _("OpenSSL PHP extension have to be enabled to use extension repository system."); - } elseif (!function_exists('openssl_verify')) { - $test['result'] = false; - $test['comments'][] = _("OpenSSL have to be available on your server to use extension repository system."); - } - return $test; -} +include($path_to_root . "/includes/system_tests.inc"); //------------------------------------------------------------------------------------------------- -start_table(TABLESTYLE, "width=80%"); -$th = array(_("Test"), _('Test type'), _("Value"), _("Comments")); -table_header($th); - -$k = 0; //row colour counter -foreach ($system_tests as $test) -{ - alt_table_row_color($k); - $result = $test(); - if (!$result) continue; - label_cell($result['descr']); - label_cell($test_level[$result['type']]); - - $res = is_array(@$result['test']) ? implode('
', $result['test']) - : $result['test']; - label_cell($res); - - $comm = is_array(@$result['comments']) ? implode('
', $result['comments']) - : @$result['comments']; - $color = ($result['result'] ? 'green': - ($result['type']==3 ? 'red' : - ($result['type']==2 ? 'orange' : 'green'))); - label_cell("". - ($result['result'] ? _('Ok') : ''.$comm.'').''); - end_row(); -} +display_system_tests(); -end_table(); end_page(); ?> diff --git a/includes/system_tests.inc b/includes/system_tests.inc new file mode 100644 index 00000000..2e227bc4 --- /dev/null +++ b/includes/system_tests.inc @@ -0,0 +1,432 @@ +. +***********************************************************************/ + +// Type of requirement for positive test result +$test_level = array( + 0 => _('Info'), + 1 => _('Optional'), + 2 => _('Recomended'), + 3 => _('Required ') +); + +// test mysql server version +function tst_mysql() +{ + $test['descr'] = _('MySQL version'). ' >=4.1'; + $test['type'] = 3; + $test['test'] = mysql_get_server_info(); + $test['result'] = $test['test']>='4.1'; + $test['comments'] = _('Upgrade MySQL server to version at least 4.1'); + + return $test; +} +// test php mysql extension +function tst_phpmysql() +{ + $test['descr'] = _('PHP MySQL extension'); + $test['type'] = 3; + $test['result'] = function_exists('gettext'); + $test['test'] = $test['result'] ? _('Yes'): _('No'); + + $test['comments'] = _('Your PHP has to have MySQL extension enabled.'); + return $test; +} + +function tst_php() +{ + $test['descr'] = _('PHP version').' >=4.3.3'; + $test['type'] = 3; + $test['test'] = phpversion(); + $test['result'] = $test['test']>='4.3.3'; + $test['comments'] = _('Upgrade PHP to version at least 4.3.3'); + + return $test; +} + +function tst_system() +{ + $test['descr'] = _('Server system'); + $test['type'] = 0; + $test['test'] = PHP_OS; + $test['result'] = true; + + return $test; +} + +function tst_sessionpath() +{ + $test['descr'] = _('Session save path'); + $test['type'] = 0; + $test['test'] = session_save_path(); + $test['result'] = true; + + return $test; +} + +function tst_install() +{ + global $path_to_root; + + $test['descr'] = _('Removed install wizard folder'); + $test['type'] = 2; + $test['result'] = !is_dir($path_to_root.'/install'); + $test['test'] = _('Not removed'); + $test['comments'] = _('Remove or rename install wizard folder for security reasons.'); + + return $test; +} + +function tst_browser() +{ + $test['descr'] = _('Browser type'); + $test['type'] = 0; + $test['test'] = $_SERVER['HTTP_USER_AGENT']; + $test['result'] = true; + $test['comments'] = _('Any browser is supported'); + + return $test; +} + +function tst_server() +{ + $test['descr'] = _('Http server type'); + $test['test'] = $_SERVER['SERVER_SOFTWARE']; + $test['type'] = 0; + $test['result'] = true; + $test['comments'] = _('Any server is supported'); + + return $test; +} + +function tst_gettext() +{ + $test['descr'] = _('Native gettext'); + $test['test'] = function_exists('gettext') ? _('Yes'): _('No'); + $test['type'] = 1; + $test['result'] = true; + $test['comments'] = _('In case of no getext support, php emulation is used'); + + return $test; +} + +function tst_debug() +{ + global $go_debug; + $test['descr'] = _('Debugging mode'); + $test['type'] = 0; + $test['test'] = $go_debug ? _("Yes") : _("No"); + $test['result'] = $go_debug != 0; + $test['comments'] = _('To switch debugging on set $go_debug>0 in config.php file'); + + return $test; +} + +function tst_logging() +{ + global $error_logfile; + + $test['descr'] = _('Error logging'); + $test['type'] = 2; + // if error lgging is on, but log file does not exists try write + if ($error_logfile && !is_file($error_logfile)) + { + @fclose(@fopen($error_logfile, 'w')); + } + $test['result'] = @$error_logfile != '' && is_writable($error_logfile); + $test['test'] = @$error_logfile == '' ? _("Disabled") : $error_logfile; + + if (@$error_logfile == '') + $test['comments'] = _('To switch error logging set $error_logging in config.php file'); + else + if (!is_writable($error_logfile)) + $test['comments'] = _('Log file is not writeable'); + + return $test; +} +// +// Installed FA database structure version +// +function tst_dbversion() +{ + global $db_version; + $test['descr'] = _('Current database version'); + $test['type'] = 3; + $test['test'] = get_company_pref('version_id'); + $test['result'] = $test['test'] == $db_version; + $test['comments'] = _('Database structure seems to be not upgraded to current version') + ." ($db_version)"; + + return $test; +} + + +function tst_subdirs($install=false) +{ + global $db_connections; + + $comps = $install ? array('0') : array_keys($db_connections); + + $comp_subdirs = array('images', 'pdf_files', 'backup','js_cache'); + + $test['descr'] = _('Company subdirectories consistency'); + $test['type'] = 3; + $test['test'] = array(company_path().'/*'); + foreach($comp_subdirs as $sub) { + $test['test'][] = company_path().'/*/'.$sub; + } + $test['result'] = true; + + $comp_path = company_path(); + foreach ($comps as $n) { + $path = company_path($n); + if (!is_dir($path) || !is_writable($path) ) { + $test['result'] = false; + $test['comments'][] = sprintf(_("'%s' is not writeable"), $path); + continue; + }; + foreach($comp_subdirs as $sub) { + $spath = $path.'/'.$sub; + if (!is_dir($spath) || !is_writable($spath) ) { + $test['result'] = false; + $test['comments'][] = sprintf(_("'%s' is not writeable"), $spath); + } else { + $dir = opendir($spath); + while (false !== ($fname = readdir($dir))) { + // check only *.js files. Manually installed package can contain other + // non-writable files which are non-crucial for normal operations + if (preg_match('/.*(\.js)/', $fname) && !is_writable("$spath/$fname")) { + $test['result'] = false; + $test['comments'][] = sprintf(_("'%s' is not writeable"), "$spath/$fname"); + } + } + } + } + } + return $test; +} + +function tst_tmpdir() +{ + global $path_to_root; + + $test['descr'] = _('Temporary directory'); + $test['type'] = 3; + $test['test'] = $path_to_root.'/tmp'; + $test['result'] = is_dir($test['test']) && is_writable($test['test']); + $test['comments'][] = sprintf(_("'%s' is not writeable"), $test['test']); + return $test; +} + +function tst_langs() +{ + global $installed_languages, $path_to_root; + + $test['descr'] = _('Language configuration consistency'); + $test['type'] = 3; + $test['result'] = true; + $test['comments'] = array(); + + $fname = $path_to_root.'/lang'; + $test['test'][] = $fname; + if (!(is_dir($fname) && is_writable($fname))) { + $test['result'] = false; + $test['comments'][] = _("Languages folder should be writeable."); + } + + $fname = $path_to_root.'/lang/installed_languages.inc'; + $test['test'][] = $fname; + if (!(is_file($fname) && is_writable($fname))) { + $test['result'] = false; + $test['comments'][] = _("Languages configuration file should be writeable."); + } + + $langs = array(); + + foreach ($installed_languages as $lang) { + $langs[] = $lang['code']; + if ($lang['code'] == 'en_GB') continue; // native FA language + + $file = $path_to_root.'/lang/'.$lang['code'].'/LC_MESSAGES/'.$lang['code']; + if (@$lang['version']) + $file .= '-'.$lang['version']; + $file .= function_exists('gettext') ? '.mo' : '.po'; + + if (!is_file($file)) { + $test['result'] = false; + $test['comments'][] = sprintf( _('Missing %s translation file.'), $file); + } + if (!$_SESSION['get_text']->check_support($lang['code'], $lang['encoding'])) + { + $test['result'] = false; + $test['comments'][] = sprintf(_('Missing system locale: %s'), $lang['code'].".".$lang['encoding']); + }; + } + + $test['test'] = $langs; + + return $test; +} + +function tst_config($install) +{ + global $path_to_root; + + $test['descr'] = _('Main config file'); + $test['test'] = $path_to_root.'/config.php'; + if ($install) { + $test['type'] = 3; + $writable = check_write($test['test']); + $test['result'] = $writable==1; + $test['comments'][] = $writable == 0 ? + sprintf(_("Can't write '%s' file. Check FA directory write permissions."), $test['test']) + : sprintf(_("'%s' file exists."), $test['test']); + } else { + $test['type'] = 2; + $test['result'] = is_file($test['test']) && !is_writable($test['test']); + $test['comments'][] = sprintf(_("'%s' file should be read-only"), $test['test']); + } + return $test; +} + +function tst_dbconfig() +{ + global $path_to_root; + + $test['descr'] = _('Database auth file'); + $test['type'] = 2; + $test['test'] = $path_to_root.'/config_db.php'; + $test['result'] = is_file($test['test']) && !is_writable($test['test']); + $test['comments'][] = sprintf(_("'%s' file should be read-only if you do not plan to add or change companies"), $test['test']); + + return $test; +} + +function tst_extconfig($install) +{ + global $path_to_root, $db_connections; + + $comps = $install ? array('0') : array_keys($db_connections); + + $test['descr'] = _('Extensions system'); + $test['type'] = 3; + $fname = $path_to_root.'/installed_extensions.php'; + $test['test'][] = $fname; + $test['result'] = is_file($fname) && is_writable($fname); + $test['test'][] = company_path().'/*/installed_extensions.php'; + + foreach ($comps as $n) { + $path = company_path($n); + if (!is_dir($path)) continue; + + $path .= "/installed_extensions.php"; + if (!is_file($path) || !is_writable($path) ) { + $test['result'] = false; + $test['comments'][] = sprintf(_("'%s' is not writeable"), $path); + continue; + }; + } + $fname = $path_to_root.'/modules'; + $test['test'][] = $fname; + $test['result'] &= is_dir($fname) && is_writable($fname); + + $fname = $path_to_root.'/modules/_cache'; + $test['test'][] = $fname; + $test['result'] &= is_dir($fname) && is_writable($fname); + + $fname = $path_to_root.'/themes'; + $test['test'][] = $fname; + $test['result'] &= is_dir($fname) && is_writable($fname); + + $fname = $path_to_root.'/sql'; + $test['test'][] = $fname; + $test['result'] &= is_dir($fname) && is_writable($fname); + + if(!$test['result']) + $test['comments'][] = _("Extensions configuration files and directories should be writeable"); + + $themedir = opendir($fname); + while (false !== ($fname = readdir($themedir))) + { + if ($fname!='.' && $fname!='..' && $fname!='CVS' && is_dir($path_to_root.'/themes/'.$fname) + && !in_array($fname, array('aqua', 'cool', 'default'))) + { + $test['test'][] = $fname; + $test['result'] = is_writable($path_to_root.'/themes/'.$fname); + if (!$test['result']) { + $test['comments'][] = + sprintf(_("Non-standard theme directory '%s' is not writable"), $fname); + break; + } + } + } + closedir($themedir); + + $test['test'][] = 'OpenSSL PHP extension'; + if (!extension_loaded('openssl')) { + $test['result'] = false; + $test['comments'][] = _("OpenSSL PHP extension have to be enabled to use extension repository system."); + } elseif (!function_exists('openssl_verify')) { + $test['result'] = false; + $test['comments'][] = _("OpenSSL have to be available on your server to use extension repository system."); + } + return $test; +} + +function display_system_tests($install = false) +{ + global $test_level; + + if ($install) + $system_tests = array('tst_php', 'tst_phpmysql', 'tst_system', 'tst_config', + 'tst_subdirs', 'tst_langs', 'tst_tmpdir', 'tst_sessionpath', 'tst_extconfig' + ); + else + $system_tests = array('tst_mysql', 'tst_php', 'tst_server', 'tst_system', 'tst_browser', + 'tst_gettext', 'tst_debug', 'tst_logging', + 'tst_dbversion', 'tst_subdirs', 'tst_langs', 'tst_tmpdir', 'tst_sessionpath', + 'tst_install', 'tst_dbconfig', 'tst_config', 'tst_extconfig' + ); + + + start_table(TABLESTYLE, "width=80%"); + $th = array(_("Test"), _('Test type'), _("Value"), _("Comments")); + table_header($th); + + $ret = true; + $k = 0; //row colour counter + foreach ($system_tests as $test) + { + alt_table_row_color($k); + $result = $test($install); + if (!$result) continue; + + label_cell($result['descr']); + label_cell($test_level[$result['type']]); + + $res = is_array(@$result['test']) ? implode('
', $result['test']) + : $result['test']; + label_cell($res); + + $comm = is_array(@$result['comments']) ? implode('
', $result['comments']) + : @$result['comments']; + $color = ($result['result'] ? 'green': + ($result['type']==3 ? 'red' : + ($result['type']==2 ? 'orange' : 'green'))); + label_cell("". + ($result['result'] ? _('Ok') : ''.$comm.'').''); + end_row(); + $ret = $ret && (($result['result']!=0) || ($result['type'] < 3)); + } + end_table(); + + return $ret; +}