diff options
author | thomascube <thomas@roundcube.net> | 2006-08-04 12:10:34 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2006-08-04 12:10:34 +0000 |
commit | fa4cd20fb14c087c80e6a9cde11df17d46e07566 (patch) | |
tree | 302691dc640112ce395f0bfd8522290504727cb2 /program/include | |
parent | c4e7e4f8221f7eb229c1186729424e9ce6ccee16 (diff) |
Several bugfixes; see CHANGELOG for details
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/main.inc | 10 | ||||
-rw-r--r-- | program/include/rcube_imap.inc | 105 |
2 files changed, 73 insertions, 42 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index 48e485ce2..efac8b2d2 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -205,9 +205,6 @@ function rcmail_imap_init($connect=FALSE) if ($CONFIG['enable_caching']===TRUE) $IMAP->set_caching(TRUE); - if (is_array($CONFIG['default_imap_folders'])) - $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']); - // set pagesize from config if (isset($CONFIG['pagesize'])) $IMAP->set_pagesize($CONFIG['pagesize']); @@ -224,6 +221,9 @@ function rcmail_set_imap_prop() if (!empty($CONFIG['imap_root'])) $IMAP->set_rootdir($CONFIG['imap_root']); + if (is_array($CONFIG['default_imap_folders'])) + $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']); + if (!empty($_SESSION['mbox'])) $IMAP->set_mailbox($_SESSION['mbox']); if (isset($_SESSION['page'])) @@ -510,8 +510,10 @@ function rcmail_login($user, $pass, $host=NULL) $_SESSION['user_lang'] = $sess_user_lang; $_SESSION['password'] = encrypt_passwd($pass); - // force reloading complete list of subscribed mailboxes + // force reloading complete list of subscribed mailboxes + rcmail_set_imap_prop(); $IMAP->clear_cache('mailboxes'); + $IMAP->create_default_folders(); return TRUE; } diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc index b37425769..be89bd6b1 100644 --- a/program/include/rcube_imap.inc +++ b/program/include/rcube_imap.inc @@ -36,7 +36,7 @@ require_once('lib/utf7.inc'); * * @package RoundCube Webmail * @author Thomas Bruederli <roundcube@gmail.com> - * @version 1.30 + * @version 1.31 * @link http://ilohamail.org */ class rcube_imap @@ -52,7 +52,8 @@ class rcube_imap var $sort_order = 'DESC'; var $delimiter = NULL; var $caching_enabled = FALSE; - var $default_folders = array('inbox', 'drafts', 'sent', 'junk', 'trash'); + var $default_folders = array('INBOX'); + var $default_folders_lc = array('inbox'); var $cache = array(); var $cache_keys = array(); var $cache_changes = array(); @@ -208,15 +209,16 @@ class rcube_imap { if (is_array($arr)) { - $this->default_folders = array(); - - // add mailbox names lower case - foreach ($arr as $mbox_row) - $this->default_folders[] = strtolower($mbox_row); - + $this->default_folders = $arr; + $this->default_folders_lc = array(); + // add inbox if not included - if (!in_array('inbox', $this->default_folders)) - array_unshift($arr, 'inbox'); + if (!in_array_nocase('INBOX', $this->default_folders)) + array_unshift($this->default_folders, 'INBOX'); + + // create a second list with lower cased names + foreach ($this->default_folders as $mbox) + $this->default_folders_lc[] = strtolower($mbox); } } @@ -333,6 +335,10 @@ class rcube_imap $a_out[] = $name; } + // INBOX should always be available + if (!in_array_nocase('INBOX', $a_out)) + array_unshift($a_out, 'INBOX'); + // sort mailboxes $a_out = $this->_sort_mailbox_list($a_out); @@ -362,20 +368,6 @@ class rcube_imap if (!is_array($a_folders) || !sizeof($a_folders)) $a_folders = array(); - // create Default folders if they do not exist - global $CONFIG; - foreach ($CONFIG['default_imap_folders'] as $folder) - { - if (!in_array_nocase($folder, $a_folders)) - { - $this->create_mailbox($folder, TRUE); - $this->subscribe($folder); - } - } - - $a_folders = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox($root), $filter); - $a_mailbox_cache = array(); - // write mailboxlist to cache $this->update_cache('mailboxes', $a_folders); @@ -1155,7 +1147,12 @@ class rcube_imap * --------------------------------*/ - // return an array with all folders available in IMAP server + /** + * Get a list of all folders available on the IMAP server + * + * @param string IMAP root dir + * @return array Inbdexed array with folder names + */ function list_unsubscribed($root='') { static $sa_unsubscribed; @@ -1197,7 +1194,9 @@ class rcube_imap } - // subscribe to a specific mailbox(es) + /** + * subscribe to a specific mailbox(es) + */ function subscribe($mbox_name, $mode='subscribe') { if (is_array($mbox_name)) @@ -1210,7 +1209,9 @@ class rcube_imap } - // unsubscribe mailboxes + /** + * unsubscribe mailboxes + */ function unsubscribe($mbox_name) { if (is_array($mbox_name)) @@ -1223,7 +1224,9 @@ class rcube_imap } - // create a new mailbox on the server and register it in local cache + /** + * create a new mailbox on the server and register it in local cache + */ function create_mailbox($name, $subscribe=FALSE) { $result = FALSE; @@ -1238,19 +1241,21 @@ class rcube_imap $abs_name = $this->_mod_mailbox($name_enc); $a_mailbox_cache = $this->get_cache('mailboxes'); - - if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array($abs_name, $a_mailbox_cache))) + + if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array_nocase($abs_name, $a_mailbox_cache))) $result = iil_C_CreateFolder($this->conn, $abs_name); - // update mailboxlist cache - if ($result && $subscribe) + // try to subscribe it + if ($subscribe) $this->subscribe($name_enc); return $result ? $name : FALSE; } - // set a new name to an existing mailbox + /** + * set a new name to an existing mailbox + */ function rename_mailbox($mbox_name, $new_name) { $result = FALSE; @@ -1279,7 +1284,9 @@ class rcube_imap } - // remove mailboxes from server + /** + * remove mailboxes from server + */ function delete_mailbox($mbox_name) { $deleted = FALSE; @@ -1296,7 +1303,7 @@ class rcube_imap // unsubscribe mailbox before deleting iil_C_UnSubscribe($this->conn, $mailbox); - + // send delete command to server $result = iil_C_DeleteFolder($this->conn, $mailbox); if ($result>=0) @@ -1314,6 +1321,28 @@ class rcube_imap } + /** + * Create all folders specified as default + */ + function create_default_folders() + { + $a_folders = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox(''), '*'); + $a_subscribed = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox(''), '*'); + + // create default folders if they do not exist + foreach ($this->default_folders as $folder) + { + $abs_name = $this->_mod_mailbox($folder); + if (!in_array_nocase($abs_name, $a_subscribed)) + { + if (!in_array_nocase($abs_name, $a_folders)) + $this->create_mailbox($folder, TRUE); + else + $this->subscribe($folder); + } + } + } + /* -------------------------------- @@ -1830,7 +1859,7 @@ class rcube_imap function _mod_mailbox($mbox_name, $mode='in') { - if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || ($mbox_name == 'INBOX' && $mode == 'in')) + if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || $mbox_name == 'INBOX') return $mbox_name; if (!empty($this->root_dir) && $mode=='in') @@ -1852,8 +1881,8 @@ class rcube_imap { if ($folder{0}=='.') continue; - - if (($p = array_search(strtolower($folder), $this->default_folders))!==FALSE) + + if (($p = array_search(strtolower($folder), $this->default_folders_lc))!==FALSE) $a_defaults[$p] = $folder; else $a_out[] = $folder; |