| | |
| | | $this->config->set_user_prefs((array)$this->user->get_prefs()); |
| | | } |
| | | |
| | | $_SESSION['language'] = $this->user->language = $this->language_prop($this->config->get('language', $_SESSION['language'])); |
| | | $lang = $this->language_prop($this->config->get('language', $_SESSION['language'])); |
| | | $_SESSION['language'] = $this->user->language = $lang; |
| | | |
| | | // set localization |
| | | setlocale(LC_ALL, $_SESSION['language'] . '.utf8', 'en_US.utf8'); |
| | | setlocale(LC_ALL, $lang . '.utf8', $lang . '.UTF-8', 'en_US.utf8', 'en_US.UTF-8'); |
| | | |
| | | // workaround for http://bugs.php.net/bug.php?id=18556 |
| | | if (in_array($_SESSION['language'], array('tr_TR', 'ku', 'az_AZ'))) |
| | | setlocale(LC_CTYPE, 'en_US' . '.utf8'); |
| | | if (in_array($lang, array('tr_TR', 'ku', 'az_AZ'))) { |
| | | setlocale(LC_CTYPE, 'en_US.utf8', 'en_US.UTF-8'); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | $this->memcache = new Memcache; |
| | | $this->mc_available = 0; |
| | | |
| | | // add alll configured hosts to pool |
| | | |
| | | // add all configured hosts to pool |
| | | $pconnect = $this->config->get('memcache_pconnect', true); |
| | | foreach ($this->config->get('memcache_hosts', array()) as $host) { |
| | | list($host, $port) = explode(':', $host); |
| | | if (!$port) $port = 11211; |
| | | if (substr($host, 0, 7) != 'unix://') { |
| | | list($host, $port) = explode(':', $host); |
| | | if (!$port) $port = 11211; |
| | | } |
| | | else { |
| | | $port = 0; |
| | | } |
| | | $this->mc_available += intval($this->memcache->addServer($host, $port, $pconnect, 1, 1, 15, false, array($this, 'memcache_failure'))); |
| | | } |
| | | |
| | | |
| | | // test connection and failover (will result in $this->mc_available == 0 on complete failure) |
| | | $this->memcache->increment('__CONNECTIONTEST__', 1); // NOP if key doesn't exist |
| | | |
| | |
| | | |
| | | return $this->memcache; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Callback for memcache failure |
| | | */ |
| | | public function memcache_failure($host, $port) |
| | | { |
| | | static $seen = array(); |
| | | |
| | | |
| | | // only report once |
| | | if (!$seen["$host:$port"]++) { |
| | | $this->mc_available--; |
| | |
| | | // Convert username to lowercase. If storage backend |
| | | // is case-insensitive we need to store always the same username (#1487113) |
| | | if ($config['login_lc']) { |
| | | $username = mb_strtolower($username); |
| | | if ($config['login_lc'] == 2 || $config['login_lc'] === true) { |
| | | $username = mb_strtolower($username); |
| | | } |
| | | else if (strpos($username, '@')) { |
| | | // lowercase domain name |
| | | list($local, $domain) = explode('@', $username); |
| | | $username = $local . '@' . mb_strtolower($domain); |
| | | } |
| | | } |
| | | |
| | | // try to resolve email address from virtuser table |
| | |
| | | |
| | | // Here we need IDNA ASCII |
| | | // Only rcube_contacts class is using domain names in Unicode |
| | | $host = rcube_idn_to_ascii($host); |
| | | if (strpos($username, '@')) { |
| | | // lowercase domain name |
| | | list($local, $domain) = explode('@', $username); |
| | | $username = $local . '@' . mb_strtolower($domain); |
| | | $username = rcube_idn_to_ascii($username); |
| | | } |
| | | $host = rcube_idn_to_ascii($host); |
| | | $username = rcube_idn_to_ascii($username); |
| | | |
| | | // user already registered -> overwrite username |
| | | if ($user = rcube_user::query($username, $host)) |
| | | if ($user = rcube_user::query($username, $host)) { |
| | | $username = $user->data['username']; |
| | | } |
| | | |
| | | if (!$this->storage) |
| | | $this->storage_init(); |