summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2006-08-04 12:10:34 +0000
committerthomascube <thomas@roundcube.net>2006-08-04 12:10:34 +0000
commitfa4cd20fb14c087c80e6a9cde11df17d46e07566 (patch)
tree302691dc640112ce395f0bfd8522290504727cb2 /program/include
parentc4e7e4f8221f7eb229c1186729424e9ce6ccee16 (diff)
Several bugfixes; see CHANGELOG for details
Diffstat (limited to 'program/include')
-rw-r--r--program/include/main.inc10
-rw-r--r--program/include/rcube_imap.inc105
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;