Today Cyrus 2.2.2-BETA with SASL Initial Client response was released so it
[squirrelmail.git] / functions / imap_utf7_local.php
index 9515f21d6f12a3c115e0af1882a09d25feb5b103..3435f48f06c566b39558e1249d73f8465984bc09 100644 (file)
@@ -1,17 +1,52 @@
 <?php
 
 /**
- * imap_general.php
+ * imap_utf7_local.php
  *
- * Copyright (c) 1999-2002 The SquirrelMail Project Team
+ * Copyright (c) 1999-2003 The SquirrelMail Project Team
  * Licensed under the GNU GPL. For full terms see the file COPYING.
  *
- * This implements all functions that do general imap functions.
+ * This implements all functions that do imap UTF7 conversions.
  *
- * $Id $
+ * $Id$
  */
 
+function sqimap_mb_convert_encoding($str, $to_encoding, $from_encoding, $default_charset)
+{
+  // Allows mbstring functions only with iso-8859-*, utf-8 and 
+  // iso-2022-jp (Japanese)
+  // koi8-r and gb2312 can be added only in php 4.3+
+  if ( stristr($default_charset, 'iso-8859-') ||
+       stristr($default_charset, 'utf-8') || 
+       stristr($default_charset, 'iso-2022-jp') ) {
+    if (function_exists('mb_convert_encoding')) {
+      return mb_convert_encoding($str, $to_encoding, $from_encoding);
+    }
+  }
+  return '';
+}
+
 function imap_utf7_encode_local($s) {
+    global $languages, $squirrelmail_language;
+    
+    if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
+        function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
+        return $languages[$squirrelmail_language]['XTRA_CODE']('utf7-imap_encode', $s);
+    }
+
+    if ($s == '')  //If empty, don't bother
+      return '';
+
+    global $default_charset;
+    set_my_charset();  //must be called before using $default_charset
+    if ((strtolower($default_charset) != 'iso-8859-1') && ($default_charset != '')) {
+      $utf7_s = sqimap_mb_convert_encoding($s, 'UTF7-IMAP', $default_charset, $default_charset);
+      if ($utf7_s != '')
+        return $utf7_s;
+    }
+
+    // Later code works only for ISO-8859-1 
+    
        $b64_s = '';    // buffer for substring to be base64-encoded
        $utf7_s = '';   // imap-utf7-encoded string
        for ($i = 0; $i < strlen($s); $i++) {
@@ -45,6 +80,26 @@ function imap_utf7_encode_local($s) {
 }
 
 function imap_utf7_decode_local($s) {
+    global $languages, $squirrelmail_language;
+    
+    if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
+        function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
+        return $languages[$squirrelmail_language]['XTRA_CODE']('utf7-imap_decode', $s);
+    }
+
+    if ($s == '')  //If empty, don't bother
+      return '';
+
+    global $default_charset;
+    set_my_charset();  //must be called before using $default_charset
+    if ((strtolower($default_charset) != 'iso-8859-1') && ($default_charset != '')) {
+      $utf7_s = sqimap_mb_convert_encoding($s, $default_charset, 'UTF7-IMAP', $default_charset);
+      if ($utf7_s != '')
+        return $utf7_s;
+    }
+
+    // Later code works only for ISO-8859-1
+    
        $b64_s = '';
        $iso_8859_1_s = '';
        for ($i = 0, $len = strlen($s); $i < $len; $i++) {
@@ -159,4 +214,4 @@ function decodeBASE64($s) {
        return $d;
 }
 
-?>
+?>
\ No newline at end of file