From 13c1afbcbbc71c64f41eb7d764917bb4fea9893f Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Mon, 20 Feb 2006 18:29:14 -0500
Subject: [PATCH] Fixed some charset bugs

---
 index.php                                 |    5 +-
 program/include/rcube_shared.inc          |    8 ++--
 program/include/main.inc                  |   19 +++++++--
 program/steps/addressbook/save.inc        |    6 ++-
 program/steps/settings/save_identity.inc  |    6 ++-
 program/steps/mail/get.inc                |    4 +-
 config/main.inc.php.dist                  |    4 +-
 program/steps/mail/sendmail.inc           |   25 ++++++------
 program/steps/settings/manage_folders.inc |    2 
 program/include/rcube_imap.inc            |    2 
 10 files changed, 46 insertions(+), 35 deletions(-)

diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 28abcb6..4261102 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -16,7 +16,7 @@
 
 
 // system error reporting: 1 = log; 2 = report (not implemented yet), 4 = show, 8 = trace
-$rcmail_config['debug_level'] = 5;
+$rcmail_config['debug_level'] = 1;
 
 // enable caching of messages and mailbox data in the local database.
 // this is recommended if the IMAP server does not run on the same machine
@@ -42,7 +42,7 @@
 
 // This domain will be used to form e-mail addresses of new users
 // Specify an array with 'host' => 'domain' values to support multiple hosts
-$rcmail_config['mail_domain'] = 'roundcube.net';
+$rcmail_config['mail_domain'] = '';
 
 // Path to a virtuser table file to resolve user names and e-mail addresses
 $rcmail_config['virtuser_file'] = '';
diff --git a/index.php b/index.php
index b3c372e..fd09c02 100644
--- a/index.php
+++ b/index.php
@@ -2,7 +2,7 @@
 /*
  +-----------------------------------------------------------------------+
  | RoundCube Webmail IMAP Client                                         |
- | Version 0.1b-20060219                                                 |
+ | Version 0.1-20060220                                                  |
  |                                                                       |
  | Copyright (C) 2005, RoundCube Dev. - Switzerland                      |
  | Licensed under the GNU GPL                                            |
@@ -40,7 +40,7 @@
 
 */
 
-define('RCMAIL_VERSION', '0.1b-20060219');
+define('RCMAIL_VERSION', '0.1-20060220');
 
 
 // define global vars
@@ -63,7 +63,6 @@
 ini_set('session.use_cookies', 1);
 ini_set('session.gc_maxlifetime', 21600);
 ini_set('session.gc_divisor', 500);
-ini_set('magic_quotes_gpc', 0);
 ini_set('error_reporting', E_ALL&~E_NOTICE); 
 
 // increase maximum execution time for php scripts
diff --git a/program/include/main.inc b/program/include/main.inc
index 06d4d7b..628866f 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -308,11 +308,12 @@
   $OUTPUT->include_script('program/js/common.js');
   $OUTPUT->include_script('program/js/app.js');
 
+  // set locale setting
+  rcmail_set_locale($sess_user_lang);
+
   // set user-selected charset
   if (!empty($CONFIG['charset']))
     $OUTPUT->set_charset($CONFIG['charset']);
-  else
-    rcmail_set_locale($sess_user_lang);
 
   // add some basic label to client
   rcube_add_label('loading');
@@ -351,7 +352,7 @@
 
   if ($MBSTRING && function_exists("mb_language"))
     {
-    if (!mb_language(strtok($lang, "_")))
+    if (!@mb_language(strtok($lang, "_")))
       $MBSTRING = FALSE;   //  unsupport language
     }
 
@@ -662,6 +663,7 @@
 // send correct response on a remote request
 function rcube_remote_response($js_code, $flush=FALSE)
   {
+  global $OUTPUT, $CHARSET;
   static $s_header_sent = FALSE;
   
   if (!$s_header_sent)
@@ -673,7 +675,7 @@
     }
 
   // send response code
-  print rcube_charset_convert($js_code, 'UTF-8', $GLOBALS['CHARSET']);
+  print rcube_charset_convert($js_code, $CHARSET, $OUTPUT->get_charset());
 
   if ($flush)  // flush the output buffer
     flush();
