diff options
Diffstat (limited to 'program')
-rw-r--r-- | program/include/main.inc | 10 | ||||
-rw-r--r-- | program/include/rcube_imap.inc | 105 | ||||
-rw-r--r-- | program/js/app.js | 9 | ||||
-rw-r--r-- | program/steps/settings/save_identity.inc | 2 |
4 files changed, 83 insertions, 43 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; diff --git a/program/js/app.js b/program/js/app.js index 734241465..3c9efb886 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3212,6 +3212,15 @@ function rcube_webmail() this.set_classname(mbox_li, 'selected', true); } } + + // also update mailbox name in window title + if (document.title) + { + var doc_title = String(document.title); + var reg = new RegExp(this.env.mailbox.toLowerCase(), 'i'); + if (this.env.mailbox && doc_title.match(reg)) + document.title = doc_title.replace(reg, mbox).replace(/^\([0-9]+\)\s+/i, ''); + } this.env.mailbox = mbox; }; diff --git a/program/steps/settings/save_identity.inc b/program/steps/settings/save_identity.inc index f099ea5f7..9df6c61cb 100644 --- a/program/steps/settings/save_identity.inc +++ b/program/steps/settings/save_identity.inc @@ -61,7 +61,7 @@ if ($_POST['_iid']) $updated = $DB->affected_rows(); } - if ($updated) + if ($updated && !empty($_POST['_standard'])) { show_message('successfullysaved', 'confirmation'); |