From 2491c6240cad60e68916a79c7a0689bedc2cefd9 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 15 Apr 2010 03:28:05 -0400
Subject: [PATCH] Add minimal database schema check to installer and update script

---
 installer/rcube_install.php |   43 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index b0d59fd..ae568d2 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -40,8 +40,8 @@
     'addrbook_show_images' => 'show_images',
   );
   
-  // these config options are optional or can be set to null
-  var $required_config = array('db_dsnw', 'des_key');
+  // these config options are required for a working system
+  var $required_config = array('db_dsnw', 'db_table_contactgroups', 'db_table_contactgroupmembers', 'des_key');
   
   /**
    * Constructor
@@ -325,6 +325,43 @@
     }
   }
   
+  /**
+   * Compare the local database schema with the reference schema
+   * required for this version of RoundCube
+   *
+   * @param boolean True if the schema schould be updated
+   * @return boolean True if the schema is up-to-date, false if not or an error occured
+   */
+  function db_schema_check($DB, $update = false)
+  {
+    if (!$this->configured)
+      return false;
+    
+    // simple ad hand-made db schema
+    $db_schema = array(
+      'users' => array(),
+      'identities' => array(),
+      'contacts' => array(),
+      'contactgroups' => array(),
+      'contactgroupmembers' => array(),
+      'cache' => array(),
+      'messages' => array(),
+      'session' => array(),
+    );
+    
+    $errors = array();
+    
+    // check list of tables
+    $existing_tables = $DB->list_tables();
+    foreach ($db_schema as $table => $cols) {
+      if (!in_array($this->config['db_table_'.$table], $existing_tables))
+        $errors[] = "Missing table ".$table;
+      
+      // TODO: check cols and indices
+    }
+    
+    return !empty($errors) ? $errors : false;
+  }
   
   /**
    * Compare the local database schema with the reference schema
@@ -333,7 +370,7 @@
    * @param boolean True if the schema schould be updated
    * @return boolean True if the schema is up-to-date, false if not or an error occured
    */
-  function db_schema_check($update = false)
+  function mdb2_schema_check($update = false)
   {
     if (!$this->configured)
       return false;

--
Gitblit v1.9.1