@@ -888,7 +890,12 @@
 
   // encode for javascript use
   if ($enctype=='js')
+    {
+    if ($OUTPUT->get_charset()!='UTF-8')
+      $str = rcube_charset_convert($str, $GLOBALS['CHARSET'], $OUTPUT->get_charset());
+      
     return preg_replace(array("/\r\n/", '/"/', "/([^\\\])'/"), array('\n', '\"', "$1\'"), strtr($str, $js_rep_table));
+    }
 
   // encode for RTF
   if ($enctype=='rtf')
@@ -1543,6 +1550,8 @@
 
 function rcmail_charset_selector($attrib)
   {
+  global $OUTPUT;
+  
   // pass the following attributes to the form class
   $field_attrib = array('name' => '_charset');
   foreach ($attrib as $attr => $value)
@@ -1571,7 +1580,7 @@
   $select = new select($field_attrib);
   $select->add(array_values($charsets), array_keys($charsets));
   
-  $set = $_POST['_charset'] ? $_POST['_charset'] : $GLOBALS['CHARSET'];
+  $set = $_POST['_charset'] ? $_POST['_charset'] : $OUTPUT->get_charset();
   return $select->show($set);
   }
 
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index 9777d4c..71a5cb6 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -444,7 +444,7 @@
         $count = iil_C_CountMessages($this->conn, $mailbox);
       }
 
-    if (is_array($a_mailbox_cache[$mailbox]))
+    if (!is_array($a_mailbox_cache[$mailbox]))
       $a_mailbox_cache[$mailbox] = array();
       
     $a_mailbox_cache[$mailbox][$mode] = (int)$count;
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index 79428fa..da56651 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -86,13 +86,13 @@
   function set_charset($charset)
     {
     global $MBSTRING;
+    
     $this->charset = $charset;
-    if ($MBSTRING&&function_exists( "mb_internal_encoding"))
+    
+    if ($MBSTRING && function_exists("mb_internal_encoding"))
       {
-      if(!@mb_internal_encoding( $charset))
-        {
+      if(!@mb_internal_encoding($charset))
         $MBSTRING = FALSE;
-        }
       }
     }
     
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index 24e375e..32a6243 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -42,7 +42,9 @@
     if (!isset($_POST[$fname]))
       continue;
     
-    $a_write_sql[] = sprintf("%s=%s", $DB->quoteIdentifier($col), $DB->quote(strip_tags($_POST[$fname])));
+    $a_write_sql[] = sprintf("%s=%s",
+                             $DB->quoteIdentifier($col),
+                             $DB->quote(rcube_charset_convert(strip_tags($_POST[$fname]), $OUTPUT->get_charset())));
     }
 
   if (sizeof($a_write_sql))
@@ -164,7 +166,7 @@
         continue;
     
       $a_insert_cols[] = $col;
-      $a_insert_values[] = $DB->quote(strip_tags($_POST[$fname]));
+      $a_insert_values[] = $DB->quote(rcube_charset_convert(strip_tags($_POST[$fname]), $OUTPUT->get_charset()));
       }
     
     if (sizeof($a_insert_cols))
diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc
index 5a4fea1..99cd211 100644
--- a/program/steps/mail/get.inc
+++ b/program/steps/mail/get.inc
@@ -70,8 +70,8 @@
 
     $mimetype = sprintf('%s/%s', $ctype_primary, $ctype_secondary);
     $filename = $part->d_parameters['filename'] ? $part->d_parameters['filename'] : $part->ctype_parameters['name'];
