From a894ba5029a09fb9d0453b5cf9c944ce313f8a48 Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Thu, 29 Jun 2006 19:41:40 -0400
Subject: [PATCH] Removeable attachments, Auto-default folder creation, bug fixes

---
 program/include/rcube_imap.inc |   81 +++++++++++++++++++++++++++++++---------
 1 files changed, 63 insertions(+), 18 deletions(-)

diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index e579c88..d825a35 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.22
+ * @version    1.26
  * @link       http://ilohamail.org
  */
 class rcube_imap
@@ -362,13 +362,18 @@
     if (!is_array($a_folders) || !sizeof($a_folders))
       $a_folders = array();
 
-    // create INBOX if it does not exist
-    if (!in_array_nocase('INBOX', $a_folders))
+    // create Default folders if they do not exist
+    global $CONFIG;
+    foreach ($CONFIG['default_imap_folders'] as $folder)
       {
-      $this->create_mailbox('INBOX', TRUE);
-      array_unshift($a_folders, 'INBOX');
+      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
@@ -989,8 +994,9 @@
 
 
   // append a mail message (source) to a specific mailbox
-  function save_message($mbox_name, $message)
+  function save_message($mbox_name, &$message)
     {
+    $mbox_name = stripslashes($mbox_name);
     $mailbox = $this->_mod_mailbox($mbox_name);
 
     // make sure mailbox exists
@@ -1010,6 +1016,8 @@
   // move a message from one mailbox to another
   function move_message($uids, $to_mbox, $from_mbox='')
     {
+    $to_mbox = stripslashes($to_mbox);
+    $from_mbox = stripslashes($from_mbox);
     $to_mbox = $this->_mod_mailbox($to_mbox);
     $from_mbox = $from_mbox ? $this->_mod_mailbox($from_mbox) : $this->mailbox;
 
@@ -1067,6 +1075,7 @@
   // mark messages as deleted and expunge mailbox
   function delete_message($uids, $mbox_name='')
     {
+    $mbox_name = stripslashes($mbox_name);
     $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
 
     // convert the list of uids to array
@@ -1114,6 +1123,7 @@
   // clear all messages in a specific mailbox
   function clear_mailbox($mbox_name=NULL)
     {
+    $mbox_name = stripslashes($mbox_name);
     $mailbox = !empty($mbox_name) ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
     $msg_count = $this->_messagecount($mailbox, 'ALL');
     
@@ -1140,6 +1150,7 @@
   // send IMAP expunge command and clear cache
   function expunge($mbox_name='', $clear_cache=TRUE)
     {
+    $mbox_name = stripslashes($mbox_name);
     $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
     return $this->_expunge($mailbox, $clear_cache);
     }
@@ -1261,9 +1272,30 @@
 
 
   // set a new name to an existing mailbox
-  function rename_mailbox($mbox_name, $new_name)
+  function rename_mailbox($mbox_name, $new_name, $subscribe=TRUE)
     {
-    // not implemented yet
+    $result = FALSE;
+
+    // replace backslashes
+    $name = preg_replace('/[\\\]+/', '-', $new_name);
+
+    $name_enc = UTF7EncodeString($new_name);
+
+    // reduce mailbox name to 100 chars
+    $name_enc = substr($name_enc, 0, 100);
+
+    $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)))
+      $result = iil_C_RenameFolder($this->conn, $mbox_name, $abs_name);
+
+    // update mailboxlist cache
+    if ($result && $subscribe)
+      $this->unsubscribe($mbox_name);
+      $this->subscribe($name_enc);
+
+    return $result ? $name : FALSE;
     }
 
 
@@ -1693,8 +1725,13 @@
     
     return $str;
     }
-    
-    
+
+
+  /**
+   * Decode a mime-encoded string to internal charset
+   *
+   * @access static
+   */
   function decode_mime_string($input)
     {
     $out = '';
@@ -1716,11 +1753,17 @@
 
       return $out;
       }
-    else
-      return $input;
+    
+    // no encoding information, defaults to what is specified in the class header
+    return rcube_charset_convert($input, 'ISO-8859-1');
     }
 
 
+  /**
+   * Decode a part of a mime-encoded string
+   *
+   * @access static
+   */
   function _decode_mime_string_part($str)
     {
     $a = explode('?', $str);
@@ -1793,8 +1836,10 @@
     if (is_array($ctype_param) && !empty($ctype_param['charset']))
       return rcube_charset_convert($body, $ctype_param['charset']);
 
-    return $body;
+    // defaults to what is specified in the class header
+    return rcube_charset_convert($body,  'ISO-8859-1');
     }
+
 
 
 
@@ -1840,14 +1885,14 @@
     return array_merge($a_defaults, $a_out);
     }
 
-  function get_id($uid) 
+  function get_id($uid, $mbox_name=NULL) 
     {
-      return $this->_uid2id($uid);
+      return $this->_uid2id($uid, $mbox_name);
     }
   
-  function get_uid($id)
+  function get_uid($id,$mbox_name=NULL)
     {
-      return $this->_id2uid($id);
+      return $this->_id2uid($id, $mbox_name);
     }
 
   function _uid2id($uid, $mbox_name=NULL)
@@ -2086,4 +2131,4 @@
   return trim($output);
   }
 
-?>
\ No newline at end of file
+?>

--
Gitblit v1.9.1