From fa4cd20fb14c087c80e6a9cde11df17d46e07566 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 04 Aug 2006 08:10:34 -0400
Subject: [PATCH] Several bugfixes; see CHANGELOG for details

---
 CHANGELOG                                |    9 +++
 program/include/main.inc                 |   10 ++-
 program/steps/settings/save_identity.inc |    2 
 config/main.inc.php.dist                 |    3 
 program/js/app.js                        |    9 +++
 program/include/rcube_imap.inc           |  105 ++++++++++++++++++++++------------
 6 files changed, 94 insertions(+), 44 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index bfca82e..190949e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,15 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
+2006/08/04 (thomasb)
+----------
+- Fixed Bug in saving identities (Ticket #1483915)
+- Set folder name in window title (Bug #1483919)
+- Don't add imap_root to INBOX path (Bug #1483816)
+- Attempt to create default folders only after login
+- Avoid usage of $CONFIG in rcube_imap class
+
+
 2006/07/30 (thomasb)
 ----------
 - Alter links in HTML messages (Bug #1326402)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index f679d10..2f79bd8 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -137,7 +137,8 @@
 // leave blank if they should be deleted directly
 $rcmail_config['trash_mbox'] = 'Trash';
 
-// display these folders separately in the mailbox list
+// display these folders separately in the mailbox list.
+// these folders will automatically be created if they do not exist
 $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
 
 // protect the default folders from renames, deletes, and subscription changes
diff --git a/program/include/main.inc b/program/include/main.inc
index 48e485c..efac8b2 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -205,9 +205,6 @@
   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']);
@@ -223,6 +220,9 @@
   // set root dir from config
   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']);
@@ -510,8 +510,10 @@
     $_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 b374257..be89bd6 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -36,7 +36,7 @@
  *
  * @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 @@
   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 @@
     {
     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 @@
         $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);
 
@@ -361,20 +367,6 @@
     
     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 @@
    * --------------------------------*/
 
 
-  // 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 @@
     }
 
 
-  // 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 @@
     }
 
 
-  // unsubscribe mailboxes
+  /**
+   * unsubscribe mailboxes
+   */
   function unsubscribe($mbox_name)
     {
     if (is_array($mbox_name))
@@ -1223,7 +1224,9 @@
     }
 
 
-  // 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 @@
 
     $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 @@
     }
 
 
-  // remove mailboxes from server
+  /**
+   * remove mailboxes from server
+   */
   function delete_mailbox($mbox_name)
     {
     $deleted = FALSE;
@@ -1296,7 +1303,7 @@
 
         // 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)
@@ -1313,6 +1320,28 @@
     return $deleted;
     }
 
+
+  /**
+   * 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 @@
 
   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 @@
       {
       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 7342414..3c9efb8 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -3212,6 +3212,15 @@
         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 f099ea5..9df6c61 100644
--- a/program/steps/settings/save_identity.inc
+++ b/program/steps/settings/save_identity.inc
@@ -61,7 +61,7 @@
     $updated = $DB->affected_rows();
     }
        
-  if ($updated)
+  if ($updated && !empty($_POST['_standard']))
     {
     show_message('successfullysaved', 'confirmation');
 

--
Gitblit v1.9.1