From 190e97e88624b4b42ad677c7446c0d5a0b7b17a6 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 26 Feb 2008 04:10:07 -0500
Subject: [PATCH] Fix database initialization and check write access on the DB; update INSTALL instructions

---
 installer/rcube_install.php |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index 136fdd0..f2ab394 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -52,7 +52,7 @@
   /**
    * Read the default config files and store properties
    */
-  function get_defaults()
+  function load_defaults()
   {
     $this->_load_config('.php.dist');
   }
@@ -74,7 +74,7 @@
   {
     include '../config/main.inc' . $suffix;
     if (is_array($rcmail_config)) {
-      $this->config = $rcmail_config;
+      $this->config += $rcmail_config;
     }
       
     @include '../config/db.inc'. $suffix;
@@ -238,6 +238,56 @@
     return $out;
   }
   
+  
+  /**
+   * Initialize the database with the according schema
+   *
+   * @param object rcube_db Database connection
+   * @return boolen True on success, False on error
+   */
+  function init_db($DB)
+  {
+    $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql');
+    $engine = isset($db_map[$DB->db_provider]) ? $db_map[$DB->db_provider] : $DB->db_provider;
+    
+    // find out db version
+    if ($engine == 'mysql') {
+      $DB->query('SELECT VERSION() AS version');
+      $sql_arr = $DB->fetch_assoc();
+      $version = floatval($sql_arr['version']);
+      
+      if ($version >= 4.1)
+        $engine = 'mysql5';
+    }
+    
+    // read schema file from /SQL/*
+    $fname = "../SQL/$engine.initial.sql";
+    if ($lines = @file($fname, FILE_SKIP_EMPTY_LINES)) {
+      $buff = '';
+      foreach ($lines as $i => $line) {
+        if (eregi('^--', $line))
+          continue;
+          
+        $buff .= $line . "\n";
+        if (eregi(';$', trim($line))) {
+          $DB->query($buff);
+          $buff = '';
+        }
+      }
+    }
+    else {
+      $this->fail('DB Schema', "Cannot read the schema file: $fname");
+      return false;
+    }
+    
+    if ($err = $this->get_error()) {
+      $this->fail('DB Schema', "Error creating database schema: $err");
+      return false;
+    }
+
+    return true;
+  }
+  
   /**
    * Handler for RoundCube errors
    */

--
Gitblit v1.9.1