alecpl
2009-07-23 ee258ce15870e6cb4b733087368a062b5fd66b52
- performance fix: don't check mbstring functions existence too often


6 files modified
195 ■■■■■ changed files
program/include/rcmail.php 2 ●●● patch | view | raw | blame | history
program/include/rcube_imap.php 10 ●●●● patch | view | raw | blame | history
program/include/rcube_shared.inc 171 ●●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 6 ●●●● patch | view | raw | blame | history
program/steps/mail/show.inc 2 ●●● patch | view | raw | blame | history
program/steps/mail/spell_pspell.inc 4 ●●●● patch | view | raw | blame | history
program/include/rcmail.php
@@ -481,7 +481,7 @@
    // lowercase username if it's an e-mail address (#1484473)
    if (strpos($username, '@'))
      $username = rc_strtolower($username);
      $username = mb_strtolower($username);
    // user already registered -> overwrite username
    if ($user = rcube_user::query($username, $host))
program/include/rcube_imap.php
@@ -2397,10 +2397,10 @@
        $key,
        $index,
        $headers->uid,
        (string)rc_substr($this->db->encode($this->decode_header($headers->subject, TRUE)), 0, 128),
        (string)rc_substr($this->db->encode($this->decode_header($headers->from, TRUE)), 0, 128),
        (string)rc_substr($this->db->encode($this->decode_header($headers->to, TRUE)), 0, 128),
        (string)rc_substr($this->db->encode($this->decode_header($headers->cc, TRUE)), 0, 128),
        (string)mb_substr($this->db->encode($this->decode_header($headers->subject, TRUE)), 0, 128),
        (string)mb_substr($this->db->encode($this->decode_header($headers->from, TRUE)), 0, 128),
        (string)mb_substr($this->db->encode($this->decode_header($headers->to, TRUE)), 0, 128),
        (string)mb_substr($this->db->encode($this->decode_header($headers->cc, TRUE)), 0, 128),
        (int)$headers->size,
        serialize($this->db->encode(clone $headers)),
        is_object($struct) ? serialize($this->db->encode(clone $struct)) : NULL
@@ -2788,7 +2788,7 @@
      if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
        $a_defaults[$p] = $folder;
      else
        $folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF7-IMAP'));
        $folders[$folder] = mb_strtolower(rcube_charset_convert($folder, 'UTF7-IMAP'));
      }
    // sort folders and place defaults on the top
program/include/rcube_shared.inc
@@ -185,7 +185,6 @@
    return $var ? '1' : '0';
  else
    return "'".JQ($var)."'";
}
@@ -209,9 +208,9 @@
 */
