From 58e3602a37cccab55f71fbf839b32fbc4322699c Mon Sep 17 00:00:00 2001 From: thomascube Date: Sat, 4 Feb 2006 19:08:10 +0000 Subject: Bugfixes for encoding and sending with attachments --- .htaccess | 5 +++-- CHANGELOG | 7 +++++-- SQL/sqlite.initial.sql | 2 +- config/main.inc.php.dist | 2 +- index.php | 1 + program/include/main.inc | 13 ++++++++----- program/include/rcube_imap.inc | 16 ++++++++++++++++ program/js/app.js | 9 ++++++++- program/lib/utf8.class.php | 9 +++++---- program/steps/mail/check_recent.inc | 5 +++-- program/steps/mail/compose.inc | 9 ++++++++- program/steps/mail/func.inc | 24 +++++++++++++++++++++--- program/steps/mail/move_del.inc | 1 + program/steps/mail/sendmail.inc | 6 +++--- skins/default/mail.css | 5 +++++ skins/default/templates/mail.html | 3 ++- 16 files changed, 91 insertions(+), 26 deletions(-) diff --git a/.htaccess b/.htaccess index bb8fb50b6..0a3faf2af 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 Order allow,deny diff --git a/CHANGELOG b/CHANGELOG index c5fa71bd8..c3ba47b1f 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 @@ CHANGELOG RoundCube Webmail - 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 2005/12/16 diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql index 147df7243..b09a3adda 100644 --- a/SQL/sqlite.initial.sql +++ b/SQL/sqlite.initial.sql @@ -31,7 +31,7 @@ CREATE INDEX ix_cache_session_id ON cache(session_id); 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 ac60e4840..e1cb3efac 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -85,7 +85,7 @@ $rcmail_config['session_lifetime'] = 10; // 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 527f4f2d8..d99f24dbd 100644 --- a/index.php +++ b/index.php @@ -63,6 +63,7 @@ ini_set('session.name', 'sessid'); 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 99eaa9128..3c078364e 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -71,7 +71,7 @@ function rcmail_startup($task='mail') // 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 @@ function rcube_charset_convert($str, $from, $to=NULL) 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 @@ function rcube_charset_convert($str, $from, $to=NULL) $str = utf8_encode($str); else if ($from!='UTF-8') { - $conv = new utf8($from); + $conv->loadCharset($from); $str = $conv->strToUtf8($str); } @@ -731,7 +733,7 @@ function rcube_charset_convert($str, $from, $to=NULL) return utf8_decode($str); else if ($to!='UTF-8') { - $conv = new utf8($to); + $conv->loadCharset($to); return $conv->utf8ToStr($str); } @@ -960,6 +962,7 @@ function rcube_xml_command($command, $str_attrib, $a_attrib=NULL) '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 fa13e02cf..cb6b409d9 100644 --- a/program/include/rcube_imap.inc +++ b/program/include/rcube_imap.inc @@ -1057,6 +1057,22 @@ class rcube_imap } + /** + * 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 c216a73f4..4e9a8bfff 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -231,7 +231,7 @@ function rcube_webmail() 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 @@ function rcube_webmail() 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 adcf31bc2..c0bd0a73b 100644 --- a/program/lib/utf8.class.php +++ b/program/lib/utf8.class.php @@ -58,10 +58,10 @@ define("ERR_OPEN_MAP_FILE","ERR_OPEN_MAP_FILE"); //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 @@ Class utf8{ //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 @@ Class utf8{ } } -?> + +?> \ No newline at end of file diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc index 3d0ceb2a9..0bde47ed8 100644 --- a/program/steps/mail/check_recent.inc +++ b/program/steps/mail/check_recent.inc @@ -30,7 +30,8 @@ if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE)) $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 @@ if (strtoupper($mbox)!='INBOX' && $IMAP->messagecount('INBOX', 'RECENT')) 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 80a32a9f3..80f69b596 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -145,8 +145,10 @@ function rcmail_compose_headers($attrib) // 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 @@ function rcmail_compose_headers($attrib) $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 @@ function rcmail_compose_header_from($attrib) $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 @@ function rcmail_compose_header_from($attrib) // 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 8e0178d7a..d089dd272 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -545,6 +545,25 @@ function rcmail_messagecount_display($attrib) } +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 tag + $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id')); + + + $out = ''; + $out .= $IMAP->get_quota(); + $out .= ''; + return $out; + } + function rcmail_get_messagecount_text() { @@ -580,10 +599,9 @@ function rcmail_print_body($part, $safe=FALSE, $plain=FALSE) // $body, $ctype_pr extract($part); $block = $plain ? '%s' : '%s'; //'
%s
'; - $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 @@ function rcmail_parse_message($structure, $arg=array(), $recursive=FALSE) } // 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 e3c7549b4..e4da207f4 100644 --- a/program/steps/mail/move_del.inc +++ b/program/steps/mail/move_del.inc @@ -73,6 +73,7 @@ $commands .= sprintf("this.set_unread_count('%s', %d);\n", $mbox, $IMAP->message 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 ab0c6ed07..9d9303436 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -115,7 +115,7 @@ if (strlen($identity_arr['bcc'])) $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 @@ if ($CONFIG['useragent']) $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 @@ if ($CONFIG['smtp_server']) 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 bbfe217c3..a791625d3 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -749,3 +749,8 @@ div.message-part pre margin-top: 8px; } +#rcmquotadisplay +{ + color: #999999; + font-size: 11px; +} diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html index 0913018f2..224668e66 100644 --- a/skins/default/templates/mail.html +++ b/skins/default/templates/mail.html @@ -50,7 +50,8 @@     - +     +: -- cgit v1.2.3