| | |
| | | var $config = array(); |
| | | var $configured = false; |
| | | var $last_error = null; |
| | | var $db_map = array('pgsql' => 'postgres', 'mysqli' => 'mysql', 'sqlsrv' => 'mssql'); |
| | | var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])'; |
| | | var $bool_config_props = array(); |
| | | |
| | |
| | | */ |
| | | function init_db($DB) |
| | | { |
| | | $engine = isset($this->db_map[$DB->db_provider]) ? $this->db_map[$DB->db_provider] : $DB->db_provider; |
| | | $engine = $DB->db_provider; |
| | | |
| | | // read schema file from /SQL/* |
| | | $fname = INSTALL_PATH . "SQL/$engine.initial.sql"; |
| | |
| | | |
| | | |
| | | /** |
| | | * 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; |
| | | system(INSTALL_PATH . "bin/updatedb.sh --package=roundcube --version=" . $version |
| | | . " --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) |
| | | $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; |
| | | return !$result; |
| | | } |
| | | |
| | | |