diff --git a/CHANGELOG b/CHANGELOG index 4b0d6cf07..618c51f22 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -62,7 +62,7 @@ CHANGELOG RoundCube Webmail 2005/11/06 ---------- -- Added Finnish, Romanian, Polish, Czech, British and Chinese translation +- Added Finnish, Romanian, Polish, Czech, British, Norwegian and Chinese translation - Get IMAP server capabilities in array - Check for NAMESPACE capability before sending command - Set default user language from config 'locale_string' @@ -76,3 +76,6 @@ CHANGELOG RoundCube Webmail - Added input check for contacts and identities (Patch #1346523) - Added messages/warning to compose step (Patch #1323895) - Added favicon to the default skin +- Fixed Bug #1334337 as far as possible +- Added Reply-To-All functionality + diff --git a/program/js/app.js b/program/js/app.js index 7967f793e..9825c18c1 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -6,7 +6,7 @@ | Copyright (C) 2005, RoundCube Dev, - Switzerland | | Licensed under the GNU GPL | | | - | Modified: 2005/11/06 (roundcube) | + | Modified: 2005/11/08 (roundcube) | | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli | @@ -118,7 +118,7 @@ function rcube_webmail() if (this.env.action=='show') { - this.enable_command('show', 'reply', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true); + this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true); if (this.env.next_uid) this.enable_command('nextmessage', true); if (this.env.prev_uid) @@ -727,12 +727,13 @@ function rcube_webmail() this.upload_file(props) break; + case 'reply-all': case 'reply': var uid; if (uid = this.get_single_uid()) { this.set_busy(true); - location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox); + location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox)+(command=='reply-all' ? '&_all=1' : ''); } break; @@ -1036,7 +1037,7 @@ function rcube_webmail() // enable/disable commands for message if (this.task=='mail') { - this.enable_command('show', 'reply', 'forward', 'print', selected); + this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected); this.enable_command('delete', 'moveto', this.selection.length>0 ? true : false); } else if (this.task=='addressbook') diff --git a/program/localization/ca/labels.inc b/program/localization/ca/labels.inc index f6b287769..b4e7aa037 100644 --- a/program/localization/ca/labels.inc +++ b/program/localization/ca/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Avui'; // toolbar buttons $labels['writenewmessage'] = 'Crear nou missatge'; $labels['replytomessage'] = 'Respondre el missatge'; +$labels['replytoallmessage'] = 'Respondre a tots'; $labels['forwardmessage'] = 'Reenviar el missatge'; $labels['deletemessage'] = 'Moure el missatge a la paperera'; $labels['printmessage'] = 'Imprimir aquest missatge'; diff --git a/program/localization/da/labels.inc b/program/localization/da/labels.inc index bec439d86..4df394cbe 100644 --- a/program/localization/da/labels.inc +++ b/program/localization/da/labels.inc @@ -93,6 +93,7 @@ $labels['today'] = 'I dag'; // toolbar buttons $labels['writenewmessage'] = 'Opret en ny besked'; $labels['replytomessage'] = 'Svar på denne besked'; +$labels['replytoallmessage'] = 'Svar alle'; $labels['forwardmessage'] = 'Videresend denne besked'; $labels['deletemessage'] = 'Flyt beskeden til skrald'; $labels['printmessage'] = 'Udskriv denne besked'; diff --git a/program/localization/de/labels.inc b/program/localization/de/labels.inc index fe5bd8e25..4bbb14c95 100644 --- a/program/localization/de/labels.inc +++ b/program/localization/de/labels.inc @@ -92,6 +92,7 @@ $labels['today'] = 'Heute'; // toolbar buttons // Symbolleisten-Tipps $labels['writenewmessage'] = 'Neue Nachricht schreiben'; $labels['replytomessage'] = 'Antwort verfassen'; +$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger'; $labels['forwardmessage'] = 'Nachricht weiterleiten'; $labels['deletemessage'] = 'In den Papierkorb verschieben'; $labels['printmessage'] = 'Diese Nachricht drucken'; diff --git a/program/localization/en/labels.inc b/program/localization/en/labels.inc index 34d46a3ea..35813cdb0 100644 --- a/program/localization/en/labels.inc +++ b/program/localization/en/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Today'; // toolbar buttons $labels['writenewmessage'] = 'Create a new message'; $labels['replytomessage'] = 'Reply to the message'; +$labels['replytoallmessage'] = 'Reply to sender an all recipients'; $labels['forwardmessage'] = 'Forward the message'; $labels['deletemessage'] = 'Move message to trash'; $labels['printmessage'] = 'Print this message'; diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 9efd1ff77..d1a274971 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Today'; // toolbar buttons $labels['writenewmessage'] = 'Create a new message'; $labels['replytomessage'] = 'Reply to the message'; +$labels['replytoallmessage'] = 'Reply to sender an all recipients'; $labels['forwardmessage'] = 'Forward the message'; $labels['deletemessage'] = 'Move message to trash'; $labels['printmessage'] = 'Print this message'; diff --git a/program/localization/es/labels.inc b/program/localization/es/labels.inc index bd800361e..19bad2187 100644 --- a/program/localization/es/labels.inc +++ b/program/localization/es/labels.inc @@ -90,6 +90,7 @@ $labels['today'] = 'Hoy'; // toolbar buttons $labels['writenewmessage'] = 'Crear nuevo mensaje'; $labels['replytomessage'] = 'Responder al mensaje'; +$labels['replytoallmessage'] = 'Responder a todos'; $labels['forwardmessage'] = 'Reenviar mensaje'; $labels['deletemessage'] = 'Move message to trash'; $labels['printmessage'] = 'Imprimir este mensaje'; diff --git a/program/localization/fi/labels.inc b/program/localization/fi/labels.inc index ba610a0f5..b92ef7941 100644 --- a/program/localization/fi/labels.inc +++ b/program/localization/fi/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'T // toolbar buttons $labels['writenewmessage'] = 'Kirjoita uusi viesti'; $labels['replytomessage'] = 'Vastaa viestiin'; +$labels['replytoallmessage'] = 'Vastaa kaikille'; $labels['forwardmessage'] = 'Välitä viesti'; $labels['deletemessage'] = 'Siirrä viesti roskakoriin'; $labels['printmessage'] = 'Tulosta viesti'; diff --git a/program/localization/fr/labels.inc b/program/localization/fr/labels.inc index 5b9251820..c429d5b03 100644 --- a/program/localization/fr/labels.inc +++ b/program/localization/fr/labels.inc @@ -90,6 +90,7 @@ $labels['today'] = 'Aujourd\'hui'; // toolbar buttons $labels['writenewmessage'] = 'Créer un nouveau message'; $labels['replytomessage'] = 'Répondre au message'; +$labels['replytoallmessage'] = 'Répondre ā tous'; $labels['forwardmessage'] = 'Transmettre le message'; $labels['deletemessage'] = 'Déplacer le message dans la corbeille'; $labels['printmessage'] = 'Imprimer ce message'; diff --git a/program/localization/it/labels.inc b/program/localization/it/labels.inc index 3eba8b6be..111a1ac43 100644 --- a/program/localization/it/labels.inc +++ b/program/localization/it/labels.inc @@ -90,6 +90,7 @@ $labels['today'] = 'Oggi'; // toolbar buttons $labels['writenewmessage'] = 'Crea un nuovo messaggio'; $labels['replytomessage'] = 'Rispondi al messaggio'; +$labels['replytoallmessage'] = 'Rispondi a tutti'; $labels['forwardmessage'] = 'Inoltra il messaggio'; $labels['deletemessage'] = 'Sposta il messaggio nel cestino'; $labels['printmessage'] = 'Stampa questo messaggio'; diff --git a/program/localization/nl/labels.inc b/program/localization/nl/labels.inc index 464d93937..b8158bde3 100644 --- a/program/localization/nl/labels.inc +++ b/program/localization/nl/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Vandaag'; // toolbar buttons $labels['writenewmessage'] = 'Schrijf een nieuw bericht'; $labels['replytomessage'] = 'Beantwoord het bericht'; +$labels['replytoallmessage'] = 'Beantwoord allen'; $labels['forwardmessage'] = 'Stuur bericht door'; $labels['deletemessage'] = 'Verplaats bericht naar prullenbak'; $labels['printmessage'] = 'Print dit bericht'; diff --git a/program/localization/pt/labels.inc b/program/localization/pt/labels.inc index 30710ba39..6ca4dfa01 100644 --- a/program/localization/pt/labels.inc +++ b/program/localization/pt/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Hoje'; // toolbar buttons $labels['writenewmessage'] = 'Criar nova mensagem'; $labels['replytomessage'] = 'Responder a mensagem'; +$labels['replytoallmessage'] = 'Responder a todos'; $labels['forwardmessage'] = 'Reencaminhar a mensagem'; $labels['deletemessage'] = 'Mover a mensagem para a reciclagem'; $labels['printmessage'] = 'Imprimir esta mensagem'; diff --git a/program/localization/pt_BR/labels.inc b/program/localization/pt_BR/labels.inc index 00867462c..e0c325684 100644 --- a/program/localization/pt_BR/labels.inc +++ b/program/localization/pt_BR/labels.inc @@ -94,6 +94,7 @@ $labels['today'] = 'Hoje'; // toolbar buttons $labels['writenewmessage'] = 'Criar nova mensagem'; $labels['replytomessage'] = 'Responder'; +$labels['replytoallmessage'] = 'Responder a todos'; $labels['forwardmessage'] = 'Encaminhar'; $labels['deletemessage'] = 'Mover para a lixeira'; $labels['printmessage'] = 'Imprimir'; diff --git a/program/localization/ro/labels.inc b/program/localization/ro/labels.inc index 3d5f9dcf9..b7cab4d62 100644 --- a/program/localization/ro/labels.inc +++ b/program/localization/ro/labels.inc @@ -90,6 +90,7 @@ $labels['today'] = 'Astazi'; // toolbar buttons $labels['writenewmessage'] = 'Creaza mesaj nou'; $labels['replytomessage'] = 'Raspunde la mesaj'; +$labels['replytoallmessage'] = 'Raspunde la toti'; $labels['forwardmessage'] = 'Trimite mesaj mai departe'; $labels['deletemessage'] = 'Muta mesaj la gunoi'; $labels['printmessage'] = 'Printeaza mesaj'; diff --git a/program/localization/se/labels.inc b/program/localization/se/labels.inc index 13930bb3f..7e06e459a 100644 --- a/program/localization/se/labels.inc +++ b/program/localization/se/labels.inc @@ -91,6 +91,7 @@ $labels['today'] = 'Idag'; // toolbar buttons $labels['writenewmessage'] = 'Skapa nytt meddelande'; $labels['replytomessage'] = 'Svar på meddelande'; +$labels['replytoallmessage'] = 'Svara alla'; $labels['forwardmessage'] = 'Skicka vidare meddelande'; $labels['deletemessage'] = 'Flytta till papperskorgen'; $labels['printmessage'] = 'Skriv ut'; diff --git a/program/localization/se/messages.inc b/program/localization/se/messages.inc index 7ec1e9861..a5f9f73be 100644 --- a/program/localization/se/messages.inc +++ b/program/localization/se/messages.inc @@ -32,6 +32,8 @@ $messages['loggedout'] = 'Du har avslutat sessionen. Hej d $messages['mailboxempty'] = 'Mappen är tom'; +$messages['loading'] = 'Laddar....'; + $messages['loadingdata'] = 'Laddar data...'; $messages['messagesent'] = 'Meddelande skickades'; diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index d01e399e6..93fae66ef 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -50,15 +50,18 @@ if ($_GET['_reply_uid'] || $_GET['_forward_uid']) $MESSAGE['structure'] = $mmd->decode(array('include_bodies' => TRUE, 'decode_headers' => TRUE, 'decode_bodies' => FALSE)); - + $MESSAGE['subject'] = $IMAP->decode_header($MESSAGE['headers']->subject); $MESSAGE['parts'] = $mmd->getMimeNumbers($MESSAGE['structure']); if ($_GET['_reply_uid']) { - $REPLY_MESSAGE = $MESSAGE; + $REPLY_MESSAGE = &$MESSAGE; $_SESSION['compose']['reply_uid'] = $_GET['_reply_uid']; $_SESSION['compose']['reply_msgid'] = $REPLY_MESSAGE['headers']->messageID; + + if ($_GET['_all']) + $REPLY_MESSAGE['reply_all'] = 1; } else { @@ -75,6 +78,7 @@ if ($_GET['_reply_uid'] || $_GET['_forward_uid']) function rcmail_compose_headers($attrib) { global $IMAP, $REPLY_MESSAGE, $DB; + static $sa_recipients = array(); list($form_start, $form_end) = get_form_tags($attrib); @@ -144,7 +148,7 @@ function rcmail_compose_headers($attrib) if (!$fname) { $fname = '_cc'; - //$header = 'cc'; + $header = 'cc'; } case 'bcc': if (!$fname) @@ -162,7 +166,7 @@ function rcmail_compose_headers($attrib) break; } - + if ($fname && !empty($_POST[$fname])) $fvalue = $_POST[$fname]; @@ -173,14 +177,37 @@ function rcmail_compose_headers($attrib) $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']) + { + if ($IMAP->decode_header($REPLY_MESSAGE['headers']->to)) + $fvalue .= $IMAP->decode_header($REPLY_MESSAGE['headers']->to); + + if ($IMAP->decode_header($REPLY_MESSAGE['headers']->cc)) + { + if($fvalue) + $fvalue .= ', '; + + $fvalue .= $IMAP->decode_header($REPLY_MESSAGE['headers']->cc); + } + } + // split recipients and put them back together in a unique way - $to_addresses = $IMAP->decode_address_list($fvalue); - $fvalue = ''; - foreach ($to_addresses as $addr_part) - $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string']; + if (!empty($fvalue)) + { + $to_addresses = $IMAP->decode_address_list($fvalue); + $fvalue = ''; + foreach ($to_addresses as $addr_part) + { + if (!in_array($addr_part['mailto'], $sa_recipients)) + { + $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string']; + $sa_recipients[] = $addr_part['mailto']; + } + } + } } - + if ($fname && $field_type) { diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 2bafaebc1..c5505c948 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -138,7 +138,7 @@ if ($CONFIG['useragent']) // create PEAR::Mail_mime instance -$MAIL_MIME = new Mail_mime(); +$MAIL_MIME = new Mail_mime("\n"); $MAIL_MIME->setTXTBody(stripslashes($_POST['_message']), FALSE, TRUE); //$MAIL_MIME->setTXTBody(wordwrap(stripslashes($_POST['_message'])), FALSE, TRUE); diff --git a/skins/default/images/buttons/replyall_act.png b/skins/default/images/buttons/replyall_act.png new file mode 100644 index 000000000..b6ad3fb18 Binary files /dev/null and b/skins/default/images/buttons/replyall_act.png differ diff --git a/skins/default/images/buttons/replyall_pas.png b/skins/default/images/buttons/replyall_pas.png new file mode 100644 index 000000000..948072d9b Binary files /dev/null and b/skins/default/images/buttons/replyall_pas.png differ diff --git a/skins/default/mail.css b/skins/default/mail.css index 739bfed10..5a362c197 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -26,7 +26,7 @@ #messagetoolbar select.mboxlist { position: absolute; - left: 300px; + left: 335px; top: 10px; } diff --git a/skins/default/templates/compose.html b/skins/default/templates/compose.html index dd392bdda..aa28098c8 100644 --- a/skins/default/templates/compose.html +++ b/skins/default/templates/compose.html @@ -105,6 +105,16 @@ function rcmail_toggle_display(id) + +