X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fread_body.php;h=d7e9b3e96f58186baa9bf35f64b9f21637d9cdb6;hp=1a1ea11954fd77aede058074ce4818072920484a;hb=6cb3431f3b0a8210b2ec48df3a10af36b0336bf4;hpb=899d71a793405e2d86ec1598f31c41dbd7d70df0 diff --git a/src/read_body.php b/src/read_body.php index 1a1ea119..d7e9b3e9 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -6,7 +6,7 @@ * This file is used for reading the msgs array and displaying * the resulting emails in the right frame. * - * @copyright © 1999-2007 The SquirrelMail Project Team + * @copyright 1999-2013 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -206,7 +206,7 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { if ($special_encoding) { $mime_header->encoding = $special_encoding; } else { - $mime_header->encoding = 'us-ascii'; + $mime_header->encoding = '7bit'; } if ($default_charset) { $mime_header->parameters['charset'] = $default_charset; @@ -230,7 +230,7 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { $mime_header = new MessageHeader; $mime_header->type0 = 'message'; $mime_header->type1 = 'disposition-notification'; - $mime_header->encoding = 'us-ascii'; + $mime_header->encoding = '7bit'; $part2->mime_header = $mime_header; $composeMessage = new Message(); @@ -255,11 +255,12 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { } else { require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php'); $deliver = new Deliver_SMTP(); - global $smtpServerAddress, $smtpPort, $pop_before_smtp; + global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host; $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false; + if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress; get_smtp_user($user, $pass); $stream = $deliver->initStream($composeMessage,$domain,0, - $smtpServerAddress, $smtpPort, $user, $pass, $authPop); + $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); } $success = false; if ($stream) { @@ -272,7 +273,7 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { if (! empty($deliver->dlv_server_msg)) { $msg.= "\n" . _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' . - nl2br(htmlspecialchars($deliver->dlv_server_msg)); + nl2br(sm_encode_html_special_chars($deliver->dlv_server_msg)); } plain_error_message($msg); } else { @@ -357,7 +358,7 @@ function formatRecipientString($recipients, $item ) { $a[] = array( // note: decodeHeader is htmlsafe by default 'Name' => decodeHeader($r->getAddress(false)), - 'Email' => htmlspecialchars($r->getEmail()), + 'Email' => sm_encode_html_special_chars($r->getEmail()), 'Full' => decodeHeader($r->getAddress(true)) ); } @@ -458,13 +459,21 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, /** * Format message toolbar * - * @param array $aMailbox Current mailbox information array - * @param int $passed_id UID of current message - * @param int $passed_ent_id Id of entity within message - * @param object $message Current message object - * @param object $mbx_response + * @param array $aMailbox Current mailbox information array + * @param int $passed_id UID of current message + * @param int $passed_ent_id Id of entity within message + * @param object $message Current message object + * @param void $removedVar This parameter is no longer used, but remains + * so as not to break this function's prototype + * (OPTIONAL) + * @param boolean $nav_on_top When TRUE, the menubar is being constructed + * for use at the top of the page, otherwise it + * will be used for page bottom (OPTIONAL; + * default = TRUE) */ -function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removedVar, $nav_on_top = TRUE) { +function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, + $removedVar=FALSE, $nav_on_top=TRUE) { + global $base_uri, $draft_folder, $where, $what, $sort, $startMessage, $PHP_SELF, $save_as_draft, $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox, @@ -545,7 +554,8 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed '&mailbox='.$urlMailbox.'&sort='.$sort. '&startMessage='.$startMessage.'&show_more=0'. "&where=$where&what=$what" . - '&delete_id='.$passed_id; + '&delete_id='.$passed_id . + '&smtoken='.sm_generate_security_token(); } if ($next >= 0) { @@ -553,7 +563,8 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed '&mailbox='.$urlMailbox.'&sort='.$sort. '&startMessage='.$startMessage.'&show_more=0'. "&where=$where&what=$what" . - '&delete_id='.$passed_id; + '&delete_id='.$passed_id . + '&smtoken='.sm_generate_security_token(); } } } @@ -619,8 +630,8 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed // If Draft folder - create Resume link $resume_draft = $edit_as_new = false; - if (($mailbox == $draft_folder) && ($save_as_draft)) { - $resume_draft = true; 'smaction_draft'; + if (isDraftMailbox($mailbox) && ($save_as_draft)) { + $resume_draft = true; } else if (handleAsSent($mailbox)) { $edit_as_new = true; } @@ -657,6 +668,33 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->assign('can_be_copied', false); } + // access keys... only add to the top menubar, because adding + // them twice makes them less functional (press access key, *then* + // press to make it work) + // + if ($nav_on_top) { + global $accesskey_read_msg_reply, $accesskey_read_msg_reply_all, + $accesskey_read_msg_forward, $accesskey_read_msg_as_attach, + $accesskey_read_msg_delete, $accesskey_read_msg_bypass_trash, + $accesskey_read_msg_move, $accesskey_read_msg_move_to, + $accesskey_read_msg_copy; + } else { + $accesskey_read_msg_reply = $accesskey_read_msg_reply_all = + $accesskey_read_msg_forward = $accesskey_read_msg_as_attach = + $accesskey_read_msg_delete = $accesskey_read_msg_bypass_trash = + $accesskey_read_msg_move = $accesskey_read_msg_move_to = + $accesskey_read_msg_copy = 'NONE'; + } + $oTemplate->assign('accesskey_read_msg_reply', $accesskey_read_msg_reply); + $oTemplate->assign('accesskey_read_msg_reply_all', $accesskey_read_msg_reply_all); + $oTemplate->assign('accesskey_read_msg_forward', $accesskey_read_msg_forward); + $oTemplate->assign('accesskey_read_msg_as_attach', $accesskey_read_msg_as_attach); + $oTemplate->assign('accesskey_read_msg_delete', $accesskey_read_msg_delete); + $oTemplate->assign('accesskey_read_msg_bypass_trash', $accesskey_read_msg_bypass_trash); + $oTemplate->assign('accesskey_read_msg_move_to', $accesskey_read_msg_move_to); + $oTemplate->assign('accesskey_read_msg_move', $accesskey_read_msg_move); + $oTemplate->assign('accesskey_read_msg_copy', $accesskey_read_msg_copy); + global $null; do_hook('read_body_menu', $null); @@ -688,22 +726,25 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { } $url = $base_uri.'src/view_header.php?'.$query_string; - if ( checkForJavaScript() ) { - $pf_params = 'javascript:printThis();'; - } else { - $pf_params = set_url_var($PHP_SELF, 'print', '1'); - } - $links = array(); $links[] = array ( 'URL' => $url, 'Text' => _("View Full Header") ); - $links[] = array ( - 'URL' => $pf_params, + + if ( checkForJavaScript() ) { + $links[] = array ( + 'URL' => 'javascript:printThis();', + 'Text' => _("Print"), + ); + } else { + $links[] = array ( + 'URL' => set_url_var($PHP_SELF, 'print', '1'), 'Text' => _("Print"), 'Target' => '_blank' ); + } + $links[] = array ( 'URL' => $download_href, 'Text' => _("Download this as a file") @@ -777,12 +818,10 @@ if ( sqgetGlobalVar('account', $temp, SQ_GET) ) { } /** GET/POST VARS */ +sqgetGlobalVar('passed_id', $passed_id, SQ_INORDER, NULL, SQ_TYPE_BIGINT); sqgetGlobalVar('passed_ent_id', $passed_ent_id); sqgetGlobalVar('mailbox', $mailbox); -if ( sqgetGlobalVar('passed_id', $temp) ) { - $passed_id = (int) $temp; -} if ( sqgetGlobalVar('sort', $temp) ) { $sort = (int) $temp; } @@ -928,6 +967,14 @@ if (isset($passed_ent_id) && $passed_ent_id) { } $header = $message->header; +// gmail does not mark messages as read when retrieving the message body +// even though RFC 3501, section 6.4.5 (FETCH Command) says: +// "The \Seen flag is implicitly set; if this causes the flags to change, +// they SHOULD be included as part of the FETCH responses." +// +if ($imap_server_type == 'gmail') { + sqimap_toggle_flag($imapConnection, $passed_id, '\\Seen', true, true); +} /****************************************/ /* Block for handling incoming url vars */ @@ -947,6 +994,8 @@ if (isset($sendreceipt)) { /* End of block for handling incoming url vars */ /***********************************************/ +$oTemplate->assign('aAttribs', array('class' => 'entity_sep')); +$hr = $oTemplate->fetch('horizontal_rule.tpl'); $messagebody = ''; do_hook('read_body_top', $null); if ($show_html_default == 1) { @@ -958,7 +1007,7 @@ $cnt = count($ent_ar); for ($i = 0; $i < $cnt; $i++) { $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox); if ($i != $cnt-1) { - $messagebody .= '
'; + $messagebody .= $hr; } }