From 58e3602a37cccab55f71fbf839b32fbc4322699c Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sat, 04 Feb 2006 14:08:10 -0500
Subject: [PATCH] Bugfixes for encoding and sending with attachments

---
 CHANGELOG                           |    7 ++-
 program/lib/utf8.class.php          |    9 ++--
 program/include/main.inc            |   13 ++++--
 program/steps/mail/compose.inc      |    9 ++++
 skins/default/mail.css              |    5 ++
 config/main.inc.php.dist            |    2 
 SQL/sqlite.initial.sql              |    2 
 program/steps/mail/sendmail.inc     |    6 +-
 program/steps/mail/move_del.inc     |    1 
 index.php                           |    1 
 skins/default/templates/mail.html   |    3 +
 program/steps/mail/check_recent.inc |    5 +-
 program/steps/mail/func.inc         |   24 ++++++++++-
 .htaccess                           |    5 +-
 program/js/app.js                   |    9 ++++
 program/include/rcube_imap.inc      |   16 ++++++++
 16 files changed, 91 insertions(+), 26 deletions(-)

diff --git a/.htaccess b/.htaccess
index bb8fb50..0a3faf2 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,5 +1,6 @@
-php_flag   display_errors 	On
-php_value  upload_max_filesize  2m
+AddDefaultCharset	UTF-8
+php_flag	display_errors	On
+php_value	upload_max_filesize	2m
 
 <FilesMatch "(\.inc|\~)$|^_">
   Order allow,deny
diff --git a/CHANGELOG b/CHANGELOG
index c5fa71b..c3ba47b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,9 +1,9 @@
 CHANGELOG RoundCube Webmail
 ---------------------------
 
-2006/01/19
+2006/02/04
 ----------
-- Added Slovak translation
+- Added Slovak, Hungarian, Bosnian and Croation translation
 - Fixed bug when inserting signatures with !?&
 - Chopping message headers before inserting into the message cache table (to avoid bugs in Postgres)
 - Allow one-char domains in e-mail addresses
