| | |
| | | class rcube_install |
| | | { |
| | | var $step; |
| | | var $is_post = false; |
| | | var $failures = 0; |
| | | var $config = array(); |
| | | var $configured = false; |
| | | var $last_error = null; |
| | | var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])'; |
| | | var $config_props = array(); |
| | | |
| | | /** |
| | | * Constructor |
| | |
| | | function rcube_install() |
| | | { |
| | | $this->step = intval($_REQUEST['_step']); |
| | | $this->is_post = $_SERVER['REQUEST_METHOD'] == 'POST'; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | function _load_config($suffix) |
| | | { |
| | | include '../config/main.inc' . $suffix; |
| | | @include '../config/main.inc' . $suffix; |
| | | if (is_array($rcmail_config)) { |
| | | $this->config += $rcmail_config; |
| | | } |
| | |
| | | */ |
| | | function getprop($name, $default = '') |
| | | { |
| | | $value = isset($_REQUEST["_$name"]) ? $_REQUEST["_$name"] : $this->config[$name]; |
| | | $value = $this->config[$name]; |
| | | |
| | | if ($name == 'des_key' && !isset($_REQUEST["_$name"])) |
| | | $value = self::random_key(24); |
| | | if ($name == 'des_key' && !$this->configured && !isset($_REQUEST["_$name"])) |
| | | $value = rcube_install::random_key(24); |
| | | |
| | | return $value !== null && $value !== '' ? $value : $default; |
| | | } |
| | |
| | | |
| | | if (!$out) |
| | | return '[Warning: could not read the template file]'; |
| | | |
| | | |
| | | foreach ($this->config as $prop => $default) { |
| | | $value = $_POST["_$prop"] ? $_POST["_$prop"] : $default; |
| | | $value = (isset($_POST["_$prop"]) || $this->config_props[$prop]) ? $_POST["_$prop"] : $default; |
| | | |
| | | // convert some form data |
| | | if ($prop == 'debug_level' && is_array($value)) { |
| | | if ($prop == 'debug_level') { |
| | | $val = 0; |
| | | foreach ($value as $i => $dbgval) |
| | | $val += intval($dbgval); |
| | | $value = $val; |
| | | if (isset($value)) |
| | | foreach ($value as $dbgval) |
| | | $val += intval($dbgval); |
| | | $value = $val; |
| | | } |
| | | else if ($prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { |
| | | $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], $_POST['_dbuser'], $_POST['_dbpass'], $_POST['_dbhost'], $_POST['_dbname']); |
| | | else if ($which == 'db' && $prop == 'db_dsnw' && !empty($_POST['_dbtype'])) { |
| | | if ($_POST['_dbtype'] == 'sqlite') |
| | | $value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']); |
| | | else |
| | | $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], |
| | | rawurlencode($_POST['_dbuser']), rawurlencode($_POST['_dbpass']), |
| | | $_POST['_dbhost'], $_POST['_dbname']); |
| | | } |
| | | else if ($prop == 'smtp_auth_type' && $value == '0') { |
| | | $value = ''; |
| | | } |
| | | else if ($prop == 'default_host' && is_array($value)) { |
| | | $value = self::_clean_array($value); |
| | | $value = rcube_install::_clean_array($value); |
| | | if (count($value) <= 1) |
| | | $value = $value[0]; |
| | | } |
| | | else if ($prop == 'pagesize') { |
| | | $value = max(2, intval($value)); |
| | | } |
| | | else if ($prop == 'smtp_user' && !empty($_POST['_smtp_user_u'])) { |
| | | $value = '%u'; |
| | |
| | | $value = '%p'; |
| | | } |
| | | else if (is_bool($default)) { |
| | | $value = is_numeric($value) ? (bool)$value : $value; |
| | | $value = (bool)$value; |
| | | } |
| | | else if (is_numeric($value)) { |
| | | $value = intval($value); |
| | | } |
| | | |
| | | // skip this property |
| | | if ($value == $default) |
| | | continue; |
| | | |
| | | |
| | | // save change |
| | | $this->config[$prop] = $value; |
| | | |
| | | // replace the matching line in config file |
| | | $out = preg_replace( |
| | | '/(\$rcmail_config\[\''.preg_quote($prop).'\'\])\s+=\s+(.+);/Uie', |
| | | "'\\1 = ' . var_export(\$value, true) . ';'", |
| | | $out); |
| | | } |
| | | |
| | | return $out; |
| | | |
| | | return trim($out); |
| | | } |
| | | |
| | | |
| | |
| | | function get_error() |
| | | { |
| | | return $this->last_error['message']; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Return a list with all imap hosts configured |
| | | * |
| | | * @return array Clean list with imap hosts |
| | | */ |
| | | function get_hostlist() |
| | | { |
| | | $default_hosts = (array)$this->getprop('default_host'); |
| | | $out = array(); |
| | | |
| | | foreach ($default_hosts as $key => $name) { |
| | | if (!empty($name)) |
| | | $out[] = is_numeric($key) ? $name : $key; |
| | | } |
| | | |
| | | return $out; |
| | | } |
| | | |
| | | |
| | |
| | | if (eregi(';$', trim($line))) { |
| | | $DB->query($buff); |
| | | $buff = ''; |
| | | if ($this->get_error()) |
| | | break; |
| | | } |
| | | } |
| | | } |