function in_array_nocase($needle, $haystack)
{
  $needle = rc_strtolower($needle);
  $needle = mb_strtolower($needle);
  foreach ($haystack as $value)
    if ($needle===rc_strtolower($value))
    if ($needle===mb_strtolower($value))
      return true;
  
  return false;
@@ -227,7 +226,7 @@
function get_boolean($str)
{
  $str = strtolower($str);
  if(in_array($str, array('false', '0', 'no', 'nein', ''), TRUE))
  if (in_array($str, array('false', '0', 'no', 'nein', ''), TRUE))
    return FALSE;
  else
    return TRUE;
@@ -338,81 +337,11 @@
  return $abs_path;
}
/**
 * Wrapper function for strlen
 */
function rc_strlen($str)
{
  if (function_exists('mb_strlen'))
    return mb_strlen($str);
  else
    return strlen($str);
}
/**
 * Wrapper function for strtolower
 */
function rc_strtolower($str)
{
  if (function_exists('mb_strtolower'))
    return mb_strtolower($str);
  else
    return strtolower($str);
}
/**
 * Wrapper function for strtoupper
 */
function rc_strtoupper($str)
{
  if (function_exists('mb_strtoupper'))
    return mb_strtoupper($str);
  else
    return strtoupper($str);
}
/**
 * Wrapper function for substr
 */
function rc_substr($str, $start, $len=null)
{
  if (function_exists('mb_substr'))
    return mb_substr($str, $start, $len);
  else
    return substr($str, $start, $len);
}
/**
 * Wrapper function for strpos
 */
function rc_strpos($haystack, $needle, $offset=0)
{
  if (function_exists('mb_strpos'))
    return mb_strpos($haystack, $needle, $offset);
  else
    return strpos($haystack, $needle, $offset);
}
/**
 * Wrapper function for strrpos
 */
function rc_strrpos($haystack, $needle, $offset=0)
{
  if (function_exists('mb_strrpos'))
    return mb_strrpos($haystack, $needle, $offset);
  else
    return strrpos($haystack, $needle, $offset);
}
/**
 * Wrapper function for wordwrap
 */
function rc_wordwrap($string, $width=75, $break="\n", $cut=false)
{
  if (!function_exists('mb_substr') || !function_exists('mb_strlen'))
    return wordwrap($string, $width, $break, $cut);
  $para = explode($break, $string);
  $string = '';
  while (count($para)) {
@@ -476,30 +405,6 @@
  return $hdrs[$key];
  }
/**
 * Replace the middle part of a string with ...
 * if it is longer than the allowed length
 *
 * @param string Input string
 * @param int    Max. length
 * @param string Replace removed chars with this
 * @return string Abbreviated string
 */
function abbreviate_string($str, $maxlength, $place_holder='...')
{
  $length = rc_strlen($str);
  $first_part_length = floor($maxlength/2) - rc_strlen($place_holder);
  if ($length > $maxlength)
  {
    $second_starting_location = $length - $maxlength + $first_part_length + 1;
    $str = rc_substr($str, 0, $first_part_length) . $place_holder . rc_substr($str, $second_starting_location, $length);
  }
  return $str;
}
/**
@@ -578,6 +483,29 @@
  return $ts;
}
/**
 * Replace the middle part of a string with ...
 * if it is longer than the allowed length
 *
 * @param string Input string
 * @param int    Max. length
 * @param string Replace removed chars with this
 * @return string Abbreviated string
 */
function abbreviate_string($str, $maxlength, $place_holder='...')
{
  $length = mb_strlen($str);
  $first_part_length = floor($maxlength/2) - mb_strlen($place_holder);
  if ($length > $maxlength)
  {
    $second_starting_location = $length - $maxlength + $first_part_length + 1;
    $str = mb_substr($str, 0, $first_part_length) . $place_holder . mb_substr($str, $second_starting_location, $length);
  }
  return $str;
}
/**
 * A method to guess the mime_type of an attachment.
@@ -683,4 +611,51 @@
  return $result;
}
/**
 * mbstring replacement functions
 */
if (!function_exists('mb_strlen')) {
    function mb_strlen($str)
    {
    return strlen($str);
    }
}
if (!function_exists('mb_strtolower')) {
    function mb_strtolower($str)
    {
        return strtolower($str);
    }
}
if (!function_exists('mb_strtoupper')) {
    function mb_strtoupper($str)
    {
        return strtoupper($str);
    }
}
if (!function_exists('mb_substr')) {
    function mb_substr($str, $start, $len=null)
    {
        return substr($str, $start, $len);
    }
}
if (!function_exists('mb_strpos')) {
    function mb_strpos($haystack, $needle, $offset=0)
    {
        return strpos($haystack, $needle, $offset);
    }
}
if (!function_exists('mb_strrpos')) {
    function mb_strrpos($haystack, $needle, $offset=0)
    {
        return strrpos($haystack, $needle, $offset);
    }
}
?>
program/steps/mail/compose.inc
@@ -267,7 +267,7 @@
    foreach ($a_to as $addr)
    {
      if (!empty($addr['mailto']))
        $a_recipients[] = rc_strtolower($addr['mailto']);
        $a_recipients[] = mb_strtolower($addr['mailto']);
    }
    if (!empty($MESSAGE->headers->cc))
@@ -276,7 +276,7 @@
      foreach ($a_cc as $addr)
      {
        if (!empty($addr['mailto']))
          $a_recipients[] = rc_strtolower($addr['mailto']);
          $a_recipients[] = mb_strtolower($addr['mailto']);
      }
    }
  }
@@ -318,7 +318,7 @@
        if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE->headers->from, $sql_arr['email']))
          $from_id = $sql_arr['identity_id'];
        // set identity if it's one of the reply-message recipients (with prio for default identity)
        else if (in_array(rc_strtolower($sql_arr['email']), $a_recipients) && (empty($from_id) || $sql_arr['standard']))
        else if (in_array(mb_strtolower($sql_arr['email']), $a_recipients) && (empty($from_id) || $sql_arr['standard']))
          $from_id = $sql_arr['identity_id'];
      }
    }
program/steps/mail/show.inc
@@ -162,7 +162,7 @@
        $ol .= html::tag('li', null, sprintf("%s (%s)", Q($attach_prop->filename), Q(show_bytes($attach_prop->size))));
      }
      else {
        if (rc_strlen($attach_prop->filename) > 50) {
        if (mb_strlen($attach_prop->filename) > 50) {
          $filename = abbreviate_string($attach_prop->filename, 50);
          $title = $attach_prop->filename;
      }
program/steps/mail/spell_pspell.inc
@@ -49,13 +49,13 @@
$plink = pspell_new(get_input_value('lang', RCUBE_INPUT_GET), null, null, RCMAIL_CHARSET, PSPELL_FAST);
// send output
$out = '<?xml version="1.0" encoding="'.RCMAIL_CHARSET.'"?><spellresult charschecked="'.rc_strlen($text).'">';
$out = '<?xml version="1.0" encoding="'.RCMAIL_CHARSET.'"?><spellresult charschecked="'.mb_strlen($text).'">';
$diff = 0;
foreach ($words as $w) {
    $word = trim($w[0]);
    $pos  = $w[1] - $diff;
    $len  = rc_strlen($word);
    $len  = mb_strlen($word);
    if ($word && $plink && !pspell_check($plink, $word)) {
        $suggestions = pspell_suggest($plink, $word);
    if (sizeof($suggestions)>10)