From cb15aaa2654c00ecc78880c7daec7acee6fa61ec Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Mon, 27 Oct 2008 13:49:05 -0400 Subject: [PATCH] Also check for negative image size + set caching headers for 1 hour --- program/steps/mail/compose.inc | 141 ++++++++++++++++++++++++++-------------------- 1 files changed, 80 insertions(+), 61 deletions(-) diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 151b461..df6f1ff 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -81,11 +81,15 @@ } // add some labels to client -rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved', 'converting'); +$OUTPUT->add_label('nosubject', 'nosenderwarning', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved', 'converting'); -// add config parameter to client script -$OUTPUT->set_env('draft_autosave', !empty($CONFIG['drafts_mbox']) ? $CONFIG['draft_autosave'] : 0); - +// add config parameters to client script +if (!empty($CONFIG['drafts_mbox'])) { + $OUTPUT->set_env('drafts_mailbox', $CONFIG['drafts_mbox']); + $OUTPUT->set_env('draft_autosave', $CONFIG['draft_autosave']); +} +// set current mailbox in client environment +$OUTPUT->set_env('mailbox', $IMAP->get_mailbox_name()); // get reference message and set compose mode if ($msg_uid = $_SESSION['compose']['param']['_reply_uid']) @@ -215,7 +219,7 @@ if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE->compose_from - || !in_array($addr_part['mailto'], $MESSAGE->compose_from) + || !in_array_nocase($addr_part['mailto'], $MESSAGE->compose_from) || count($to_addresses)==1)) // allow reply to yourself { $fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string']; @@ -279,7 +283,7 @@ foreach ($a_to as $addr) { if (!empty($addr['mailto'])) - $a_recipients[] = $addr['mailto']; + $a_recipients[] = rc_strtolower($addr['mailto']); } if (!empty($MESSAGE->headers->cc)) @@ -288,7 +292,7 @@ foreach ($a_cc as $addr) { if (!empty($addr['mailto'])) - $a_recipients[] = $addr['mailto']; + $a_recipients[] = rc_strtolower($addr['mailto']); } } } @@ -322,19 +326,22 @@ } } - // 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 ($compose_mode == RCUBE_COMPOSE_REPLY && is_array($MESSAGE->compose_from)) $MESSAGE->compose_from[] = $sql_arr['email']; - if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE->headers->from, $sql_arr['email'])) - $from_id = $sql_arr['identity_id']; + if (empty($_POST['_from'])) + { + // set draft's identity + if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE->headers->from, $sql_arr['email'])) + $from_id = $sql_arr['identity_id']; + // set identity if it's one of the reply-message recipients (with prio for default identity) + else if (in_array(rc_strtolower($sql_arr['email']), $a_recipients) && (empty($from_id) || $sql_arr['standard'])) + $from_id = $sql_arr['identity_id']; + } } // overwrite identity selection with post parameter - if (isset($_POST['_from'])) + if (!empty($_POST['_from'])) $from_id = get_input_value('_from', RCUBE_INPUT_POST); $out = $select_from->show($from_id); @@ -476,7 +483,7 @@ $attrib['id'], JS_OBJECT_NAME), 'foot'); - rcube_add_label('checking'); + $OUTPUT->add_label('checking'); $OUTPUT->set_env('spellcheck_langs', join(',', $editor_lang_set)); } @@ -492,41 +499,45 @@ if (! $bodyIsHtml) { - // soft-wrap message first - $body = rcmail_wrap_quoted($body, 75); - - // split body into single lines - $a_lines = preg_split('/\r?\n/', $body); - - // add > to each line - for($n=0; $n<sizeof($a_lines); $n++) - { - if (strpos($a_lines[$n], '>')===0) - $a_lines[$n] = '>'.$a_lines[$n]; - else - $a_lines[$n] = '> '.$a_lines[$n]; - } - - $body = join("\n", $a_lines); - - // add title line - $prefix = sprintf("On %s, %s wrote:\n", - $MESSAGE->headers->date, - $MESSAGE->get_header('from')); - // try to remove the signature - if ($sp = strrpos($body, '-- ')) + if (($sp = strrpos($body, '-- ')) !== false && ($sp == 0 || $body{$sp-1} == "\n")) { if ($body{$sp+3}==' ' || $body{$sp+3}=="\n" || $body{$sp+3}=="\r") - $body = substr($body, 0, $sp-1); + $body = substr($body, 0, max(0, $sp-1)); } + + // soft-wrap message first + $body = rcmail_wrap_quoted($body, 75); + + $body = rtrim($body, "\r\n"); + + if ($body) { + // split body into single lines + $a_lines = preg_split('/\r?\n/', $body); + + // add > to each line + for($n=0; $n<sizeof($a_lines); $n++) { + if (strpos($a_lines[$n], '>')===0) + $a_lines[$n] = '>'.$a_lines[$n]; + else + $a_lines[$n] = '> '.$a_lines[$n]; + } + + $body = join("\n", $a_lines); + } + + // add title line(s) + $prefix = wordwrap(sprintf("On %s, %s wrote:\n", + $MESSAGE->headers->date, + $MESSAGE->get_header('from')), 76); + $suffix = ''; } else { $prefix = sprintf("On %s, %s wrote:<br />\n", $MESSAGE->headers->date, - htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); + htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset())); $prefix .= '<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%">'; $suffix = "</blockquote>"; @@ -543,11 +554,14 @@ if (!$bodyIsHtml) { - $prefix = sprintf("\n\n\n-------- Original Message --------\nSubject: %s\nDate: %s\nFrom: %s\nTo: %s\n\n", - $MESSAGE->subject, - $MESSAGE->headers->date, - $MESSAGE->get_header('from'), - $MESSAGE->get_header('to')); + $prefix = "\n\n\n-------- Original Message --------\n"; + $prefix .= 'Subject: ' . $MESSAGE->subject . "\n"; + $prefix .= 'Date: ' . $MESSAGE->headers->date . "\n"; + $prefix .= 'From: ' . $MESSAGE->get_header('from') . "\n"; + $prefix .= 'To: ' . $MESSAGE->get_header('to') . "\n"; + if ($MESSAGE->headers->replyto && $MESSAGE->headers->replyto != $MESSAGE->headers->from) + $prefix .= 'Reply-To: ' . $MESSAGE->get_header('replyto') . "\n"; + $prefix .= "\n"; } else { @@ -557,12 +571,17 @@ "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Subject: </th><td>%s</td></tr>" . "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Date: </th><td>%s</td></tr>" . "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">From: </th><td>%s</td></tr>" . - "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">To: </th><td>%s</td></tr>" . - "</tbody></table><br>", + "<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">To: </th><td>%s</td></tr>", Q($MESSAGE->subject), Q($MESSAGE->headers->date), htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true), - htmlspecialchars(Q($MESSAGE->get_header('to'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); + htmlspecialchars(Q($MESSAGE->get_header('to'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); + + if ($MESSAGE->headers->replyto && $MESSAGE->headers->replyto != $MESSAGE->headers->from) + $prefix .= sprintf("<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Reply-To: </th><td>%s</td></tr>", + htmlspecialchars(Q($MESSAGE->get_header('replyto'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); + + $prefix .= "</tbody></table><br>"; } // add attachments @@ -705,7 +724,7 @@ $button = html::img(array( 'src' => $CONFIG['skin_path'] . $attrib['deleteicon'], 'alt' => rcube_label('delete'), - 'style' => "border:0;padding-right:2px;vertical-align:middle")); + 'style' => "padding-right:2px;vertical-align:middle")); else $button = Q(rcube_label('delete')); @@ -740,14 +759,15 @@ $button = new html_inputfield(array('type' => 'button', 'class' => 'button')); $out = html::div($attrib, - $OUTPUT->form_tag(array('name' => 'form', 'method' => 'post', 'enctype' => 'multipart/form-data')) . - html::div(null, rcmail_compose_attachment_field(array())) . - html::div('hint', rcube_label(array('name' => 'maxuploadsize', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize'))))))) . - html::div('buttons', - $button->show(rcube_label('close'), array('onclick' => "document.getElementById('$attrib[id]').style.visibility='hidden'")) . ' ' . - $button->show(rcube_label('upload'), array('onclick' => JS_OBJECT_NAME . ".command('send-attachment', this.form)"))) + $OUTPUT->form_tag(array('name' => 'form', 'method' => 'post', 'enctype' => 'multipart/form-data'), + html::div(null, rcmail_compose_attachment_field(array())) . + html::div('hint', rcube_label(array('name' => 'maxuploadsize', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize'))))))) . + html::div('buttons', + $button->show(rcube_label('close'), array('onclick' => "document.getElementById('$attrib[id]').style.visibility='hidden'")) . ' ' . + $button->show(rcube_label('upload'), array('onclick' => JS_OBJECT_NAME . ".command('send-attachment', this.form)")) + ) + ) ); - $OUTPUT->add_gui_object('uploadbox', $attrib['id']); return $out; @@ -756,11 +776,10 @@ function rcmail_compose_attachment_field($attrib) { - // allow the following attributes to be added to the <input> tag - $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'size')); - - $out = '<input type="file" name="_attachments[]"'. $attrib_str . " />"; - return $out; + $attrib['type'] = 'file'; + $attrib['name'] = '_attachments[]'; + $field = new html_inputfield($attrib); + return $field->show(); } -- Gitblit v1.9.1