From 63d6e6dfc35e6d82c4a64f37c408794c163becd4 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 28 Sep 2011 15:16:41 -0400 Subject: [PATCH] Bump versions to 0.6 stable --- program/steps/mail/compose.inc | 105 ++++++++++++++++++++++++++++++---------------------- 1 files changed, 60 insertions(+), 45 deletions(-) diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 1934194..5a1f564 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -29,7 +29,7 @@ $MESSAGE = NULL; $COMPOSE_ID = get_input_value('_id', RCUBE_INPUT_GET); -$_SESSION['compose'] = $_SESSION['compose_data'][$COMPOSE_ID]; +$_SESSION['compose'] = $_SESSION['compose_data_'.$COMPOSE_ID]; // Nothing below is called during message composition, only at "new/forward/reply/draft" initialization or // if a compose-ID is given (i.e. when the compose step is opened in a new window/tab). @@ -39,14 +39,14 @@ if ($COMPOSE_ID) raise_error(array('code' => 500, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Invalid session"), true, true); + 'message' => "Invalid compose ID"), true, true); $_SESSION['compose'] = array( 'id' => uniqid(mt_rand()), 'param' => request2param(RCUBE_INPUT_GET), 'mailbox' => $IMAP->get_mailbox_name(), ); - + // process values like "mailto:foo@bar.com?subject=new+message&cc=another" if ($_SESSION['compose']['param']['to']) { // #1486037: remove "mailto:" prefix @@ -59,10 +59,10 @@ $_SESSION['compose']['param'][$f] = $val; } } - + // select folder where to save the sent message $_SESSION['compose']['param']['sent_mbox'] = $RCMAIL->config->get('sent_mbox'); - + // pipe compose parameters thru plugins $plugin = $RCMAIL->plugins->exec_hook('message_compose', $_SESSION['compose']); $_SESSION['compose']['param'] = array_merge($_SESSION['compose']['param'], $plugin['param']); @@ -84,12 +84,12 @@ 'path' => $attach, ); } - + // save attachment if valid if (($attachment['data'] && $attachment['name']) || ($attachment['path'] && file_exists($attachment['path']))) { $attachment = rcmail::get_instance()->plugins->exec_hook('attachment_save', $attachment); } - + if ($attachment['status'] && !$attachment['abort']) { unset($attachment['data'], $attachment['status'], $attachment['abort']); $_SESSION['compose']['attachments'][$attachment['id']] = $attachment; @@ -225,9 +225,11 @@ $MESSAGE->identities = $USER->list_identities(); if (count($MESSAGE->identities)) { - foreach ($MESSAGE->identities as $idx => $sql_arr) { - $email = mb_strtolower(rcube_idn_to_utf8($sql_arr['email'])); - $MESSAGE->identities[$idx]['email_ascii'] = $sql_arr['email']; + foreach ($MESSAGE->identities as $idx => $ident) { + $email = mb_strtolower(rcube_idn_to_utf8($ident['email'])); + + $MESSAGE->identities[$idx]['email_ascii'] = $ident['email']; + $MESSAGE->identities[$idx]['ident'] = format_email_recipient($ident['email'], $ident['name']); $MESSAGE->identities[$idx]['email'] = $email; } } @@ -240,59 +242,76 @@ $MESSAGE->compose['from'] = $_SESSION['compose']['param']['from']; } else if (count($MESSAGE->identities)) { - // extract all recipients of the reply-message $a_recipients = array(); - if ($compose_mode == RCUBE_COMPOSE_REPLY && is_object($MESSAGE->headers)) + $a_names = array(); + + // extract all recipients of the reply-message + if (is_object($MESSAGE->headers) && in_array($compose_mode, array(RCUBE_COMPOSE_REPLY, RCUBE_COMPOSE_FORWARD))) { $a_to = $IMAP->decode_address_list($MESSAGE->headers->to); foreach ($a_to as $addr) { - if (!empty($addr['mailto'])) + if (!empty($addr['mailto'])) { $a_recipients[] = strtolower($addr['mailto']); + $a_names[] = $addr['name']; + } } if (!empty($MESSAGE->headers->cc)) { $a_cc = $IMAP->decode_address_list($MESSAGE->headers->cc); foreach ($a_cc as $addr) { - if (!empty($addr['mailto'])) + if (!empty($addr['mailto'])) { $a_recipients[] = strtolower($addr['mailto']); + $a_names[] = $addr['name']; + } } } } $from_idx = null; - $default_identity = 0; + $default_identity = null; $return_path = $MESSAGE->headers->others['return-path']; // Select identity - foreach ($MESSAGE->identities as $idx => $sql_arr) { + foreach ($MESSAGE->identities as $idx => $ident) { // save default identity ID - if ($sql_arr['standard']) { + if ($ident['standard']) { $default_identity = $idx; } - // we need ascii here - $email = $sql_arr['email_ascii']; - $ident = format_email_recipient($email, $sql_arr['name']); - // select identity - if (in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT, RCUBE_COMPOSE_REPLY))) { - if ($MESSAGE->headers->from == $ident) { + // use From header + if (in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT))) { + if ($MESSAGE->headers->from == $ident['ident']) { $from_idx = $idx; break; } } - // set identity if it's one of the reply-message recipients - else if (in_array($email, $a_recipients) && ($from_idx === null || $sql_arr['standard'])) { + // reply to yourself + else if ($compose_mode == RCUBE_COMPOSE_REPLY && $MESSAGE->headers->from == $ident['ident']) { $from_idx = $idx; + break; } - // set identity when replying to mailing list - else if (strpos($return_path, str_replace('@', '=', $email).'@') !== false) { - $from_idx = $idx; + // use replied message recipients + else if (($found = array_search($ident['email_ascii'], $a_recipients)) !== false) { + // match identity name, prefer default identity + if ($from_idx === null || ($a_names[$found] && $ident['name'] && $a_names[$found] == $ident['name'])) { + $from_idx = $idx; + } } } - // Still no ID, use first identity + // Fallback using Return-Path + if ($from_idx === null && $return_path) { + foreach ($MESSAGE->identities as $idx => $ident) { + if (strpos($return_path, str_replace('@', '=', $ident['email_ascii']).'@') !== false) { + $from_idx = $idx; + break; + } + } + } + + // Still no ID, use default/first identity if ($from_idx === null) { - $from_idx = $default_identity; + $from_idx = $default_identity !== null ? $default_identity : key(reset($MESSAGE->identities)); } $ident = $MESSAGE->identities[$from_idx]; @@ -758,8 +777,13 @@ // build reply prefix $from = array_pop($RCMAIL->imap->decode_address_list($MESSAGE->get_header('from'), 1, false)); - $prefix = sprintf("On %s, %s wrote:", - $MESSAGE->headers->date, $from['name'] ? $from['name'] : rcube_idn_to_utf8($from['mailto'])); + $prefix = rcube_label(array( + 'name' => 'mailreplyintro', + 'vars' => array( + 'date' => format_date($MESSAGE->headers->date, $RCMAIL->config->get('date_long')), + 'sender' => $from['name'] ? $from['name'] : rcube_idn_to_utf8($from['mailto']), + ) + )); if (!$bodyIsHtml) { $body = preg_replace('/\r?\n/', "\n", $body); @@ -1201,20 +1225,11 @@ if (!$attrib['id']) $attrib['id'] = 'rcmUploadbox'; - // Enable upload progress bar - rcube_upload_progress_init(); + // Get filesize, enable upload progress bar + $max_filesize = rcube_upload_init(); - // find max filesize value - $max_filesize = parse_bytes(ini_get('upload_max_filesize')); - $max_postsize = parse_bytes(ini_get('post_max_size')); - if ($max_postsize && $max_postsize < $max_filesize) - $max_filesize = $max_postsize; - - $OUTPUT->set_env('max_filesize', $max_filesize); - $max_filesize = show_bytes($max_filesize); - $button = new html_inputfield(array('type' => 'button')); - + $out = html::div($attrib, $OUTPUT->form_tag(array('name' => 'uploadform', 'method' => 'post', 'enctype' => 'multipart/form-data'), html::div(null, rcmail_compose_attachment_field(array('size' => $attrib['attachmentfieldsize']))) . @@ -1225,7 +1240,7 @@ ) ) ); - + $OUTPUT->add_gui_object('uploadbox', $attrib['id']); return $out; } -- Gitblit v1.9.1