Update from beta to RC1
[fa-stable.git] / admin / system_diagnostics.php
index 3b2bfbb834ac89baa2ca3e91e5b5f48c056817ab..665b6f02c701c5694bb90743bb7e44768da77a18 100644 (file)
@@ -34,22 +34,22 @@ $system_tests = array('tst_mysql', 'tst_php', 'tst_server', 'tst_system', 'tst_b
 
 function tst_mysql() 
 {
-       $test['descr'] = _('MySQL version'). ' >3.23.58';
+       $test['descr'] = _('MySQL version'). ' >=4.1';
        $test['type'] = 3;
        $test['test'] = mysql_get_server_info();
-       $test['result'] = $test['test']>'3.23.58';
-       $test['comments'] = _('Upgrade MySQL server to version at least 3.23.58');
+       $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.2';
+       $test['descr'] = _('PHP version').' >=4.3.3';
        $test['type'] = 3;
        $test['test'] = phpversion();
-       $test['result'] = $test['test']>'4.3.2';
-       $test['comments'] = _('Upgrade PHP to version at least 4.3.2');
+       $test['result'] = $test['test']>='4.3.3';
+       $test['comments'] = _('Upgrade PHP to version at least 4.3.3');
 
        return $test;
 }
@@ -114,7 +114,7 @@ function tst_debug()
        $test['type'] = 0;
        $test['test'] = $go_debug ? _("Yes") : _("No");
        $test['result'] = $go_debug != 0;
-       $test['comments'] = _('To switch debugging on set $go_debug=1 in config.php file');
+       $test['comments'] = _('To switch debugging on set $go_debug>0 in config.php file');
 
        return $test;
 }
@@ -160,25 +160,26 @@ function tst_dbversion()
 
 function tst_subdirs()
 {
-       global $db_connections, $comp_path;
+       global $db_connections;
 
        $comp_subdirs = array('images', 'pdf_files', 'backup','js_cache');
 
        $test['descr'] = _('Company subdirectories consistency');
        $test['type'] = 3;
-       $test['test'] = array($comp_path.'/*');
+       $test['test'] = array(company_path().'/*');
        foreach($comp_subdirs as $sub) {
-               $test['test'][] = $comp_path.'/*/'.$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 = "$comp_path/$n";
+               $path = company_path($n);
                if (!is_dir($path) || !is_writable($path) ) {
                        $test['result'] = false;
                        $test['comments'][] = sprintf(_("'%s' is not writeable"), $path);
@@ -189,6 +190,16 @@ function tst_subdirs()
                        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");
+                                       }
+                               }
                        }
                }
        }
@@ -216,29 +227,41 @@ function tst_langs()
        $test['result'] = true;
        $test['comments'] = array();
 
-       $old = setlocale(LC_MESSAGES, '0');
+       $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'];
-        $file .= function_exists('gettext') ? '.mo' : '.po';
+               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']);
-        };
+               };
        }
-       
-       setlocale(LC_MESSAGES, $old);
 
        $test['test'] = $langs;
 
@@ -272,17 +295,17 @@ function tst_dbconfig()
 
 function tst_extconfig()
 {
-       global $path_to_root, $db_connections, $comp_path;
+       global $path_to_root, $db_connections;
 
-       $test['descr'] = _('Extensions configuration files');
+       $test['descr'] = _('Extensions system');
        $test['type'] = 3;
-       $test['test'] = $path_to_root.'/installed_extensions.php';
-       $test['result'] = is_file($test['test']) && is_writable($test['test']);
-       $test['test'] . ','.$comp_path.'/*/installed_extensions.php';
-       $test['comments'][] = sprintf(_("'%s' file should be writeable"), $test['test']);
+       $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 = "$comp_path/$n";
+               $path = company_path($n);
                if (!is_dir($path)) continue;
 
                $path .= "/installed_extensions.php";
@@ -292,11 +315,50 @@ function tst_extconfig()
                        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;
 }
 //-------------------------------------------------------------------------------------------------
 
-start_table("$table_style width=80%");
+start_table(TABLESTYLE, "width=80%");
 $th = array(_("Test"), _('Test type'), _("Value"), _("Comments"));
 table_header($th);
 
@@ -315,7 +377,11 @@ foreach ($system_tests as $test)
 
     $comm = is_array(@$result['comments']) ? implode('<br>', $result['comments']) 
                : @$result['comments'];
-    label_cell($result['result'] ? _('Ok') : '<b>'.$comm.'</b>');
+       $color = ($result['result'] ? 'green': 
+       ($result['type']==3 ? 'red' :
+        ($result['type']==2 ? 'orange' : 'green')));
+    label_cell("<span style='color:$color'>".
+       ($result['result'] ? _('Ok') : '<b>'.$comm.'</b>').'</span>');
     end_row();
 }