From ee258ce15870e6cb4b733087368a062b5fd66b52 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 23 Jul 2009 08:12:27 -0400
Subject: [PATCH] - performance fix: don't check mbstring functions existence too often

---
 program/include/rcube_shared.inc    |  171 ++++++++++++++++++------------------------
 program/steps/mail/spell_pspell.inc |    4 
 program/include/rcube_imap.php      |   10 +-
 program/steps/mail/compose.inc      |    6 
 program/include/rcmail.php          |    2 
 program/steps/mail/show.inc         |    2 
 6 files changed, 85 insertions(+), 110 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 1721410..4624ee1 100644
--- a/program/include/rcmail.php
+++ b/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))
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index fba30de..5b5a98c 100644
--- a/program/include/rcube_imap.php
+++ b/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
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index 1b2fe97..d5f930a 100644
--- a/program/include/rcube_shared.inc
+++ b/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);
+    }
+}
+
 ?>
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 1e05c43..d178401 100644
--- a/program/steps/mail/compose.inc
+++ b/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'];
       }
     }
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index ffd569d..068ccbc 100644
--- a/program/steps/mail/show.inc
+++ b/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;
       }
diff --git a/program/steps/mail/spell_pspell.inc b/program/steps/mail/spell_pspell.inc
index 8e574a6..717b92e 100644
--- a/program/steps/mail/spell_pspell.inc
+++ b/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)

--
Gitblit v1.9.1