Changeset 2675 in subversion


Ignore:
Timestamp:
Jun 24, 2009 5:44:05 AM (4 years ago)
Author:
alec
Message:
  • Fix non-unicode characters caching in unicode database (#1484608)
Location:
trunk/roundcubemail
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/CHANGELOG

    r2671 r2675  
    22=========================== 
    33 
     4- Fix non-unicode characters caching in unicode database (#1484608) 
     5- Performance improvements of messages caching 
    46- Fix empty Date header issue (#1485923) 
    57- Open collapsed folders during drag & drop (#1485914) 
  • trunk/roundcubemail/program/include/rcube_imap.php

    r2674 r2675  
    119119    $this->ssl = $use_ssl; 
    120120     
    121     // print trace mesages 
     121    // print trace messages 
    122122    if ($this->conn && ($this->debug_level & 8)) 
    123123      console($this->conn->message); 
     
    773773  function _fetch_headers($mailbox, $msgs, &$a_msg_headers, $cache_key) 
    774774    { 
    775     // cache is incomplete 
    776     $cache_index = $this->get_message_cache_index($cache_key); 
    777      
    778775    // fetch reqested headers from server 
    779776    $a_header_index = iil_C_FetchHeaders($this->conn, $mailbox, $msgs, false, $this->fetch_add_headers); 
    780      
     777 
    781778    if (!empty($a_header_index)) 
    782779      { 
     780      // cache is incomplete 
     781      $cache_index = $this->get_message_cache_index($cache_key); 
     782     
    783783      foreach ($a_header_index as $i => $headers) 
    784784        {  
     
    800800        } 
    801801      } 
    802          
     802 
    803803    return count($a_msg_headers); 
    804804    } 
     
    22632263         WHERE  user_id=? 
    22642264         AND    cache_key=? 
    2265          ORDER BY ".$this->db->quoteIdentifier($sort_field)." ". 
    2266          strtoupper($sort_order), 
     2265         ORDER BY ".$this->db->quoteIdentifier($sort_field)." ".strtoupper($sort_order), 
    22672266        $from, 
    22682267        $to-$from, 
     
    22732272        { 
    22742273        $uid = $sql_arr['uid']; 
    2275         $this->cache[$cache_key][$uid] = unserialize($sql_arr['headers']); 
    2276          
     2274        $this->cache[$cache_key][$uid] =  $this->db->decode(unserialize($sql_arr['headers'])); 
     2275 
    22772276        // featch headers if unserialize failed 
    22782277        if (empty($this->cache[$cache_key][$uid])) 
     
    22802279        } 
    22812280      } 
    2282        
     2281 
    22832282    return $this->cache[$cache_key]; 
    22842283    } 
     
    23062305      if ($sql_arr = $this->db->fetch_assoc($sql_result)) 
    23072306        { 
    2308         $this->cache[$internal_key][$uid] = unserialize($sql_arr['headers']); 
     2307        $this->cache[$internal_key][$uid] = $this->db->decode(unserialize($sql_arr['headers'])); 
    23092308        if (is_object($this->cache[$internal_key][$uid]) && !empty($sql_arr['structure'])) 
    2310           $this->cache[$internal_key][$uid]->structure = unserialize($sql_arr['structure']); 
     2309          $this->cache[$internal_key][$uid]->structure = $this->db->decode(unserialize($sql_arr['structure'])); 
    23112310        } 
    23122311      } 
     
    23482347   * @access private 
    23492348   */ 
    2350   function add_message_cache($key, $index, $headers, $struct=null) 
     2349  private function add_message_cache($key, $index, $headers, $struct=null) 
    23512350    { 
    23522351    if (empty($key) || !is_object($headers) || empty($headers->uid)) 
     
    23562355    $this->cache['__single_msg'][$headers->uid] = $headers; 
    23572356    $this->cache['__single_msg'][$headers->uid]->structure = $struct; 
    2358      
     2357 
    23592358    // no further caching 
    23602359    if (!$this->caching_enabled) 
     
    23812380         WHERE message_id=?", 
    23822381        $index, 
    2383         serialize($headers), 
    2384         is_object($struct) ? serialize($struct) : NULL, 
     2382        serialize($this->db->encode(clone $headers)), 
     2383        is_object($struct) ? serialize($this->db->encode(clone $struct)) : NULL, 
    23852384        $sql_arr['message_id'] 
    23862385        ); 
     
    23962395        $index, 
    23972396        $headers->uid, 
    2398         (string)substr($this->decode_header($headers->subject, TRUE), 0, 128), 
    2399         (string)substr($this->decode_header($headers->from, TRUE), 0, 128), 
    2400         (string)substr($this->decode_header($headers->to, TRUE), 0, 128), 
    2401         (string)substr($this->decode_header($headers->cc, TRUE), 0, 128), 
     2397 
     2398        (string)rc_substr($this->db->encode($this->decode_header($headers->subject, TRUE)), 0, 128), 
     2399        (string)rc_substr($this->db->encode($this->decode_header($headers->from, TRUE)), 0, 128), 
     2400        (string)rc_substr($this->db->encode($this->decode_header($headers->to, TRUE)), 0, 128), 
     2401        (string)rc_substr($this->db->encode($this->decode_header($headers->cc, TRUE)), 0, 128), 
    24022402        (int)$headers->size, 
    2403         serialize($headers), 
    2404         is_object($struct) ? serialize($struct) : NULL 
     2403        serialize($this->db->encode(clone $headers)), 
     2404        is_object($struct) ? serialize($this->db->encode(clone $struct)) : NULL 
    24052405        ); 
    24062406      } 
     
    24102410   * @access private 
    24112411   */ 
    2412   function remove_message_cache($key, $uids) 
     2412  private function remove_message_cache($key, $uids) 
    24132413    { 
    24142414    if (!$this->caching_enabled) 
     
    24272427   * @access private 
    24282428   */ 
    2429   function clear_message_cache($key, $start_index=1) 
     2429  private function clear_message_cache($key, $start_index=1) 
    24302430    { 
    24312431    if (!$this->caching_enabled) 
     
    24452445   * @access private 
    24462446   */ 
    2447   function get_message_cache_index_min($key, $uids=NULL) 
     2447  private function get_message_cache_index_min($key, $uids=NULL) 
    24482448    { 
    24492449    if (!$this->caching_enabled) 
  • trunk/roundcubemail/program/include/rcube_mdb2.php

    r2673 r2675  
    558558 
    559559  /** 
     560   * Encodes non-UTF-8 characters in string/array/object (recursive) 
     561   * 
     562   * @param  mixed  Data to fix 
     563   * @return mixed  Properly UTF-8 encoded data 
     564   * @access public 
     565   */ 
     566  function encode($input) 
     567    { 
     568    if (is_object($input)) { 
     569      foreach (get_object_vars($input) as $idx => $value) 
     570        $input->$idx = $this->encode($value); 
     571      return $input; 
     572      } 
     573    else if (is_array($input)) { 
     574      foreach ($input as $idx => $value) 
     575        $input[$idx] = $this->encode($value); 
     576      return $input;     
     577      } 
     578 
     579    return utf8_encode($input); 
     580    } 
     581 
     582 
     583  /** 
     584   * Decodes encoded UTF-8 string/object/array (recursive) 
     585   * 
     586   * @param  mixed  Input data 
     587   * @return mixed  Decoded data 
     588   * @access public 
     589   */ 
     590  function decode($input) 
     591    { 
     592    if (is_object($input)) { 
     593      foreach (get_object_vars($input) as $idx => $value) 
     594        $input->$idx = $this->decode($value); 
     595      return $input; 
     596      } 
     597    else if (is_array($input)) { 
     598      foreach ($input as $idx => $value) 
     599        $input[$idx] = $this->decode($value); 
     600      return $input;     
     601      } 
     602 
     603    return utf8_decode($input); 
     604    } 
     605 
     606 
     607  /** 
    560608   * Adds a query result and returns a handle ID 
    561609   * 
Note: See TracChangeset for help on using the changeset viewer.