@@ -20,6 +20,9 @@
 - Added LDAP public search (experimental)
 - Applied patch for correct ctrl/shift behavior for message selection (Bug #1326364)
 - Casting to strings when adding empty headers to message cache (Bug #1406026)
+- Skip sender-address as recipient when Reply-to-all
+- Fixes in utf8-class
+- Added patch for Quota display by Aury Fink Filho <nuny@aury.com.br>
 
 
 2005/12/16
diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql
index 147df72..b09a3ad 100644
--- a/SQL/sqlite.initial.sql
+++ b/SQL/sqlite.initial.sql
@@ -31,7 +31,7 @@
 CREATE TABLE contacts (
   contact_id integer NOT NULL PRIMARY KEY,
   user_id integer NOT NULL default '0',
-  created datetime NOT NULL default '0000-00-00 00:00:00',
+  changed datetime NOT NULL default '0000-00-00 00:00:00',
   del tinyint NOT NULL default '0',
   name varchar(128) NOT NULL default '',
   email varchar(128) NOT NULL default '',
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index ac60e48..e1cb3ef 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -85,7 +85,7 @@
 // check client IP in session athorization
 $rcmail_config['ip_check'] = TRUE;
 
-// not sure what this was good for :-) 
+// the default locale setting
 $rcmail_config['locale_string'] = 'en';
 
 // use this format for short date display
diff --git a/index.php b/index.php
index 527f4f2..d99f24d 100644
--- a/index.php
+++ b/index.php
@@ -63,6 +63,7 @@
 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 99eaa91..3c07836 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -71,7 +71,7 @@
 
   // we can use the database for storing session data
   // session queries do not work with MDB2
-  if ($CONFIG['db_backend']!='mdb2' && is_object($DB) /* && $DB->db_provider!='sqlite' */)
+  if ($CONFIG['db_backend']!='mdb2' && is_object($DB))
     include_once('include/session.inc');
 
 
@@ -709,10 +709,12 @@
     return $str;
     
   // convert charset using iconv module  
-  if (function_exists('iconv') && $from!='UTF-7' && $to!='UTF-7') {
+  if (0 && function_exists('iconv') && $from!='UTF-7' && $to!='UTF-7') {
     return iconv($from, $to, $str);
     }
-    
+
+  $conv = new utf8();
+
   // convert string to UTF-8
   if ($from=='UTF-7')
     $str = rcube_charset_convert(UTF7DecodeString($str), 'ISO-8859-1');
@@ -720,7 +722,7 @@
     $str = utf8_encode($str);
   else if ($from!='UTF-8')
     {
-    $conv = new utf8($from);
+    $conv->loadCharset($from);
     $str = $conv->strToUtf8($str);
     }
 
@@ -731,7 +733,7 @@
     return utf8_decode($str);
   else if ($to!='UTF-8')
     {
-    $conv = new utf8($to);    
+    $conv->loadCharset($to);
     return $conv->utf8ToStr($str);
     }
 
@@ -960,6 +962,7 @@
         'message' => 'rcmail_message_container',
         'messages' => 'rcmail_message_list',
         'messagecountdisplay' => 'rcmail_messagecount_display',
+        'quotadisplay' => 'rcmail_quota_display',
         'messageheaders' => 'rcmail_message_headers',
         'messagebody' => 'rcmail_message_body',
         'messageattachments' => 'rcmail_message_attachments',
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index fa13e02..cb6b409 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -1057,6 +1057,22 @@
     }
 
 
+  /**
+   * Get quota
+   * added by Nuny
+   */
+  function get_quota()
+    {
+    if ($this->get_capability('QUOTA'))
+      {
+      $result = iil_C_GetQuota($this->conn);
+      return sprintf("%.2fMB / %.2fMB (%.0f%%)", $result["used"] / 1000.0, $result["total"] / 1000.0, $result["percent"]);
+      }
+    else
+      return 'unknown';
+    }
+
+
   // subscribe to a specific mailbox(es)
   function subscribe($mbox, $mode='subscribe')
     {
diff --git a/program/js/app.js b/program/js/app.js
index c216a73..4e9a8bf 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -231,7 +231,7 @@
     this.enable_command('logout', true);
 
     // disable browser's contextmenus
-    //document.oncontextmenu = function(){ return false; }
+    document.oncontextmenu = function(){ return false; }
 
     // load body click event
     document.onmousedown = function(){ return rcube_webmail_client.reset_click(); };
@@ -2645,6 +2645,13 @@
     this.set_page_buttons();
     };
 
+  // replace content of quota display
+   this.set_quota = function(text)
+     {
+     if (this.gui_objects.quotadisplay)
+       this.gui_objects.quotadisplay.innerHTML = text;
+     };
+			     
 
   // update the mailboxlist
   this.set_unread_count = function(mbox, count, set_title)
diff --git a/program/lib/utf8.class.php b/program/lib/utf8.class.php
index adcf31b..c0bd0a7 100644
--- a/program/lib/utf8.class.php
+++ b/program/lib/utf8.class.php
@@ -58,10 +58,10 @@
 //Class definition
 Class utf8{
 
-  var $charset = CP1250;
+  var $charset = "ISO-8859-1";
   var $ascMap = array();
   var $utfMap = array();
-  
+
   // made PHP5 capable by RoundCube
   function __construct($charset="ISO-8859-1"){
     $this->loadCharset($charset);
@@ -75,7 +75,7 @@
   //Load charset
   function loadCharset($charset){
     global $utf8_maps;
-    
+
     if (!is_file($utf8_maps[$charset]))
       {
       $this->onError(ERR_OPEN_MAP_FILE, "Failed to open map file for $charset");
@@ -170,4 +170,5 @@
   }
 
 }
-?>
+
+?>
\ No newline at end of file
diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc
index 3d0ceb2..0bde47e 100644
--- a/program/steps/mail/check_recent.inc
+++ b/program/steps/mail/check_recent.inc
@@ -30,7 +30,8 @@
   $commands = sprintf("this.set_unread_count('%s', %d, true);\n", addslashes($mbox), $unread_count);
   $commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
   $commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
-  
+  $commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
+ 
   // add new message headers to list
   $a_headers = array();
   for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
@@ -44,4 +45,4 @@
 
 
 rcube_remote_response($commands);
-?>
\ No newline at end of file
+?>
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 80a32a9..80f69b5 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -145,8 +145,10 @@
     // get recipent address(es) out of the message headers
     if ($header=='to' && $REPLY_MESSAGE['headers']->replyto)
       $fvalue = $IMAP->decode_header($REPLY_MESSAGE['headers']->replyto);
+
     else if ($header=='to' && $REPLY_MESSAGE['headers']->from)
       $fvalue = $IMAP->decode_header($REPLY_MESSAGE['headers']->from);
+
     // add recipent of original message if reply to all
     else if ($header=='cc' && $REPLY_MESSAGE['reply_all'])
       {
@@ -169,7 +171,7 @@
       $fvalue = '';
       foreach ($to_addresses as $addr_part)
         {
-        if (!in_array($addr_part['mailto'], $sa_recipients))
+        if (!in_array($addr_part['mailto'], $sa_recipients) && (!$REPLY_MESSAGE['FROM'] || !in_array($addr_part['mailto'], $REPLY_MESSAGE['FROM'])))
           {
           $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string'];
           $sa_recipients[] = $addr_part['mailto'];
@@ -214,6 +216,8 @@
   $a_recipients = array();
   if ($REPLY_MESSAGE && is_object($REPLY_MESSAGE['headers']))
     {
+    $REPLY_MESSAGE['FROM'] = array();
+
     $a_to = $IMAP->decode_address_list($REPLY_MESSAGE['headers']->to);        
     foreach ($a_to as $addr)
       {
@@ -259,6 +263,9 @@
       // set identity if it's one of the reply-message recipients
       if (in_array($sql_arr['email'], $a_recipients))
         $from_id = $sql_arr['identity_id'];
+        
+      if ($REPLY_MESSAGE && is_array($REPLY_MESSAGE['FROM']))
+        $REPLY_MESSAGE['FROM'][] = $sql_arr['email'];
       }
 
     // overwrite identity selection with post parameter
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 8e0178d..d089dd2 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -545,6 +545,25 @@
   }
 
 
+function rcmail_quota_display($attrib)
+  {
+  global $IMAP, $OUTPUT, $JS_OBJECT_NAME;
+
+  if (!$attrib['id'])
+    $attrib['id'] = 'rcmquotadisplay';
+
+  $OUTPUT->add_script(sprintf("%s.gui_object('quotadisplay', '%s');", $JS_OBJECT_NAME, $attrib['id']));
+
+  // allow the following attributes to be added to the <span> tag
+  $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
+
+
+  $out = '<span' . $attrib_str . '>';
+  $out .= $IMAP->get_quota();
+  $out .= '</span>';
+  return $out;
+  }
+
 
 function rcmail_get_messagecount_text()
   {
@@ -580,9 +599,8 @@
   extract($part);
   
   $block = $plain ? '%s' : '%s'; //'<div style="display:block;">%s</div>';
-  $body = $IMAP->mime_decode($body, $encoding);
+  $body = $IMAP->mime_decode($body, $encoding);  
   $body = $IMAP->charset_decode($body, $parameters);
-
 
   // text/html
   if ($ctype_secondary=='html')
@@ -804,7 +822,7 @@
         }
 
       // part text/[plain|html] OR message/delivery-status
-      else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html')) ||
+      else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') ||
                ($primary_type=='message' && $secondary_type=='delivery-status'))
         {
         $a_return_parts[] = array('type' => 'content',
diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc
index e3c7549..e4da207 100644
--- a/program/steps/mail/move_del.inc
+++ b/program/steps/mail/move_del.inc
@@ -73,6 +73,7 @@
 if ($_action=='moveto')
   $commands .= sprintf("this.set_unread_count('%s', %d);\n", $_GET['_target_mbox'], $IMAP->messagecount($_GET['_target_mbox'], 'UNSEEN'));
 
+$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota()); 
 
 // add new rows from next page (if any)
 if ($_GET['_from']!='show' && $pages>1 && $IMAP->list_page < $pages)
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index ab0c6ed..9d93034 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -115,7 +115,7 @@
   $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];
 
 // add subject
-$headers['Subject'] = rcube_charset_convert(trim(stripslashes($_POST['_subject'])), $input_charset, $message_charset);
+$headers['Subject'] = rcube_charset_convert(trim($_POST['_subject']), $input_charset, $message_charset);
 
 if (strlen($identity_arr['organization']))
   $headers['Organization'] = $identity_arr['organization'];
@@ -144,7 +144,7 @@
   $headers['User-Agent'] = $CONFIG['useragent'];
 
 // fetch message body
-$message_body = rcube_charset_convert(stripslashes($_POST['_message']), $input_charset, $message_charset);
+$message_body = rcube_charset_convert($_POST['_message'], $input_charset, $message_charset);
 
 // append generic footer to all messages
 if (!empty($CONFIG['generic_message_footer']))
@@ -225,7 +225,7 @@
 else
   {
   // unset some headers because they will be added by the mail() function
-  $headers_php = $headers;
+  $headers_php = $MAIL_MIME->_headers;
   $headers_enc = $MAIL_MIME->headers($headers);
   unset($headers_php['To'], $headers_php['Subject']);
 
diff --git a/skins/default/mail.css b/skins/default/mail.css
index bbfe217..a791625 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -749,3 +749,8 @@
   margin-top: 8px;
 }
 
+#rcmquotadisplay
+{
+  color: #999999;
+  font-size: 11px;
+}
diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html
index 0913018..224668e 100644
--- a/skins/default/templates/mail.html
+++ b/skins/default/templates/mail.html
@@ -50,7 +50,8 @@
 <roundcube:label name="select" />:&nbsp;
 <roundcube:button command="select-all" label="all" classAct="active" />&nbsp;
 <roundcube:button command="select-all" prop="unread" label="unread" classAct="active" />&nbsp;
-<roundcube:button command="select-none" label="none" classAct="active" />
+<roundcube:button command="select-none" label="none" classAct="active" /> &nbsp;&nbsp;&nbsp;
+<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" />
 </div>
 
 </body>

--
Gitblit v1.9.1