-    
-    if ($ctype_primary=='text')
+
+    if ($ctype_primary=='text' && $ctype_secondary=='html')
       {
       list($MESSAGE['parts']) = rcmail_parse_message($part,
                                                      array('safe' => (bool)$_GET['_safe'],
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index a520a50..ec0f116 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -39,7 +39,7 @@
 
 function rcmail_get_identity($id)
   {
-  global $DB;
+  global $DB, $CHARSET, $OUTPUT;
   
   // get identity record
   $sql_result = $DB->query("SELECT *, email AS mailto
@@ -53,7 +53,9 @@
     {
     $sql_arr = $DB->fetch_assoc($sql_result);
     $out = $sql_arr;
-    $out['string'] = sprintf('%s <%s>', $sql_arr['name'], $sql_arr['mailto']);
+    $out['string'] = sprintf('%s <%s>',
+                             rcube_charset_convert($sql_arr['name'], $CHARSET, $OUTPUT->get_charset()),
+                             $sql_arr['mailto']);
     return $out;
     }
 
@@ -74,10 +76,7 @@
 
 
 // set default charset
-if (empty($CHARSET))
-  $CHARSET = 'ISO-8859-1';
-
-$input_charset = $CHARSET;
+$input_charset = $OUTPUT->get_charset();
 $message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset;
 
 $mailto_regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m');
@@ -162,7 +161,7 @@
 
 
 // use the configured delimiter for headers
-$header_delm = $rcmail_config['mail_header_delimiter'] ? $rcmail_config['mail_header_delimiter'] : "\r\n";
+$header_delm = $CONFIG['mail_header_delimiter'] ? $CONFIG['mail_header_delimiter'] : "\r\n";
 
 // create PEAR::Mail_mime instance
 $MAIL_MIME = new Mail_mime($header_delm);
@@ -198,9 +197,9 @@
 $msg_body = $MAIL_MIME->get($message_param);
 
 $msg_subject = $headers['Subject'];
-global $MBSTRING;
-if ($MBSTRING&&function_exists( "mb_encode_mimeheader"))
-  $headers['Subject'] = mb_encode_mimeheader( $headers['Subject'],$message_charset);
+
+if ($MBSTRING && function_exists("mb_encode_mimeheader"))
+  $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset);
 
 // send thru SMTP server using cusotm SMTP library
 if ($CONFIG['smtp_server'])
@@ -238,15 +237,15 @@
 else
   {
   // unset some headers because they will be added by the mail() function
-  $headers_php = $MAIL_MIME->_headers;
   $headers_enc = $MAIL_MIME->headers($headers);
+  $headers_php = $MAIL_MIME->_headers;
   unset($headers_php['To'], $headers_php['Subject']);
-
+  
   // reset stored headers and overwrite
   $MAIL_MIME->_headers = array();
   $header_str = $MAIL_MIME->txtHeaders($headers_php);
 
-  if(ini_get('safe_mode'))
+  if (ini_get('safe_mode'))
     $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str);
   else
     $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str, "-f$from");
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
index c98de39..6f49018 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -47,7 +47,7 @@
 else if ($_action=='create-folder')
   {
   if (strlen($_GET['_name']))
-    $create = $IMAP->create_mailbox(strip_tags(trim($_GET['_name'])), TRUE);
+    $create = $IMAP->create_mailbox(rcube_charset_convert(strip_tags(trim($_GET['_name'])), $OUTPUT->get_charset()), TRUE);
 
   if ($create && $_GET['_remote'])
     {
diff --git a/program/steps/settings/save_identity.inc b/program/steps/settings/save_identity.inc
index dc61b78..1bfbf48 100644
--- a/program/steps/settings/save_identity.inc
+++ b/program/steps/settings/save_identity.inc
@@ -42,7 +42,9 @@
     if (!isset($_POST[$fname]))
       continue;
 
-    $a_write_sql[] = sprintf("%s=%s", $DB->quoteIdentifier($col), $DB->quote(strip_tags($_POST[$fname])));
+    $a_write_sql[] = sprintf("%s=%s",
+                             $DB->quoteIdentifier($col),
+                             $DB->quote(rcube_charset_convert(strip_tags($_POST[$fname]), $OUTPUT->get_charset())));
     }
 
   if (sizeof($a_write_sql))
@@ -97,7 +99,7 @@
       continue;
     
     $a_insert_cols[] = $DB->quoteIdentifier($col);
-    $a_insert_values[] = $DB->quote(strip_tags($_POST[$fname]));
+    $a_insert_values[] = $DB->quote(rcube_charset_convert(strip_tags($_POST[$fname]), $OUTPUT->get_charset()));
     }
     
   if (sizeof($a_insert_cols))

--
Gitblit v1.9.1