diff options
| author | alecpl <alec@alec.pl> | 2010-05-19 06:41:02 +0000 | 
|---|---|---|
| committer | alecpl <alec@alec.pl> | 2010-05-19 06:41:02 +0000 | 
| commit | c435173eb411b9fb6a5f7c17cd408fb6591df111 (patch) | |
| tree | 022869ee64cf21bfa6faaf3486ba0f6a46d42ea0 /program/include | |
| parent | 98ef63c106879af28d34aed19c3b57f3f5db6cab (diff) | |
- Fix handling errors of folder deletion (#1486705)
Diffstat (limited to 'program/include')
| -rw-r--r-- | program/include/rcube_imap.php | 300 | 
1 files changed, 150 insertions, 150 deletions
| diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 7b7a3cf6a..768e8337a 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -26,7 +26,7 @@   *   * @package    Mail   * @author     Thomas Bruederli <roundcube@gmail.com> - * @author     Aleksander Machniak <alec@alec.pl>  + * @author     Aleksander Machniak <alec@alec.pl>   * @version    2.0   */  class rcube_imap @@ -53,7 +53,7 @@ class rcube_imap      private $default_folders = array('INBOX');      private $icache = array();      private $cache = array(); -    private $cache_keys = array();   +    private $cache_keys = array();      private $cache_changes = array();      private $uid_id_map = array();      private $msg_headers = array(); @@ -108,7 +108,7 @@ class rcube_imap          do {              $data = rcmail::get_instance()->plugins->exec_hook('imap_connect',                  array('host' => $host, 'user' => $user, 'attempt' => ++$attempt)); -             +              if (!empty($data['pass']))                  $pass = $data['pass']; @@ -154,7 +154,7 @@ class rcube_imap       * @access public       */      function close() -    {     +    {          if ($this->conn && $this->conn->connected())              $this->conn->close();          $this->write_cache(); @@ -171,7 +171,7 @@ class rcube_imap      {          $this->close();          $this->connect($this->host, $this->user, $this->pass, $this->port, $this->ssl); -     +          // issue SELECT command to restore connection status          if ($this->mailbox)              $this->conn->select($this->mailbox); @@ -201,7 +201,7 @@ class rcube_imap          $this->root_dir = $root;          $this->options['rootdir'] = $root; -     +          if (empty($this->delimiter))              $this->get_hierarchy_delimiter();      } @@ -283,7 +283,7 @@ class rcube_imap      {          $this->page_size = (int)$size;      } -     +      /**       * Save a set of message ids for future message listing methods @@ -358,7 +358,7 @@ class rcube_imap      function set_threading($enable=false)      {          $this->threading = false; -     +          if ($enable) {              if ($this->get_capability('THREAD=REFS'))                  $this->threading = 'REFS'; @@ -444,9 +444,9 @@ class rcube_imap              else                  return count((array)$this->search_set);          } -     +          $a_mailbox_cache = $this->get_cache('messagecount'); -     +          // return cached value          if (!$force && is_array($a_mailbox_cache[$mailbox]) && isset($a_mailbox_cache[$mailbox][$mode]))              return $a_mailbox_cache[$mailbox][$mode]; @@ -480,7 +480,7 @@ class rcube_imap              $this->threading = false;              $index = $this->_search_index($mailbox, $search_str);              $this->threading = $threads; -       +              $count = is_array($index) ? count($index) : 0;              if ($mode == 'ALL' && $status) { @@ -519,13 +519,13 @@ class rcube_imap      {          if (!empty($this->icache['threads']))              return count($this->icache['threads']['tree']); -     +          list ($thread_tree, $msg_depth, $has_children) = $this->_fetch_threads($mailbox); -     +          $msg_count = count($msg_depth);  //    $this->update_thread_cache($mailbox, $thread_tree, $msg_depth, $has_children); -        return count($thread_tree);   +        return count($thread_tree);      } @@ -539,7 +539,7 @@ class rcube_imap       * @param   string   Sort order [ASC|DESC]       * @param   boolean  Number of slice items to extract from result array       * @return  array    Indexed array with message header objects -     * @access  public    +     * @access  public       */      function list_headers($mbox_name='', $page=NULL, $sort_field=NULL, $sort_order=NULL, $slice=0)      { @@ -654,14 +654,14 @@ class rcube_imap          // return empty array if no messages found          if (!is_array($a_msg_headers) || empty($a_msg_headers))              return array(); -     +          // use this class for message sorting          $sorter = new rcube_header_sorter();          $sorter->set_sequence_numbers($msg_index);          $sorter->sort_headers($a_msg_headers);          if ($this->sort_order == 'DESC') -            $a_msg_headers = array_reverse($a_msg_headers);	     +            $a_msg_headers = array_reverse($a_msg_headers);          return array_values($a_msg_headers);      } @@ -707,7 +707,7 @@ class rcube_imap              // get all threads              list ($thread_tree, $msg_depth, $has_children) = $this->conn->thread(                  $mailbox, $this->threading, $this->skip_deleted ? 'UNDELETED' : ''); -    +              // add to internal (fast) cache              $this->icache['threads'] = array();              $this->icache['threads']['tree'] = $thread_tree; @@ -756,7 +756,7 @@ class rcube_imap          // return empty array if no messages found          if (!is_array($a_msg_headers) || empty($a_msg_headers))              return array(); -     +          // use this class for message sorting          $sorter = new rcube_header_sorter();          $sorter->set_sequence_numbers($all_ids); @@ -825,7 +825,7 @@ class rcube_imap          // search set is threaded, we need a new one          if ($this->search_threads)              $this->search('', $this->search_string, $this->search_charset, $sort_field); -     +          $msgs = $this->search_set;          $a_msg_headers = array();          $page = $page ? $page : $this->list_page; @@ -909,7 +909,7 @@ class rcube_imap              else {                  // for small result set we can fetch all messages headers                  $this->_fetch_headers($mailbox, join(',', $msgs), $a_msg_headers, NULL); -     +                  // return empty array if no messages found                  if (!is_array($a_msg_headers) || empty($a_msg_headers))                      return array(); @@ -977,7 +977,7 @@ class rcube_imap      private function _get_message_range($max, $page)      {          $start_msg = ($page-1) * $this->page_size; -     +          if ($page=='all') {              $begin  = 0;              $end    = $max; @@ -994,10 +994,10 @@ class rcube_imap          if ($begin < 0) $begin = 0;          if ($end < 0) $end = $max;          if ($end > $max) $end = $max; -     +          return array($begin, $end);      } -     +      /**       * Fetches message headers @@ -1039,7 +1039,7 @@ class rcube_imap          return count($a_msg_headers);      } -   +      /**       * Returns current status of mailbox @@ -1055,7 +1055,7 @@ class rcube_imap          $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;          $old = $this->get_folder_stats($mailbox); -        // refresh message count -> will update  +        // refresh message count -> will update          $this->_messagecount($mailbox, 'ALL', true);          $result = 0; @@ -1150,7 +1150,7 @@ class rcube_imap              else {                  $a_index = $this->conn->fetchHeaderIndex($mailbox,  	                join(',', $this->search_set), $this->sort_field, $this->skip_deleted); -                 +                  if (is_array($a_index)) {                      if ($this->sort_order=="ASC")                          asort($a_index); @@ -1199,7 +1199,7 @@ class rcube_imap                  $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')) {                  if ($this->sort_order == 'DESC')                      $a_index = array_reverse($a_index); -	 +                  $this->cache[$key] = $a_index;  	        }          } @@ -1209,7 +1209,7 @@ class rcube_imap                  asort($a_index);              else if ($this->sort_order=="DESC")                  arsort($a_index); -         +              $this->cache[$key] = array_keys($a_index);          } @@ -1258,7 +1258,7 @@ class rcube_imap          list ($thread_tree) = $this->_fetch_threads($mailbox);          $this->cache[$key] = $this->_flatten_threads($mailbox, $thread_tree); -     +          return $this->cache[$key];      } @@ -1283,7 +1283,7 @@ class rcube_imap          if ($this->sort_order == 'DESC')              $msg_index = array_reverse($msg_index); -	   +          // flatten threads array          $all_ids = array();          foreach($msg_index as $root) { @@ -1306,10 +1306,10 @@ class rcube_imap          // fetch complete message index          $a_message_index = $this->conn->fetchHeaderIndex($mailbox, "1:*", 'UID', $this->skip_deleted); -     +          if ($a_message_index === false)              return false; -         +          foreach ($a_message_index as $id => $uid) {              // message in cache at correct position              if ($cache_index[$id] == $uid) { @@ -1321,20 +1321,20 @@ class rcube_imap              if (in_array((string)$uid, $cache_index, true)) {                  unset($cache_index[$id]);              } -       +              // other message at this position              if (isset($cache_index[$id])) {                  $for_remove[] = $cache_index[$id];                  unset($cache_index[$id]);              } -         +              $for_update[] = $id;          } -        // clear messages at wrong positions and those deleted that are still in cache_index       +        // clear messages at wrong positions and those deleted that are still in cache_index          if (!empty($for_remove))              $cache_index = array_merge($cache_index, $for_remove); -     +          if (!empty($cache_index))              $this->remove_message_cache($cache_key, $cache_index); @@ -1365,7 +1365,7 @@ class rcube_imap      {          if (!$str)              return false; -     +          $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;          $results = $this->_search_index($mailbox, $str, $charset, $sort_field); @@ -1455,10 +1455,10 @@ class rcube_imap  //      $a_mailbox_cache = get_cache('messagecount');  //      $a_mailbox_cache[$mailbox][$criteria] = sizeof($a_messages);  //      $this->update_cache('messagecount', $a_mailbox_cache); -         +          return $a_messages;      } -     +      /**       * Direct (real and simple) SEARCH request to IMAP server, @@ -1474,13 +1474,13 @@ class rcube_imap      {          if (!$str)              return false; -     +          $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;          return $this->conn->search($mailbox, $str, $ret_uid);      } -   +      /**       * Sort thread       * @@ -1540,7 +1540,7 @@ class rcube_imap      {          if (empty($tree))              return array(); -     +          $index = array_combine(array_values($index), $index);          // assign roots @@ -1553,7 +1553,7 @@ class rcube_imap              }          } -        $index = array_values($index);   +        $index = array_values($index);          // create sorted array of roots          $msg_index = array(); @@ -1587,8 +1587,8 @@ class rcube_imap          return $this->get_search_set();      } -   -   + +      /**       * Check if the given message ID is part of the current search set       * @@ -1611,7 +1611,7 @@ class rcube_imap       * Return message headers object of a specific message       *       * @param int     Message ID -     * @param string  Mailbox to read from  +     * @param string  Mailbox to read from       * @param boolean True if $id is the message UID       * @param boolean True if we need also BODYSTRUCTURE in headers       * @return object Message headers representation @@ -1675,7 +1675,7 @@ class rcube_imap          else              $this->struct_charset = $this->_structure_charset($structure); -        // Here we can recognize malformed BODYSTRUCTURE and  +        // Here we can recognize malformed BODYSTRUCTURE and          // 1. [@TODO] parse the message in other way to create our own message structure          // 2. or just show the raw message body.          // Example of structure for malformed MIME message: @@ -1703,7 +1703,7 @@ class rcube_imap          return $struct;      } -   +      /**       * Build message part object       * @@ -1717,7 +1717,7 @@ class rcube_imap          // multipart          if (is_array($part[0])) {              $struct->ctype_primary = 'multipart'; -       +              // find first non-array entry              for ($i=1; $i<count($part); $i++) {                  if (!is_array($part[$i])) { @@ -1725,7 +1725,7 @@ class rcube_imap                      break;                  }              } -             +              $struct->mimetype = 'multipart/'.$struct->ctype_secondary;              // build parts list for headers pre-fetching @@ -1745,7 +1745,7 @@ class rcube_imap                      }                  }              } -         +              // pre-fetch headers of all parts (in one command for better performance)              // @TODO: we could do this before _structure_part() call, to fetch              // headers for parts on all levels @@ -1780,17 +1780,17 @@ class rcube_imap              $struct->ctype_parameters = array();              for ($i=0; $i<count($part[2]); $i+=2)                  $struct->ctype_parameters[strtolower($part[2][$i])] = $part[2][$i+1]; -         +              if (isset($struct->ctype_parameters['charset']))                  $struct->charset = $struct->ctype_parameters['charset'];          } -     +          // read content encoding          if (!empty($part[5]) && $part[5]!='NIL') {              $struct->encoding = strtolower($part[5]);              $struct->headers['content-transfer-encoding'] = $struct->encoding;          } -     +          // get part size          if (!empty($part[6]) && $part[6]!='NIL')              $struct->size = intval($part[6]); @@ -1805,7 +1805,7 @@ class rcube_imap                  for ($n=0; $n<count($part[$di][1]); $n+=2)                      $struct->d_parameters[strtolower($part[$di][1][$n])] = $part[$di][1][$n+1];          } -       +          // get child parts          if (is_array($part[8]) && $di != 8) {              $struct->parts = array(); @@ -1818,11 +1818,11 @@ class rcube_imap          if (!empty($part[3]) && $part[3]!='NIL') {              $struct->content_id = $part[3];              $struct->headers['content-id'] = $part[3]; -     +              if (empty($struct->disposition))                  $struct->disposition = 'inline';          } -     +          // fetch message headers if message/rfc822 or named part (could contain Content-Location header)          if ($struct->ctype_primary == 'message' || ($struct->ctype_parameters['name'] && !$struct->content_id)) {              if (empty($mime_headers)) { @@ -1842,7 +1842,7 @@ class rcube_imap                  // get real content-type of message/rfc822                  if (preg_match('/^([a-z0-9_\/-]+)/i', $struct->real_headers['content-type'], $matches)) {                      $struct->real_mimetype = strtolower($matches[1]); -                }                                                     +                }              }          } @@ -1856,10 +1856,10 @@ class rcube_imap          return $struct;      } -     +      /** -     * Set attachment filename from message part structure  +     * Set attachment filename from message part structure       *       * @access private       * @param  object rcube_message_part Part object @@ -1964,10 +1964,10 @@ class rcube_imap          // decode filename          if (!empty($filename_mime)) { -            $part->filename = rcube_imap::decode_mime_string($filename_mime,  +            $part->filename = rcube_imap::decode_mime_string($filename_mime,                  $part->charset ? $part->charset : ($this->struct_charset ? $this->struct_charset :                  rc_detect_encoding($filename_mime, $this->default_charset))); -        }  +        }          else if (!empty($filename_encoded)) {              // decode filename according to RFC 2231, Section 4              if (preg_match("/^([^']*)'[^']*'(.*)$/", $filename_encoded, $fmatches)) { @@ -1993,7 +1993,7 @@ class rcube_imap                  return $structure[2][1];              $structure = $structure[0];          } -    }  +    }      /** @@ -2010,7 +2010,7 @@ class rcube_imap      {          // get part encoding if not provided          if (!is_object($o_part)) { -            $structure_str = $this->conn->fetchStructureString($this->mailbox, $uid, true);  +            $structure_str = $this->conn->fetchStructureString($this->mailbox, $uid, true);              $structure = new rcube_mime_struct();              // error or message not found              if (!$structure->loadStructure($structure_str)) { @@ -2022,7 +2022,7 @@ class rcube_imap              $o_part->encoding      = strtolower($structure->getPartEncoding($part));              $o_part->charset       = $structure->getPartCharset($part);          } -       +          // TODO: Add caching for message parts          if (!$part) $part = 'TEXT'; @@ -2041,7 +2041,7 @@ class rcube_imap              $body = rcube_charset_convert($body, $o_part->charset);          } -     +          return $body;      } @@ -2083,13 +2083,13 @@ class rcube_imap      {          return $this->conn->fetchPartHeader($this->mailbox, $uid, true);      } -     +      /**       * Sends the whole message source to stdout       *       * @param int  Message UID -     */  +     */      function print_raw_body($uid)      {          $this->conn->handlePartBody($this->mailbox, $uid, true, NULL, NULL, true); @@ -2338,7 +2338,7 @@ class rcube_imap              // unset threads internal cache              unset($this->icache['threads']); -       +              // remove message ids from search set              if ($this->search_set && $mailbox == $this->mailbox) {                  // threads are too complicated to just remove messages from set @@ -2374,21 +2374,21 @@ class rcube_imap      {          $mailbox = !empty($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox;          $msg_count = $this->_messagecount($mailbox, 'ALL'); -     +          if (!$msg_count) {              return 0;          } -         +          $cleared = $this->conn->clearFolder($mailbox); -       +          // make sure the message count cache is cleared as well          if ($cleared) { -            $this->clear_message_cache($mailbox.'.msg');       +            $this->clear_message_cache($mailbox.'.msg');              $a_mailbox_cache = $this->get_cache('messagecount');              unset($a_mailbox_cache[$mailbox]);              $this->update_cache('messagecount', $a_mailbox_cache);          } -         +          return $cleared;      } @@ -2419,7 +2419,7 @@ class rcube_imap       */      private function _expunge($mailbox, $clear_cache=true, $uids=NULL)      { -        if ($uids && $this->get_capability('UIDPLUS'))  +        if ($uids && $this->get_capability('UIDPLUS'))              $a_uids = is_array($uids) ? join(',', $uids) : $uids;          else              $a_uids = NULL; @@ -2430,7 +2430,7 @@ class rcube_imap              $this->clear_message_cache($mailbox.'.msg');              $this->_clear_messagecount($mailbox);          } -       +          return $result;      } @@ -2440,7 +2440,7 @@ class rcube_imap       *       * @param mixed  UIDs array or comma-separated list or '*' or '1:*'       * @param string Mailbox name -     * @return array Two elements array with UIDs converted to list and ALL flag  +     * @return array Two elements array with UIDs converted to list and ALL flag       * @access private       */      private function _parse_uids($uids, $mailbox) @@ -2457,7 +2457,7 @@ class rcube_imap                      $uids = $this->conn->fetchUIDs($mailbox, array_keys($this->search_set['depth']));                  else                      $uids = $this->conn->fetchUIDs($mailbox, $this->search_set); -       +                  // save ID-to-UID mapping in local cache                  if (is_array($uids))                      foreach ($uids as $id => $uid) @@ -2485,7 +2485,7 @@ class rcube_imap       * @param string Mailbox name       * @return int   Message ID       */ -    function get_id($uid, $mbox_name=NULL)  +    function get_id($uid, $mbox_name=NULL)      {          $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox;          return $this->_uid2id($uid, $mailbox); @@ -2553,8 +2553,8 @@ class rcube_imap      private function _list_mailboxes($root='', $filter='*')      {          $a_defaults = $a_out = array(); -     -        // get cached folder list     + +        // get cached folder list          $a_mboxes = $this->get_cache('mailboxes');          if (is_array($a_mboxes))              return $a_mboxes; @@ -2562,7 +2562,7 @@ class rcube_imap          // Give plugins a chance to provide a list of mailboxes          $data = rcmail::get_instance()->plugins->exec_hook('list_mailboxes',              array('root'=>$root,'filter'=>$filter)); -     +          if (isset($data['folders'])) {              $a_folders = $data['folders'];          } @@ -2570,30 +2570,30 @@ class rcube_imap              // retrieve list of folders from IMAP server              $a_folders = $this->conn->listSubscribed($this->mod_mailbox($root), $filter);          } -     +          if (!is_array($a_folders) || !sizeof($a_folders))              $a_folders = array();          // write mailboxlist to cache          $this->update_cache('mailboxes', $a_folders); -     +          return $a_folders;      }      /**       * Get a list of all folders available on the IMAP server -     *  +     *       * @param string IMAP root dir       * @return array Indexed array with folder names       */      function list_unsubscribed($root='')      {          static $a_folders; -     +          if (is_array($a_folders))              return $a_folders; -       +          // retrieve list of folders from IMAP server          $a_mboxes = $this->conn->listMailboxes($this->mod_mailbox($root), '*'); @@ -2617,14 +2617,14 @@ class rcube_imap      /**       * Get mailbox quota information       * added by Nuny -     *  +     *       * @return mixed Quota info or False if not supported       */      function get_quota()      {          if ($this->get_capability('QUOTA'))              return $this->conn->getQuota(); -	 +          return false;      } @@ -2634,7 +2634,7 @@ class rcube_imap       *       * @param array Mailbox name(s)       * @return boolean True on success -     */  +     */      function subscribe($a_mboxes)      {          if (!is_array($a_mboxes)) @@ -2671,7 +2671,7 @@ class rcube_imap      function create_mailbox($name, $subscribe=false)      {          $result = false; -     +          // reduce mailbox name to 100 chars          $name = substr($name, 0, 100);          $abs_name = $this->mod_mailbox($name); @@ -2702,11 +2702,11 @@ class rcube_imap          // make absolute path          $mailbox = $this->mod_mailbox($mbox_name);          $abs_name = $this->mod_mailbox($name); -     +          // check if mailbox is subscribed          $a_subscribed = $this->_list_mailboxes();          $subscribed = in_array($mailbox, $a_subscribed); -     +          // unsubscribe folder          if ($subscribed)              $this->conn->unsubscribe($mailbox); @@ -2764,7 +2764,7 @@ class rcube_imap                  // send delete command to server                  $result = $this->conn->deleteFolder($mailbox); -                if ($result >= 0) { +                if ($result) {                      $deleted = true;                      $this->clear_message_cache($mailbox.'.msg');  	            } @@ -2773,7 +2773,7 @@ class rcube_imap                      if ($c_mbox != 'INBOX') {                          $this->conn->unsubscribe($c_mbox);                          $result = $this->conn->deleteFolder($c_mbox); -                        if ($result >= 0) { +                        if ($result) {                              $deleted = true;      	                    $this->clear_message_cache($c_mbox.'.msg');                          } @@ -2828,7 +2828,7 @@ class rcube_imap              else {                  $a_folders = $this->conn->listMailboxes($this->mod_mailbox(''), $mbox_name);  	        } -	         +              if (is_array($a_folders) && in_array($this->mod_mailbox($mbox_name), $a_folders)) {                  $this->icache[$key][] = $mbox_name;                  return true; @@ -2857,7 +2857,7 @@ class rcube_imap              else if (!empty($mbox_name)) // $mode=='out'                  $mbox_name = substr($mbox_name, strlen($this->root_dir)+1);          } -     +          return $mbox_name;      } @@ -2886,7 +2886,7 @@ class rcube_imap          if (!count($this->cache) && $this->caching_enabled) {              return $this->_read_cache_record($key);          } -     +          return $this->cache[$key];      } @@ -2920,7 +2920,7 @@ class rcube_imap      {          if (!$this->caching_enabled)              return; -     +          if ($key===NULL) {              foreach ($this->cache as $key => $data)                  $this->_clear_cache_record($key); @@ -3015,7 +3015,7 @@ class rcube_imap              "AND cache_key=?",              $_SESSION['user_id'],              'IMAP.'.$key); -       +          unset($this->cache_keys[$key]);      } @@ -3024,7 +3024,7 @@ class rcube_imap      /* --------------------------------       *   message caching methods       * --------------------------------*/ -    +      /**       * Checks if the cache is up-to-date       * @@ -3071,7 +3071,7 @@ class rcube_imap                  // get UID of message with highest index                  $uid = $this->conn->ID2UID($mailbox, $msg_count);                  $cache_uid = array_pop($cache_index); -       +                  // uids of highest message matches -> cache seems OK                  if ($cache_uid == $uid)                      return 1; @@ -3092,12 +3092,12 @@ class rcube_imap      private function get_message_cache($key, $from, $to, $sort_field, $sort_order)      {          $cache_key = "$key:$from:$to:$sort_field:$sort_order"; -     +          // use idx sort as default sorting          if (!$sort_field || !in_array($sort_field, $this->db_header_fields)) {              $sort_field = 'idx';          } -     +          if ($this->caching_enabled && !isset($this->cache[$cache_key])) {              $this->cache[$cache_key] = array();              $sql_result = $this->db->limitquery( @@ -3131,7 +3131,7 @@ class rcube_imap      private function &get_cached_message($key, $uid)      {          $internal_key = 'message'; -     +          if ($this->caching_enabled && !isset($this->icache[$internal_key][$uid])) {              $sql_result = $this->db->query(                  "SELECT idx, headers, structure". @@ -3156,22 +3156,22 @@ class rcube_imap      /**       * @access private -     */   +     */      private function get_message_cache_index($key, $force=false, $sort_field='idx', $sort_order='ASC')      {          static $sa_message_index = array(); -     +          // empty key -> empty array          if (!$this->caching_enabled || empty($key))              return array(); -     +          if (!empty($sa_message_index[$key]) && !$force)              return $sa_message_index[$key];          // use idx sort as default          if (!$sort_field || !in_array($sort_field, $this->db_header_fields))              $sort_field = 'idx'; -     +          $sa_message_index[$key] = array();          $sql_result = $this->db->query(              "SELECT idx, uid". @@ -3184,7 +3184,7 @@ class rcube_imap          while ($sql_arr = $this->db->fetch_assoc($sql_result))              $sa_message_index[$key][$sql_arr['idx']] = $sql_arr['uid']; -       +          return $sa_message_index[$key];      } @@ -3203,7 +3203,7 @@ class rcube_imap          // no further caching          if (!$this->caching_enabled)              return; -     +          // check for an existing record (probably headers are cached but structure not)          if (!$force) {              $sql_result = $this->db->query( @@ -3255,7 +3255,7 @@ class rcube_imap              );          }      } -     +      /**       * @access private       */ @@ -3263,7 +3263,7 @@ class rcube_imap      {          if (!$this->caching_enabled)              return; -     +          $this->db->query(              "DELETE FROM ".get_table_name('messages').              " WHERE user_id=?". @@ -3280,7 +3280,7 @@ class rcube_imap      {          if (!$this->caching_enabled)              return; -     +          $this->db->query(              "DELETE FROM ".get_table_name('messages').              " WHERE user_id=?". @@ -3296,7 +3296,7 @@ class rcube_imap      {          if (!$this->caching_enabled)              return; -     +          if (!empty($uids) && !is_array($uids)) {              if ($uids == '*' || $uids == '1:*')                  $uids = NULL; @@ -3316,7 +3316,7 @@ class rcube_imap          if ($sql_arr = $this->db->fetch_assoc($sql_result))              return $sql_arr['minidx'];          else -            return 0;   +            return 0;      } @@ -3338,7 +3338,7 @@ class rcube_imap          $out = array();          // Special chars as defined by RFC 822 need to in quoted string (or escaped).          $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]'; -     +          if (!is_array($a))              return $out; @@ -3359,7 +3359,7 @@ class rcube_imap                  $string = $address;              else if ($name)                  $string = $name; -       +              $out[$j] = array('name' => $name,                  'mailto' => $address,                  'string' => $string @@ -3368,11 +3368,11 @@ class rcube_imap              if ($max && $j==$max)                  break;          } -     +          return $out;      } -   -   + +      /**       * Decode a Microsoft Outlook TNEF part (winmail.dat)       * @@ -3390,7 +3390,7 @@ class rcube_imap          $pid = 0;          $tnef_parts = array();          $tnef_arr = tnef_decode($part->body); -     +          foreach ($tnef_arr as $winatt) {              $tpart = new rcube_message_part;              $tpart->filename = $winatt["name"]; @@ -3422,7 +3422,7 @@ class rcube_imap          $str = rcube_imap::decode_mime_string((string)$input, $this->default_charset);          if ($str{0}=='"' && $remove_quotes)              $str = str_replace('"', '', $str); -     +          return $str;      } @@ -3442,15 +3442,15 @@ class rcube_imap          $out = '';          // Iterate instead of recursing, this way if there are too many values we don't have stack overflows -        // rfc: all line breaks or other characters not found  +        // rfc: all line breaks or other characters not found          // in the Base64 Alphabet must be ignored by decoding software -        // delete all blanks between MIME-lines, differently we can  +        // delete all blanks between MIME-lines, differently we can          // receive unnecessary blanks and broken utf-8 symbols          $input = preg_replace("/\?=\s+=\?/", '?==?', $input);          // Check if there is stuff to decode          if (strpos($input, '=?') !== false) { -            // Loop through the string to decode all occurences of =? ?= into the variable $out  +            // Loop through the string to decode all occurences of =? ?= into the variable $out              while(($pos = strpos($input, '=?')) !== false) {                  // Append everything that is before the text to be decoded                  $out .= substr($input, 0, $pos); @@ -3478,7 +3478,7 @@ class rcube_imap          }          // no encoding information, use fallback -        return rcube_charset_convert($input,  +        return rcube_charset_convert($input,              !empty($fallback) ? $fallback : rcmail::get_instance()->config->get('default_charset', 'ISO-8859-1'));      } @@ -3508,7 +3508,7 @@ class rcube_imap              return rcube_charset_convert($rest, $a[0]);          } -        // we dont' know what to do with this   +        // we dont' know what to do with this          return $str;      } @@ -3598,15 +3598,15 @@ class rcube_imap          ksort($a_defaults);          $folders = array_merge($a_defaults, array_keys($folders)); -        // finally we must rebuild the list to move  +        // finally we must rebuild the list to move          // subfolders of default folders to their place...          // ...also do this for the rest of folders because          // asort() is not properly sorting case sensitive names          while (list($key, $folder) = each($folders)) { -            // set the type of folder name variable (#1485527)  +            // set the type of folder name variable (#1485527)              $a_out[] = (string) $folder;              unset($folders[$key]); -            $this->_rsort($folder, $delimiter, $folders, $a_out);	 +            $this->_rsort($folder, $delimiter, $folders, $a_out);          }          return $a_out; @@ -3620,13 +3620,13 @@ class rcube_imap      {          while (list($key, $name) = each($list)) {  	        if (strpos($name, $folder.$delimiter) === 0) { -	            // set the type of folder name variable (#1485527)  +	            // set the type of folder name variable (#1485527)      	        $out[] = (string) $name;  	            unset($list[$key]);  	            $this->_rsort($name, $delimiter, $list, $out);  	        }          } -        reset($list);	 +        reset($list);      } @@ -3637,7 +3637,7 @@ class rcube_imap      {          if (!$mbox_name)              $mbox_name = $this->mailbox; -       +          if (!isset($this->uid_id_map[$mbox_name][$uid]))              $this->uid_id_map[$mbox_name][$uid] = $this->conn->UID2ID($mbox_name, $uid); @@ -3657,7 +3657,7 @@ class rcube_imap          $uid = $this->conn->ID2UID($mbox_name, $id);          $this->uid_id_map[$mbox_name][$uid] = $id; -     +          return $uid;      } @@ -3712,20 +3712,20 @@ class rcube_imap          $mode = strtoupper($mode);          $a_mailbox_cache = $this->get_cache('messagecount'); -     +          if (!is_array($a_mailbox_cache[$mailbox]) || !isset($a_mailbox_cache[$mailbox][$mode]) || !is_numeric($increment))              return false; -     +          // add incremental value to messagecount          $a_mailbox_cache[$mailbox][$mode] += $increment; -     +          // there's something wrong, delete from cache          if ($a_mailbox_cache[$mailbox][$mode] < 0)              unset($a_mailbox_cache[$mailbox][$mode]);          // write back to cache          $this->update_cache('messagecount', $a_mailbox_cache); -     +          return true;      } @@ -3767,7 +3767,7 @@ class rcube_imap                      $a_headers[$field] = $value;              }          } -     +          return $a_headers;      } @@ -3793,13 +3793,13 @@ class rcube_imap                  else                      $result[$key]['name'] .= (empty($result[$key]['name'])?'':' ').str_replace("\"",'',stripslashes($v));              } -         +              if (empty($result[$key]['name'])) -                $result[$key]['name'] = $result[$key]['address'];         +                $result[$key]['name'] = $result[$key]['address'];              elseif (empty($result[$key]['address']))                  $result[$key]['address'] = $result[$key]['name'];          } -     +          return $result;      } @@ -3845,7 +3845,7 @@ class rcube_message_part  class rcube_header_sorter  {      var $sequence_numbers = array(); -    +      /**       * Set the predetermined sort order.       * @@ -3867,12 +3867,12 @@ class rcube_header_sorter          * uksort would work if the keys were the sequence number, but unfortunately          * the keys are the UIDs.  We'll use uasort instead and dereference the value          * to get the sequence number (in the "id" field). -        *  -        * uksort($headers, array($this, "compare_seqnums"));  +        * +        * uksort($headers, array($this, "compare_seqnums"));          */          uasort($headers, array($this, "compare_seqnums"));      } -  +      /**       * Sort method called by uasort()       */ @@ -3881,11 +3881,11 @@ class rcube_header_sorter          // First get the sequence number from the header object (the 'id' field).          $seqa = $a->id;          $seqb = $b->id; -       +          // then find each sequence number in my ordered list          $posa = isset($this->sequence_numbers[$seqa]) ? intval($this->sequence_numbers[$seqa]) : -1;          $posb = isset($this->sequence_numbers[$seqb]) ? intval($this->sequence_numbers[$seqb]) : -1; -       +          // return the relative position as the comparison value          return $posa - $posb;      } | 
