From e6bb836e053913ec8a5930a6d51af1fa55eb08e2 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 25 Feb 2011 11:37:22 -0500
Subject: [PATCH] Create interactive update script with improved DB schema check; udated installer with new features and styles

---
 installer/test.php |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/installer/test.php b/installer/test.php
index 713edfb..02a1ceb 100644
--- a/installer/test.php
+++ b/installer/test.php
@@ -156,6 +156,14 @@
     }
 }
 
+else if ($db_working && $_POST['updatedb']) {
+  if (!($success = $RCI->update_db($DB, $_POST['version']))) {
+      $updatefile = INSTALL_PATH . 'SQL/' . (isset($RCI->db_map[$DB->db_provider]) ? $RCI->db_map[$DB->db_provider] : $DB->db_provider) . '.update.sql';
+      echo '<p class="warning">Please manually execute the SQL statements from '.$updatefile.' on your database.<br/>';
+      echo 'See comments in the file and execute queries below the comment with the currently installed version number.</p>';
+  }
+}
+
 // test database
 if ($db_working) {
     $db_read = $DB->query("SELECT count(*) FROM {$RCI->config['db_table_users']}");
@@ -164,12 +172,13 @@
         echo '<p><input type="submit" name="initdb" value="Initialize database" /></p>';
         $db_working = false;
     }
-    else if ($RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) {
+    else if ($err = $RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) {
         $RCI->fail('DB Schema', "Database schema differs");
-        $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql', 'sqlsrv' => 'mssql');
-        $updatefile = INSTALL_PATH . 'SQL/' . (isset($db_map[$DB->db_provider]) ? $db_map[$DB->db_provider] : $DB->db_provider) . '.update.sql';
-        echo '<p class="warning">Please manually execute the SQL statements from '.$updatefile.' on your database.<br/>';
-        echo 'See comments in the file and execute queries that are superscribed with the currently installed version number.</p>';
+        echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>";
+        $select = $RCI->versions_select(array('name' => 'version'));
+        echo '<p class="suggestion">You should run the update queries to get the schmea fixed.<br/><br/>Version to update from: ' . $select->show() . '&nbsp;<input type="submit" name="updatedb" value="Update" /></p>';
+//        echo '<p class="warning">Please manually execute the SQL statements from '.$updatefile.' on your database.<br/>';
+//        echo 'See comments in the file and execute queries that are superscribed with the currently installed version number.</p>';
         $db_working = false;
     }
     else {
@@ -412,7 +421,7 @@
 
 After completing the installation and the final tests please <b>remove</b> the whole
 installer folder from the document root of the webserver or make sure that
-enable_installer option in main.inc.php is disabled.<br />
+<tt>enable_installer</tt> option in config/main.inc.php is disabled.<br />
 <br />
 
 These files may expose sensitive configuration data like server passwords and encryption keys

--
Gitblit v1.9.1