Attach updatedb.sh script to the installer interface

pull/56/head
Aleksander Machniak 12 years ago
parent c0a7143484
commit 4490d03649

@ -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 * @param string Version to update from
*
* @return boolen True on success, False on error * @return boolen True on success, False on error
*/ */
function update_db($DB, $version) function update_db($version)
{ {
$version = version_parse(strtolower($version)); system(INSTALL_PATH . "bin/updatedb.sh --label=roundcube --version=" . $version
$engine = isset($this->db_map[$DB->db_provider]) ? $this->db_map[$DB->db_provider] : $DB->db_provider; . " --dir=" . INSTALL_PATH . "SQL", $result);
// 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) return !$result;
$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;
}
return true;
} }

@ -157,10 +157,8 @@ if ($db_working && $_POST['initdb']) {
} }
else if ($db_working && $_POST['updatedb']) { else if ($db_working && $_POST['updatedb']) {
if (!($success = $RCI->update_db($DB, $_POST['version']))) { if (!($success = $RCI->update_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">Database schema update failed.</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 below the comment with the currently installed version number.</p>';
} }
} }
@ -176,9 +174,8 @@ if ($db_working) {
$RCI->fail('DB Schema', "Database schema differs"); $RCI->fail('DB Schema', "Database schema differs");
echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>"; echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>";
$select = $RCI->versions_select(array('name' => 'version')); $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>'; $select->add('0.9 or newer', '');
// echo '<p class="warning">Please manually execute the SQL statements from '.$updatefile.' on your database.<br/>'; 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>';
// echo 'See comments in the file and execute queries that are superscribed with the currently installed version number.</p>';
$db_working = false; $db_working = false;
} }
else { else {

Loading…
Cancel
Save