Index: drupalvb.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drupalvb/drupalvb.inc,v
retrieving revision 1.6.2.5
diff -u -p -r1.6.2.5 drupalvb.inc
--- drupalvb.inc	29 Apr 2008 21:18:05 -0000	1.6.2.5
+++ drupalvb.inc	30 Apr 2008 13:34:29 -0000
@@ -78,11 +78,41 @@ function drupalvb_set_default_db_prefix(
  * @see drupalvb_settings_system()
  */
 function drupalvb_db_is_valid() {
+  static $valid;
+
+  if (isset($valid)) {
+    return $valid;
+  }
+
+  $valid = FALSE;
   $db = parse_url(variable_get('drupalvb_db', ''));
   if (!empty($db['scheme']) && !empty($db['host']) && !empty($db['user']) && !empty($db['pass']) && !empty($db['path'])) {
-    return TRUE;
+    foreach (array('user', 'pass', 'host', 'path') as $value) {
+      $db[$value] = urldecode($db[$value]);
+    }
+    switch ($db['scheme']) {
+      case 'mysql':
+        $connection = @mysql_connect($db['host'], $db['user'], $db['pass'], TRUE, 2);
+        if ($connection && mysql_select_db(substr($db['path'], 1))) {
+          $valid = TRUE;
+        }
+        @mysql_close($connection);
+        break;
+
+      case 'mysqli':
+        $connection = mysqli_init();
+        @mysqli_real_connect($connection, $db['host'], $db['user'], $db['pass'], substr($db['path'], 1), $db['port'], NULL, MYSQLI_CLIENT_FOUND_ROWS);
+        if ($connection) {
+          $valid = TRUE;
+        }
+        @mysqli_close($connection);
+        break;
+    }
+  }
+  if (!$valid && user_access('administer drupalvb')) {
+    drupal_set_message(t('Invalid database connection for vBulletin. Please configure the connection in <a href="!settings">Drupal vB\'s settings</a>', array('!settings' => url('admin/settings/drupalvb/database'))), 'error');
   }
-  return FALSE;
+  return $valid;
 }
 
 /**
Index: drupalvb.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drupalvb/drupalvb.module,v
retrieving revision 1.11.4.9
diff -u -p -r1.11.4.9 drupalvb.module
--- drupalvb.module	30 Apr 2008 01:20:06 -0000	1.11.4.9
+++ drupalvb.module	30 Apr 2008 13:35:13 -0000
@@ -439,11 +439,14 @@ function drupalvb_block($op = 'list', $d
     }
   }
   else if ($op == 'view') {
+    require_once drupal_get_path('module', 'drupalvb') .'/drupalvb.inc';
     $block = array();
+    if (!drupalvb_db_is_valid()) {
+      return $block;
+    }
     switch ($delta) {
       case 0:
         // List recent threads/posts as specified in the configuration.
-        require_once drupal_get_path('module', 'drupalvb') .'/drupalvb.inc';
         $items     = array();
         $date_cut  = time() - (intval(variable_get('drupalvb_block_0_limit', 7)) * 86400);
         $num_items = variable_get('drupalvb_block_0', 5);
@@ -482,8 +485,6 @@ function drupalvb_block($op = 'list', $d
       case 1:
         // Forum info.
         if (user_access('access content') && $user->uid > 0) {
-          require_once drupal_get_path('module', 'drupalvb') .'/drupalvb.inc';
-
           $vb_options = drupalvb_get('options');
           $users_online = drupalvb_get_users_online();
 
@@ -529,7 +530,6 @@ function drupalvb_block($op = 'list', $d
 
       case 2:
         // Forum statistics.
-        require_once drupal_get_path('module', 'drupalvb') .'/drupalvb.inc';
 
         // Get total threads & posts.
         $totalthreads = $totalposts = 0;
