thomascube
2008-12-24 230f944bf62f141f47c021dbfe6cc3d07b74a76d
Allow empty strings for imap_root config parameter (was changed in r2143) to remain backward compatible but cache imap root and delimiter in session

4 files modified
50 ■■■■■ changed files
UPGRADING 2 ●●●●● patch | view | raw | blame | history
config/main.inc.php.dist 3 ●●●● patch | view | raw | blame | history
program/include/rcmail.php 22 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap.php 23 ●●●● patch | view | raw | blame | history
UPGRADING
@@ -18,8 +18,6 @@
   open http://url-to-roundcube/installer/ in a browser. To enable
   the latter one, you have to temporary set 'enable_installer' to true
   in your local config/main.inc.php file.
   WARNING: If you don't know what an "IMAP root directory" is,
   set the imap_root option to NULL
3. Let the update script/installer check your configuration and
   update your config files as suggested by the updater.
4. If suggested by the update script, run all commands in
config/main.inc.php.dist
@@ -62,8 +62,7 @@
$rcmail_config['imap_auth_type'] = null;
// If you know your imap's root directory and its folder delimiter,
// you can specify them here. Otherwise they will be determined
// during every imap connection.
// you can specify them here. Otherwise they will be determined automatically.
$rcmail_config['imap_root'] = null;
$rcmail_config['imap_delimiter'] = null;
program/include/rcmail.php
@@ -352,6 +352,20 @@
    // set pagesize from config
    $this->imap->set_pagesize($this->config->get('pagesize', 50));
    // Setting root and delimiter before iil_Connect can save time detecting them
    // using NAMESPACE and LIST
    $options = array(
      'imap' => $this->config->get('imap_auth_type', 'check'),
      'delimiter' => isset($_SESSION['imap_delimiter']) ? $_SESSION['imap_delimiter'] : $this->config->get('imap_delimiter'),
    );
    if (isset($_SESSION['imap_root']))
      $options['rootdir'] = $_SESSION['imap_root'];
    else if ($imap_root = $this->config->get('imap_root'))
      $options['rootdir'] = $imap_root;
    $this->imap->set_options($options);
  
    // set global object for backward compatibility
    $GLOBALS['IMAP'] = $this->imap;
@@ -371,7 +385,7 @@
    $conn = false;
    
    if ($_SESSION['imap_host'] && !$this->imap->conn) {
      if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'], rcmail::get_instance()->config->get('imap_auth_type', 'check')))) {
      if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']))) {
        if ($this->output)
          $this->output->show_message($this->imap->error_code == -1 ? 'imaperror' : 'sessionerror', 'error');
      }
@@ -452,7 +466,7 @@
      $username = $user->data['username'];
    // exit if IMAP login failed
    if (!($imap_login  = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl, $config['imap_auth_type'])))
    if (!($imap_login  = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl)))
      return false;
    // user already registered -> update user's record
@@ -524,6 +538,10 @@
    if (isset($_SESSION['page'])) {
      $this->imap->set_page($_SESSION['page']);
    }
    // cache IMAP root and delimiter in session for performance reasons
    $_SESSION['imap_root'] = $this->imap->root_dir;
    $_SESSION['imap_delimiter'] = $this->imap->delimiter;
  }
program/include/rcube_imap.php
@@ -66,6 +66,7 @@
  var $search_sort_field = '';  
  var $debug_level = 1;
  var $error_code = 0;
  var $options = array('imap' => 'check');
  /**
@@ -90,7 +91,7 @@
   * @return boolean  TRUE on success, FALSE on failure
   * @access public
   */
  function connect($host, $user, $pass, $port=143, $use_ssl=null, $auth_type=null)
  function connect($host, $user, $pass, $port=143, $use_ssl=null)
    {
    global $ICL_SSL, $ICL_PORT, $IMAP_USE_INTERNAL_DATE;
    
@@ -107,17 +108,7 @@
    $ICL_PORT = $port;
    $IMAP_USE_INTERNAL_DATE = false;
    // set connection options
    $options['imap'] = $auth_type ? $auth_type : 'check';
    // Setting root and delimiter before iil_Connect can save time detecting them
    // using NAMESPACE and LIST
    if (is_string($imap_root = rcmail::get_instance()->config->get('imap_root')))
        $options['rootdir'] = $imap_root;
    if($imap_delimiter = rcmail::get_instance()->config->get('imap_delimiter'))
        $options['delimiter'] = $imap_delimiter;
    $this->conn = iil_Connect($host, $user, $pass, $options);
    $this->conn = iil_Connect($host, $user, $pass, $this->options);
    $this->host = $host;
    $this->user = $user;
    $this->pass = $pass;
@@ -182,6 +173,13 @@
      iil_C_Select($this->conn, $this->mailbox);
    }
  /**
   * Set options to be used in iil_Connect()
   */
  function set_options($opt)
  {
    $this->options = array_merge((array)$opt, $this->options);
  }
  /**
   * Set a root folder for the IMAP connection.
@@ -198,6 +196,7 @@
      $root = substr($root, 0, -1);
    $this->root_dir = $root;
    $this->options['rootdir'] = $root;
    
    if (empty($this->delimiter))
      $this->get_hierarchy_delimiter();