From ce248f83e52092d264de23a0bd51a0233d6498e7 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 14 Nov 2012 07:52:23 -0500
Subject: [PATCH] Remove useless code

---
 program/include/rcmail.php |  121 ++++++++++++++++++++--------------------
 1 files changed, 61 insertions(+), 60 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 63ae8e2..3728e5d 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -157,21 +157,23 @@
       $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');
+    }
   }
 
 
   /**
    * Return instance of the internal address book class
    *
-   * @param string  Address book identifier
+   * @param string  Address book identifier (-1 for default addressbook)
    * @param boolean True if the address book needs to be writeable
    *
    * @return rcube_contacts Address book object
@@ -180,17 +182,17 @@
   {
     $contacts    = null;
     $ldap_config = (array)$this->config->get('ldap_public');
-    $abook_type  = strtolower($this->config->get('address_book_type'));
 
     // 'sql' is the alias for '0' used by autocomplete
     if ($id == 'sql')
-        $id = '0';
+      $id = '0';
+    else if ($id == -1) {
+      $id = $this->config->get('default_addressbook');
+      $default = true;
+    }
 
     // use existing instance
-    if (isset($this->address_books[$id]) && is_object($this->address_books[$id])
-      && is_a($this->address_books[$id], 'rcube_addressbook')
-      && (!$writeable || !$this->address_books[$id]->readonly)
-    ) {
+    if (isset($this->address_books[$id]) && ($this->address_books[$id] instanceof rcube_addressbook)) {
       $contacts = $this->address_books[$id];
     }
     else if ($id && $ldap_config[$id]) {
@@ -206,14 +208,16 @@
       if ($plugin['instance'] instanceof rcube_addressbook) {
         $contacts = $plugin['instance'];
       }
-      // get first source from the list
-      else if (!$id) {
-        $source = reset($this->get_address_sources($writeable));
-        if (!empty($source)) {
-          $contacts = $this->get_address_book($source['id']);
-          if ($contacts)
-            $id = $source['id'];
-        }
+    }
+
+    // Get first addressbook from the list if configured default doesn't exist
+    // This can happen when user deleted the addressbook (e.g. Kolab folder)
+    if (!$contacts && (!$id || $default)) {
+      $source = reset($this->get_address_sources($writeable));
+      if (!empty($source)) {
+        $contacts = $this->get_address_book($source['id']);
+        if ($contacts)
+          $id = $source['id'];
       }
     }
 
@@ -223,6 +227,10 @@
         'file' => __FILE__, 'line' => __LINE__,
         'message' => "Addressbook source ($id) not found!"),
         true, true);
+    }
+
+    if ($writeable && $contacts->readonly) {
+      return null;
     }
 
     // set configured sort order
@@ -250,8 +258,8 @@
     $autocomplete = (array) $this->config->get('autocomplete_addressbooks');
     $list = array();
 
-    // We are using the DB address book
-    if ($abook_type != 'ldap') {
+    // We are using the DB address book or a plugin address book
+    if ($abook_type != 'ldap' && $abook_type != '') {
       if (!isset($this->address_books['0']))
         $this->address_books['0'] = new rcube_contacts($this->db, $this->get_user_id());
       $list['0'] = array(
@@ -273,7 +281,7 @@
         }
         $list[$id] = array(
           'id'       => $id,
-          'name'     => $prop['name'],
+          'name'     => html::quote($prop['name']),
           'groups'   => is_array($prop['groups']),
           'readonly' => !$prop['writable'],
           'hidden'   => $prop['hidden'],
@@ -300,7 +308,7 @@
 
   /**
    * Init output object for GUI and add common scripts.
-   * This will instantiate a rcmail_template object and set
+   * This will instantiate a rcube_output_html object and set
    * environment vars according to the current session and configuration
    *
    * @param boolean True if this request is loaded in a (i)frame
@@ -444,10 +452,21 @@
         $username .= '@'.rcube_utils::parse_host($config['username_domain'], $host);
     }
 
+    if (!isset($config['login_lc'])) {
+      $config['login_lc'] = 2; // default
+    }
+
     // 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
@@ -457,36 +476,18 @@
 
     // Here we need IDNA ASCII
     // Only rcube_contacts class is using domain names in Unicode
-    $host = rcube_utils::idn_to_ascii($host);
-    if (strpos($username, '@')) {
-      // lowercase domain name
-      list($local, $domain) = explode('@', $username);
-      $username = $local . '@' . mb_strtolower($domain);
-      $username = rcube_utils::idn_to_ascii($username);
-    }
+    $host     = rcube_utils::idn_to_ascii($host);
+    $username = rcube_utils::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'];
+    }
 
     $storage = $this->get_storage();
 
     // try to log in
-    if (!($login = $storage->connect($host, $username, $pass, $port, $ssl))) {
-      // try with lowercase
-      $username_lc = mb_strtolower($username);
-      if ($username_lc != $username) {
-        // try to find user record again -> overwrite username
-        if (!$user && ($user = rcube_user::query($username_lc, $host)))
-          $username_lc = $user->data['username'];
-
-        if ($login = $storage->connect($host, $username_lc, $pass, $port, $ssl))
-          $username = $username_lc;
-      }
-    }
-
-    // exit if login failed
-    if (!$login) {
+    if (!$storage->connect($host, $username, $pass, $port, $ssl)) {
       return false;
     }
 
@@ -541,9 +542,7 @@
       $_SESSION['login_time']   = time();
 
       if (isset($_REQUEST['_timezone']) && $_REQUEST['_timezone'] != '_default_')
-        $_SESSION['timezone'] = floatval($_REQUEST['_timezone']);
-      if (isset($_REQUEST['_dstactive']) && $_REQUEST['_dstactive'] != '_default_')
-        $_SESSION['dst_active'] = intval($_REQUEST['_dstactive']);
+        $_SESSION['timezone'] = rcube_utils::get_input_value('_timezone', rcube_utils::INPUT_GPC);
 
       // force reloading complete list of subscribed mailboxes
       $storage->clear_cache('mailboxes', true);
@@ -720,8 +719,12 @@
    */
   public function url($p)
   {
-    if (!is_array($p))
+    if (!is_array($p)) {
+      if (strpos($p, 'http') === 0)
+        return $p;
+
       $p = array('_action' => @func_get_arg(0));
+    }
 
     $task = $p['_task'] ? $p['_task'] : ($p['task'] ? $p['task'] : $this->task);
     $p['_task'] = $task;
@@ -1194,7 +1197,7 @@
         }
         else {
             if (!empty($date)) {
-                $timestamp = rcube_strtotime($date);
+                $timestamp = rcube_utils::strtotime($date);
             }
 
             if (empty($timestamp)) {
@@ -1759,10 +1762,7 @@
         $err_code = $this->storage->get_error_code();
         $res_code = $this->storage->get_response_code();
 
-        if ($err_code < 0) {
-            $this->output->show_message('storageerror', 'error');
-        }
-        else if ($res_code == rcube_storage::NOPERM) {
+        if ($res_code == rcube_storage::NOPERM) {
             $this->output->show_message('errornoperm', 'error');
         }
         else if ($res_code == rcube_storage::READONLY) {
@@ -1776,6 +1776,9 @@
             else {
                 $this->output->show_message('servererrormsg', 'error', array('msg' => $err_str));
             }
+        }
+        else if ($err_code < 0) {
+            $this->output->show_message('storageerror', 'error');
         }
         else if ($fallback) {
             $this->output->show_message($fallback, 'error', $fallback_args);
@@ -2097,16 +2100,14 @@
 
             if (!$storage->connect($host, $user, $pass, $port, $ssl)) {
                 if (is_object($this->output)) {
-                    $error = $storage->get_error_code() == -1 ? 'storageerror' : 'sessionerror';
-                    $this->output->show_message($error, 'error');
+                    $this->output->show_message('storageerror', 'error');
                 }
             }
             else {
                 $this->set_storage_prop();
-                return $storage->is_connected();
             }
         }
 
-        return false;
+        return $storage->is_connected();
     }
 }

--
Gitblit v1.9.1