| | |
| | | // save change |
| | | $this->config[$prop] = $value; |
| | | |
| | | $dump = self::_dump_var($value, $prop); |
| | | |
| | | // replace the matching line in config file |
| | | $out = preg_replace( |
| | | '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie', |
| | | "'\\1 = ' . rcube_install::_dump_var(\$value, \$prop) . ';'", |
| | | '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Ui', |
| | | "\\1 = $dump;", |
| | | $out); |
| | | } |
| | | |
| | |
| | | |
| | | $this->config = array_merge($this->config, $current); |
| | | |
| | | foreach ((array)$current['ldap_public'] as $key => $values) { |
| | | foreach (array_keys((array)$current['ldap_public']) as $key) { |
| | | $this->config['ldap_public'][$key] = $current['ldap_public'][$key]; |
| | | } |
| | | } |
| | |
| | | * Compare the local database schema with the reference schema |
| | | * required for this version of Roundcube |
| | | * |
| | | * @param boolean True if the schema schould be updated |
| | | * @param rcube_db Database object |
| | | * |
| | | * @return boolean True if the schema is up-to-date, false if not or an error occured |
| | | */ |
| | | function db_schema_check($DB, $update = false) |
| | | function db_schema_check($DB) |
| | | { |
| | | if (!$this->configured) |
| | | return false; |
| | |
| | | $existing_tables = $DB->list_tables(); |
| | | |
| | | foreach ($db_schema as $table => $cols) { |
| | | $table = !empty($this->config['db_table_'.$table]) ? $this->config['db_table_'.$table] : $table; |
| | | $table = $this->config['db_prefix'] . $table; |
| | | if (!in_array($table, $existing_tables)) { |
| | | $errors[] = "Missing table '".$table."'"; |
| | | } |
| | |
| | | return $schema; |
| | | } |
| | | |
| | | /** |
| | | * Try to detect some file's mimetypes to test the correct behavior of fileinfo |
| | | */ |
| | | function check_mime_detection() |
| | | { |
| | | $files = array( |
| | | 'installer/images/roundcube_logo.png' => 'image/png', |
| | | 'program/resources/blank.tif' => 'image/tiff', |
| | | 'skins/larry/templates/login.html' => 'text/html', |
| | | ); |
| | | |
| | | $errors = array(); |
| | | foreach ($files as $path => $expected) { |
| | | $mimetype = rcube_mime::file_content_type(INSTALL_PATH . $path, basename($path)); |
| | | if ($mimetype != $expected) { |
| | | $errors[] = array($path, $mimetype, $expected); |
| | | } |
| | | } |
| | | |
| | | return $errors; |
| | | } |
| | | |
| | | /** |
| | | * Check the correct configuration of the 'mime_types' mapping option |
| | | */ |
| | | function check_mime_extensions() |
| | | { |
| | | $types = array( |
| | | 'application/zip' => 'zip', |
| | | 'application/x-tar' => 'tar', |
| | | 'application/java-archive' => 'jar', |
| | | 'image/bmp' => 'bmp', |
| | | 'image/svg+xml' => 'svg', |
| | | ); |
| | | |
| | | $errors = array(); |
| | | foreach ($types as $mimetype => $expected) { |
| | | $ext = rcube_mime::get_mime_extensions($mimetype); |
| | | if ($ext[0] != $expected) { |
| | | $errors[] = array($mimetype, $ext, $expected); |
| | | } |
| | | } |
| | | |
| | | return $errors; |
| | | } |
| | | |
| | | /** |
| | | * Getter for the last error message |
| | |
| | | '0.6-beta', '0.6', |
| | | '0.7-beta', '0.7', '0.7.1', '0.7.2', '0.7.3', '0.7.4', |
| | | '0.8-beta', '0.8-rc', '0.8.0', '0.8.1', '0.8.2', '0.8.3', '0.8.4', '0.8.5', '0.8.6', |
| | | '0.9-beta', '0.9-rc', '0.9-rc2', '0.9.0', |
| | | '0.9-beta', '0.9-rc', '0.9-rc2', |
| | | // Note: Do not add newer versions here |
| | | )); |
| | | return $select; |
| | | } |
| | |
| | | * @param string Test name |
| | | * @param string Error message |
| | | * @param string URL for details |
| | | * @param bool Do not count this failure |
| | | */ |
| | | function fail($name, $message = '', $url = '') |
| | | function fail($name, $message = '', $url = '', $optional=false) |
| | | { |
| | | $this->failures++; |
| | | if (!$optional) { |
| | | $this->failures++; |
| | | } |
| | | |
| | | echo Q($name) . ': <span class="fail">NOT OK</span>'; |
| | | $this->_showhint($message, $url); |
| | |
| | | } |
| | | else { // check if all keys are numeric |
| | | $isnum = true; |
| | | foreach ($var as $key => $value) { |
| | | foreach (array_keys($var) as $key) { |
| | | if (!is_numeric($key)) { |
| | | $isnum = false; |
| | | break; |
| | |
| | | */ |
| | | function exec_sql($sql, $DB) |
| | | { |
| | | $sql = $this->fix_table_names($sql, $DB); |
| | | $buff = ''; |
| | | foreach (explode("\n", $sql) as $line) { |
| | | if (preg_match('/^--/', $line) || trim($line) == '') |
| | |
| | | |
| | | |
| | | /** |
| | | * Parse SQL file and fix table names according to db_prefix |
| | | * Note: This need to be a complete database initial file |
| | | */ |
| | | private function fix_table_names($sql, $DB) |
| | | { |
| | | if (empty($this->config['db_prefix'])) { |
| | | return $sql; |
| | | } |
| | | |
| | | // replace table names |
| | | if (preg_match_all('/CREATE TABLE (\[dbo\]\.|IF NOT EXISTS )?[`"\[\]]*([^`"\[\] \r\n]+)/i', $sql, $matches)) { |
| | | foreach ($matches[2] as $table) { |
| | | $real_table = $this->config['db_prefix'] . $table; |
| | | $sql = preg_replace("/([^a-zA-Z0-9_])$table([^a-zA-Z0-9_])/", "\\1$real_table\\2", $sql); |
| | | } |
| | | } |
| | | // replace sequence names |
| | | if ($DB->db_provider == 'postgres' && preg_match_all('/CREATE SEQUENCE (IF NOT EXISTS )?"?([^" \n\r]+)/i', $sql, $matches)) { |
| | | foreach ($matches[2] as $sequence) { |
| | | $real_sequence = $this->config['db_prefix'] . $sequence; |
| | | $sql = preg_replace("/([^a-zA-Z0-9_])$sequence([^a-zA-Z0-9_])/", "\\1$real_sequence\\2", $sql); |
| | | } |
| | | } |
| | | |
| | | return $sql; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Handler for Roundcube errors |
| | | */ |
| | | function raise_error($p) |