alecpl
2008-12-11 030c848b0d68321b711875886f90e680f232715b
- Performance: allow setting imap rootdir and delimiter before connect (#1485172)


5 files modified
71 ■■■■■ changed files
CHANGELOG 4 ●●●● patch | view | raw | blame | history
UPGRADING 1 ●●●● patch | view | raw | blame | history
config/main.inc.php.dist 9 ●●●●● patch | view | raw | blame | history
program/include/rcmail.php 4 ●●●● patch | view | raw | blame | history
program/lib/imap.inc 53 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,10 @@
CHANGELOG RoundCube Webmail
---------------------------
2008/12/11 (alec)
----------
- Performance: allow setting imap rootdir and delimiter before connect (#1485172)
2008/12/06 (alec)
----------
- Fix sorting of folders with more than 2 levels (#1485569)
UPGRADING
@@ -18,6 +18,7 @@
   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 is IMAP root directory, set 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
@@ -61,6 +61,12 @@
// Optional, defaults to "check"
$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.
$rcmail_config['imap_root'] = null;
$rcmail_config['imap_delimiter'] = null;
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
@@ -151,9 +157,6 @@
// use this name to compose page titles
$rcmail_config['product_name'] = 'RoundCube Webmail';
// only list folders within this path
$rcmail_config['imap_root'] = '';
// store draft message is this mailbox
// leave blank if draft messages should not be stored
program/include/rcmail.php
@@ -515,10 +515,6 @@
  {
    $this->imap->set_charset($this->config->get('default_charset', RCMAIL_CHARSET));
    // set root dir from config
    if ($imap_root = $this->config->get('imap_root')) {
      $this->imap->set_rootdir($imap_root);
    }
    if ($default_folders = $this->config->get('default_imap_folders')) {
      $this->imap->set_default_mailboxes($default_folders);
    }
program/lib/imap.inc
@@ -73,6 +73,8 @@
        - fix iil_C_FetchPartHeader() in some cases by use of iil_C_HandlePartBody()
        - allow iil_C_HandlePartBody() to fetch whole message
        - optimize iil_C_FetchHeaders() to use only one FETCH command
        - added 4th argument to iil_Connect()
        - allow setting rootdir and delimiter before connect
********************************************************/
@@ -196,7 +198,7 @@
}
function iil_PutLine($fp, $string, $endln=true) {
//      console('C: '. rtrim($string));
      console('C: '. rtrim($string));
        return fputs($fp, $string . ($endln ? "\r\n" : ''));
}
@@ -476,13 +478,14 @@
function iil_C_NameSpace(&$conn) {
    global $my_prefs;
    if (isset($my_prefs['rootdir']) && is_string($my_prefs['rootdir'])) {
            $conn->rootdir = $my_prefs['rootdir'];
        return true;
    }
    
    if (!iil_C_GetCapability($conn, 'NAMESPACE')) {
        return false;
    }
    if ($my_prefs["rootdir"]) {
        return true;
    }
    
    iil_PutLine($conn->fp, "ns1 NAMESPACE");
@@ -510,12 +513,13 @@
    
    $conn->rootdir       = $first_userspace[0];
    $conn->delimiter     = $first_userspace[1];
    $my_prefs["rootdir"] = substr($conn->rootdir, 0, -1);
    $my_prefs['rootdir'] = substr($conn->rootdir, 0, -1);
    $my_prefs['delimiter'] = $conn->delimiter;
    
    return true;
}
function iil_Connect($host, $user, $password) {
function iil_Connect($host, $user, $password, $options=null) {
    global $iil_error, $iil_errornum;
    global $ICL_SSL, $ICL_PORT;
    global $IMAP_NO_CACHE;
@@ -523,18 +527,23 @@
    
    $iil_error = '';
    $iil_errornum = 0;
    //set auth method
    $auth_method = 'plain';
    if (func_num_args() >= 4) {
        $auth_array = func_get_arg(3);
        if (is_array($auth_array)) {
            $auth_method = $auth_array['imap'];
            }
        if (empty($auth_method)) {
                $auth_method = "plain";
            }
    // set some imap options
    if (is_array($options)) {
        foreach($options as $optkey => $optval) {
            if ($optkey == 'imap') {
                $auth_method = $optval;
            } else if ($optkey == 'rootdir') {
                    $my_prefs['rootdir'] = $optval;
            } else if ($optkey == 'delimiter') {
                    $my_prefs['delimiter'] = $optval;
            }
        }
    }
    if (empty($auth_method))
            $auth_method = 'plain';
    $message = "INITIAL: $auth_method\n";
        
    $result = false;
@@ -2138,8 +2147,14 @@
 * @see iil_Connect()
 */
function iil_C_GetHierarchyDelimiter(&$conn) {
    global $my_prefs;
    if ($conn->delimiter) {
        return $conn->delimiter;
            return $conn->delimiter;
    }
    if (!empty($my_prefs['delimiter'])) {
            return ($conn->delimiter = $my_prefs['delimiter']);
    }
    
    $fp        = $conn->fp;