thomascube
2006-08-04 fa4cd20fb14c087c80e6a9cde11df17d46e07566
Several bugfixes; see CHANGELOG for details

6 files modified
128 ■■■■■ changed files
CHANGELOG 9 ●●●●● patch | view | raw | blame | history
config/main.inc.php.dist 3 ●●●● patch | view | raw | blame | history
program/include/main.inc 8 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap.inc 97 ●●●●● patch | view | raw | blame | history
program/js/app.js 9 ●●●●● patch | view | raw | blame | history
program/steps/settings/save_identity.inc 2 ●●● patch | view | raw | blame | history
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)
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
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']);
@@ -511,7 +511,9 @@
    $_SESSION['password']  = encrypt_passwd($pass);
    // force reloading complete list of subscribed mailboxes    
    rcmail_set_imap_prop();
    $IMAP->clear_cache('mailboxes');
    $IMAP->create_default_folders();
    return TRUE;
    }
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;
@@ -1239,18 +1242,20 @@
    $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;
@@ -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') 
@@ -1853,7 +1882,7 @@
      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;
program/js/app.js
@@ -3213,6 +3213,15 @@
        }
      }
    
    // 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;
    };
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');