summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2013-01-10 12:32:29 +0100
committerAleksander Machniak <alec@alec.pl>2013-01-10 12:32:29 +0100
commit4490d03649e1ce1a90274a0dce56fe8e5d2859ae (patch)
treec8f993b12dae2bdefff6ded399d1375ceb061da0
parentc0a714348478f42b0a803afa4586e7389827f72d (diff)
Attach updatedb.sh script to the installer interface
-rw-r--r--installer/rcube_install.php40
-rw-r--r--installer/test.php13
2 files changed, 11 insertions, 42 deletions
diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index 6ef105bc7..29c18d9a5 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -626,46 +626,18 @@ class rcube_install
/**
- * Update database with SQL statements from SQL/*.update.sql
+ * Update database schema
*
- * @param object rcube_db Database connection
* @param string Version to update from
+ *
* @return boolen True on success, False on error
*/
- function update_db($DB, $version)
+ function update_db($version)
{
- $version = version_parse(strtolower($version));
- $engine = isset($this->db_map[$DB->db_provider]) ? $this->db_map[$DB->db_provider] : $DB->db_provider;
-
- // read schema file from /SQL/*
- $fname = INSTALL_PATH . "SQL/$engine.update.sql";
- if ($lines = @file($fname, FILE_SKIP_EMPTY_LINES)) {
- $from = false; $sql = '';
- foreach ($lines as $line) {
- $is_comment = preg_match('/^--/', $line);
- if (!$from && $is_comment && preg_match('/from version\s([0-9.]+[a-z-]*)/', $line, $m)) {
- $v = version_parse(strtolower($m[1]));
- if ($v == $version || version_compare($version, $v, '<='))
- $from = true;
- }
- if ($from && !$is_comment)
- $sql .= $line. "\n";
- }
-
- if ($sql)
- $this->exec_sql($sql, $DB);
- }
- else {
- $this->fail('DB Schema', "Cannot read the update file: $fname");
- return false;
- }
-
- if ($err = $this->get_error()) {
- $this->fail('DB Schema', "Error updating database: $err");
- return false;
- }
+ system(INSTALL_PATH . "bin/updatedb.sh --label=roundcube --version=" . $version
+ . " --dir=" . INSTALL_PATH . "SQL", $result);
- return true;
+ return !$result;
}
diff --git a/installer/test.php b/installer/test.php
index e266bf05f..2cd9b5374 100644
--- a/installer/test.php
+++ b/installer/test.php
@@ -157,11 +157,9 @@ if ($db_working && $_POST['initdb']) {
}
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>';
- }
+ if (!($success = $RCI->update_db($_POST['version']))) {
+ echo '<p class="warning">Database schema update failed.</p>';
+ }
}
// test database
@@ -176,9 +174,8 @@ if ($db_working) {
$RCI->fail('DB Schema', "Database schema differs");
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>';
+ $select->add('0.9 or newer', '');
+ echo '<p class="suggestion">You should run the update queries to get the schema fixed.<br/><br/>Version to update from: ' . $select->show() . '&nbsp;<input type="submit" name="updatedb" value="Update" /></p>';
$db_working = false;
}
else {