Add functions to help diagnose if plugin dependencies are in place
[squirrelmail.git] / src / configtest.php
index 4375cd72fca654c5656287a27575380616124dbc..7b2049d0b5e27545cb65a539343d6a62485ea844 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * SquirrelMail configtest script
  *
- * @copyright © 2003-2006 The SquirrelMail Project Team
+ * @copyright © 2003-2007 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -81,8 +81,11 @@ ob_implicit_flush();
 /** @ignore */
 define('SM_PATH', '../');
 /** load minimal function set */
+require(SM_PATH . 'include/constants.php');
 require(SM_PATH . 'functions/global.php');
 require(SM_PATH . 'functions/strings.php');
+$SQM_INTERNAL_VERSION = preg_split('/\./', SM_VERSION, 3);
+$SQM_INTERNAL_VERSION[2] = intval($SQM_INTERNAL_VERSION[2]);
 
 /** set default value in order to block remote access */
 $allow_remote_configtest=false;
@@ -110,6 +113,13 @@ if (file_exists(SM_PATH . 'config/config_local.php')) {
     require(SM_PATH . 'config/config_local.php');
 }
 
+/** Load plugins */
+global $disable_plugins;
+$squirrelmail_plugin_hooks = array();
+if (!$disable_plugins && file_exists(SM_PATH . 'config/plugin_hooks.php')) {
+    require(SM_PATH . 'config/plugin_hooks.php');
+}
+
 /** Warning counter */
 $warnings = 0;
 
@@ -162,7 +172,7 @@ if (! $allow_remote_configtest) {
 }
 /* checking PHP specs */
 
-echo "<p><table>\n<tr><td>SquirrelMail version:</td><td><b>" . $version . "</b></td></tr>\n" .
+echo "<p><table>\n<tr><td>SquirrelMail version:</td><td><b>" . SM_VERSION . "</b></td></tr>\n" .
     '<tr><td>Config file version:</td><td><b>' . $config_version . "</b></td></tr>\n" .
     '<tr><td>Config file last modified:</td><td><b>' .
     date ('d F Y H:i:s', filemtime(SM_PATH . 'config/config.php')) .
@@ -209,6 +219,21 @@ if (function_exists('mb_internal_encoding') &&
     do_err($mb_error);
 }
 
+/**
+ * Do not use SquirrelMail with magic_quotes_* on.
+ */
+if ( get_magic_quotes_runtime() || get_magic_quotes_gpc() ||
+    ( (bool) ini_get('magic_quotes_sybase') && ini_get('magic_quotes_sybase') != 'off' )
+    ) {
+    $magic_quotes_warning='You have enabled any one of <tt>magic_quotes_runtime</tt>, '
+        .'<tt>magic_quotes_gpc</tt> or <tt>magic_quotes_sybase</tt> in your PHP '
+        .'configuration. We recommend all those settings to be off. SquirrelMail '
+        .'may work with them on, but when experiencing stray backslashes in your mail '
+        .'or other strange behaviour, it may be advisable to turn them off.';
+    do_err($magic_quotes_warning,false);
+}
+
+
 /* checking paths */
 
 echo "Checking paths...<br />\n";
@@ -267,6 +292,8 @@ if($data_dir == $attachment_dir) {
 }
 
 
+echo "Checking plugins...<br />\n";
+
 /* check plugins and themes */
 //FIXME: check requirements given in plugin _info() function, such
 //       as required PHP extensions, Pear packages, other plugins, SM version, etc
@@ -323,15 +350,36 @@ if (isset($plugins[0])) {
     ob_end_clean();
     // if plugins output more than newlines and spacing, stop script execution.
     if (!empty($output)) {
-        $plugin_load_error = 'Some output is produced when plugins are loaded.'
-            .' Usually it means error. Output said: '.htmlspecialchars($output);
+        $plugin_load_error = 'Some output is produced when plugins are loaded. Usually this means there is an error in one of the plugin setup or configuration files. The output was: '.htmlspecialchars($output);
         do_err($plugin_load_error);
     }
+    /** 
+     * Print plugin versions
+     */
+    echo $IND . "Plugin versions...<br />\n";
+    foreach ($plugins as $name) {
+        $plugin_version = get_plugin_version($name);
+        if (!empty($plugin_version))
+            echo $IND . $IND . $name . ' ' . $plugin_version . "<br />\n";
+
+        // check if this plugin has any other plugin 
+        // dependencies and if they are satisfied
+        //
+        $failed_dependencies = check_plugin_dependencies($name);
+        if (is_array($failed_dependencies)) {
+            $missing_plugins = '';
+            foreach ($failed_dependencies as $depend_name => $depend_version) {
+                $missing_plugins .= ', ' . $depend_name . ' (version ' . $depend_version . ')';
+            }
+            do_err($name . ' is missing some dependencies: ' . trim($missing_plugins, ', '), FALSE);
+        }
+
+    }
     /**
-     * Hook is added in 1.5.2. Plugins should print error message and return true
-     * if there is an error in plugin.
+     * This hook was added in 1.5.2 and 1.4.10. Each plugins should print an error 
+     * message and return TRUE if there are any errors in its setup/configuration.
      */
-    $plugin_err = boolean_hook_function('configtest');
+    $plugin_err = boolean_hook_function('configtest', $null, 1);
     if($plugin_err) {
         do_err('Some plugin tests failed.');
     } else {