diff options
| author | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
|---|---|---|
| committer | Tristan Zur <tzur@web.web.ccwn.org> | 2014-03-27 22:27:47 +0100 |
| commit | b62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch) | |
| tree | 86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /webmail/vendor | |
Diffstat (limited to 'webmail/vendor')
| -rwxr-xr-x | webmail/vendor/bin/rcubeinitdb.sh | 130 | ||||
| -rw-r--r-- | webmail/vendor/composer/installed.json | 53 | ||||
| m--------- | webmail/vendor/roundcube/plugin-installer | 0 |
3 files changed, 183 insertions, 0 deletions
diff --git a/webmail/vendor/bin/rcubeinitdb.sh b/webmail/vendor/bin/rcubeinitdb.sh new file mode 100755 index 0000000..10862ea --- /dev/null +++ b/webmail/vendor/bin/rcubeinitdb.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env php +<?php + +define('INSTALL_PATH', getcwd() . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array( + 'd' => 'dir', + 'p' => 'package', +)); + +if (empty($opts['dir'])) { + rcube::raise_error("Database schema directory not specified (--dir).", false, true); +} +if (empty($opts['package'])) { + rcube::raise_error("Database schema package name not specified (--package).", false, true); +} + +// Check if directory exists +if (!file_exists($opts['dir'])) { + rcube::raise_error("Specified database schema directory doesn't exist.", false, true); +} + +$RC = rcube::get_instance(); +$DB = rcube_db::factory($RC->config->get('db_dsnw')); + +// Connect to database +$DB->db_connect('w'); +if (!$DB->is_connected()) { + rcube::raise_error("Error connecting to database: " . $DB->is_error(), false, true); +} + +$opts['dir'] = rtrim($opts['dir'], DIRECTORY_SEPARATOR); +$file = $opts['dir'] . DIRECTORY_SEPARATOR . $DB->db_provider . '.initial.sql'; +if (!file_exists($file)) { + rcube::raise_error("No DDL file found for " . $DB->db_provider . " driver.", false, true); +} + +$package = $opts['package']; +$error = false; + +// read DDL file +if ($lines = file($file)) { + $sql = ''; + foreach ($lines as $line) { + if (preg_match('/^--/', $line) || trim($line) == '') + continue; + + $sql .= $line . "\n"; + if (preg_match('/(;|^GO)$/', trim($line))) { + @$DB->query(fix_table_names($sql)); + $sql = ''; + if ($error = $DB->is_error()) { + break; + } + } + } +} + +if (!$error) { + $version = date('Ymd00'); + $system_table = $DB->quote_identifier($DB->table_name('system')); + $name_col = $DB->quote_identifier('name'); + $value_col = $DB->quote_identifier('value'); + $package_version = $package . '-version'; + + $DB->query("SELECT * FROM $system_table WHERE $name_col=?", + $package_version); + + if ($DB->fetch_assoc()) { + $DB->query("UPDATE $system_table SET $value_col=? WHERE $name_col=?", + $version, $package_version); + } + else { + $DB->query("INSERT INTO $system_table ($name_col, $value_col) VALUES (?, ?)", + $package_version, $version); + } + + $error = $DB->is_error(); +} + +if ($error) { + echo "[FAILED]\n"; + rcube::raise_error("Error in DDL schema $file: $error", false, true); +} +echo "[OK]\n"; + + +function fix_table_names($sql) +{ + global $DB, $RC; + + $prefix = $RC->config->get('db_prefix'); + $engine = $DB->db_provider; + + if (empty($prefix)) { + return $sql; + } + + $tables = array(); + $sequences = array(); + + // find table names + if (preg_match_all('/CREATE TABLE (\[dbo\]\.|IF NOT EXISTS )?[`"\[\]]*([^`"\[\] \r\n]+)/i', $sql, $matches)) { + foreach ($matches[2] as $table) { + $tables[$table] = $prefix . $table; + } + } + // find sequence names + if ($engine == 'postgres' && preg_match_all('/CREATE SEQUENCE (IF NOT EXISTS )?"?([^" \n\r]+)/i', $sql, $matches)) { + foreach ($matches[2] as $sequence) { + $sequences[$sequence] = $prefix . $sequence; + } + } + + // replace table names + foreach ($tables as $table => $real_table) { + $sql = preg_replace("/([^a-zA-Z0-9_])$table([^a-zA-Z0-9_])/", "\\1$real_table\\2", $sql); + } + // replace sequence names + foreach ($sequences as $sequence => $real_sequence) { + $sql = preg_replace("/([^a-zA-Z0-9_])$sequence([^a-zA-Z0-9_])/", "\\1$real_sequence\\2", $sql); + } + + return $sql; +} + +?> diff --git a/webmail/vendor/composer/installed.json b/webmail/vendor/composer/installed.json new file mode 100644 index 0000000..c87bfee --- /dev/null +++ b/webmail/vendor/composer/installed.json @@ -0,0 +1,53 @@ +[ + { + "name": "roundcube/plugin-installer", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/roundcube/plugin-installer.git", + "reference": "8a050c5a59d3a70218b1c598f3bba08a8872fac8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/roundcube/plugin-installer/zipball/8a050c5a59d3a70218b1c598f3bba08a8872fac8", + "reference": "8a050c5a59d3a70218b1c598f3bba08a8872fac8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "composer/composer": "*" + }, + "time": "2013-07-27 09:11:42", + "bin": [ + "src/bin/rcubeinitdb.sh" + ], + "type": "composer-installer", + "extra": { + "class": "Roundcube\\Composer\\PluginInstaller" + }, + "installation-source": "source", + "autoload": { + "psr-0": { + "Roundcube\\Composer": "src/" + } + }, + "notification-url": "http://plugins.roundcube.net/downloads/%package%", + "license": [ + "GPL-3.0+" + ], + "authors": [ + { + "name": "Till Klampaeckel", + "email": "till@php.net" + }, + { + "name": "Thomas Bruederli", + "email": "thomas@roundcube.net" + } + ], + "description": "A composer-installer for Roundcube plugins." + } +] diff --git a/webmail/vendor/roundcube/plugin-installer b/webmail/vendor/roundcube/plugin-installer new file mode 160000 +Subproject 8a050c5a59d3a70218b1c598f3bba08a8872fac |
