X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fread_body.php;h=fce8783e244688123968846b7e36299d1170f0ac;hb=bca7d6d28efd050d2493f7c860f91518b30e1042;hp=7078c95ef0035cedf731a965e6540234bbcfde93;hpb=628bce99c404e37bbebc40555b591ed101400671;p=squirrelmail.git diff --git a/src/read_body.php b/src/read_body.php index 7078c95e..fce8783e 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -6,12 +6,15 @@ * This file is used for reading the msgs array and displaying * the resulting emails in the right frame. * - * @copyright © 1999-2006 The SquirrelMail Project Team + * @copyright © 1999-2007 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail */ +/** This is the read_body page */ +define('PAGE_NAME', 'read_body'); + /** * Include the SquirrelMail initialization file. */ @@ -124,10 +127,10 @@ function ServerMDNSupport($aFlags) { in_array('\\*',$aFlags,true) ) ; } -function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { - global $username, $attachment_dir, $popuser, $username, $color, - $version, $squirrelmail_language, $default_charset, - $languages, $useSendmail, $domain, $sent_folder; +function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { + global $squirrelmail_language, $default_charset, $default_move_to_sent, + $languages, $useSendmail, $domain, $sent_folder, $username, + $data_dir; sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); @@ -143,38 +146,29 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { } $rfc822_header->content_type = $content_type; $rfc822_header->to[] = $header->dnt; - $rfc822_header->subject = _("Read:") . ' ' . encodeHeader($header->subject); - - // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md) - // This merely comes from compose.php and only happens when there is no - // email_addr specified in user's identity (which is the startup config) - if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) { - $popuser = $usernamedata[1]; - $domain = $usernamedata[2]; - unset($usernamedata); - } else { - $popuser = $username; - } + $rfc822_header->subject = _("Read:") . ' ' . decodeHeader($header->subject,true,false); - $reply_to = ''; - $ident = get_identities(); - if(!isset($identity)) $identity = 0; - $full_name = $ident[$identity]['full_name']; - $from_mail = $ident[$identity]['email_address']; - $from_addr = '"'.$full_name.'" <'.$from_mail.'>'; - $reply_to = $ident[$identity]['reply_to']; - - if (!$from_mail) { - $from_mail = "$popuser@$domain"; - $from_addr = $from_mail; + $idents = get_identities(); + $needles = array(); + if ($header->to) { + foreach ($header->to as $message_to) { + $needles[] = $message_to->mailbox.'@'.$message_to->host; + } } + $identity = find_identity($needles); + $from_addr = build_from_header($identity); + $reply_to = isset($idents[$identity]['reply_to']) ? $idents[$identity]['reply_to'] : ''; + // FIXME: this must actually be the envelope address of the orginal message, + // but do we have that information? For now the first identity is our best guess. + $final_recipient = $idents[0]['email_address']; + $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true); if ($reply_to) { $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true); } // part 1 (RFC2298) - $senton = getLongDateString( $header->date ); + $senton = getLongDateString( $header->date, $header->date_unparsed ); $to_array = $header->to; $to = ''; foreach ($to_array as $line) { @@ -223,11 +217,10 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { $original_recipient = $to; $original_message_id = $header->message_id; - $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n"; + $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version " . SM_VERSION . ") \r\n"; if ($original_recipient != '') { $report .= "Original-Recipient : $original_recipient\r\n"; } - $final_recipient = $sender; $report .= "Final-Recipient: rfc822; $final_recipient\r\n" . "Original-Message-ID : $original_message_id\r\n" . "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; @@ -270,7 +263,7 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { } $success = false; if ($stream) { - $length = $deliver->mail($composeMessage, $stream); + $deliver->mail($composeMessage, $stream); $success = $deliver->finalizeStream($stream); } if (!$success) { @@ -281,15 +274,40 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' . nl2br(htmlspecialchars($deliver->dlv_server_msg)); } - plain_error_message($msg, $color); + plain_error_message($msg); } else { unset ($deliver); - if (sqimap_mailbox_exists ($imapConnection, $sent_folder)) { - $sid = sqimap_append ($imapConnection, $sent_folder, $length); + + // move to sent folder + // + $move_to_sent = getPref($data_dir,$username,'move_to_sent'); + if (isset($default_move_to_sent) && ($default_move_to_sent != 0)) { + $svr_allow_sent = true; + } else { + $svr_allow_sent = false; + } + + if (isset($sent_folder) && (($sent_folder != '') || ($sent_folder != 'none')) + && sqimap_mailbox_exists( $imapConnection, $sent_folder)) { + $fld_sent = true; + } else { + $fld_sent = false; + } + + if ((isset($move_to_sent) && ($move_to_sent != 0)) || (!isset($move_to_sent))) { + $lcl_allow_sent = true; + } else { + $lcl_allow_sent = false; + } + + if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) { + $save_reply_with_orig=getPref($data_dir,$username,'save_reply_with_orig'); + if ($save_reply_with_orig) { + $sent_folder = $mailbox; + } require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php'); $imap_deliver = new Deliver_IMAP(); - $imap_deliver->mail($composeMessage, $imapConnection); - sqimap_append_done ($imapConnection, $sent_folder); + $imap_deliver->mail($composeMessage, $imapConnection, 0, 0, $sent_folder); unset ($imap_deliver); } } @@ -304,7 +322,7 @@ function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) { } function formatRecipientString($recipients, $item ) { - global $show_more_cc, $show_more, $show_more_bcc, + global $show_more, $show_more_cc, $show_more_bcc, $PHP_SELF, $oTemplate; $string = ''; @@ -337,9 +355,10 @@ function formatRecipientString($recipients, $item ) { $a = array(); foreach ($recipients as $r) { $a[] = array( - 'Name' => htmlspecialchars($r->getAddress(false)), + // note: decodeHeader is htmlsafe by default + 'Name' => decodeHeader($r->getAddress(false)), 'Email' => htmlspecialchars($r->getEmail()), - 'Full' => htmlspecialchars($r->getAddress(true)) + 'Full' => decodeHeader($r->getAddress(true)) ); } @@ -372,7 +391,7 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $env[_("From")] = _("Unknown sender"); else $env[_("From")] = decodeHeader($from_name); - $env[_("Date")] = getLongDateString($header->date); + $env[_("Date")] = getLongDateString($header->date, $header->date_unparsed); $env[_("To")] = formatRecipientString($header->to, "to"); $env[_("Cc")] = formatRecipientString($header->cc, "cc"); $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc"); @@ -384,17 +403,20 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $oTemplate->assign('xmailer', decodeHeader($header->xmailer)); $env[_("Mailer")] = $oTemplate->fetch('read_xmailer.tpl'); } + + // this is used for both mdn and also general use for plugins, etc + $oTemplate->assign('first_time_reading', $FirstTimeSee); + if ($default_use_mdn) { if ($mdn_user_support) { if ($header->dnt) { $mdn_url = $PHP_SELF; - $mdn_url = set_url_var($PHP_SELF, 'mailbox', urlencode($mailbox)); - $mdn_url = set_url_var($PHP_SELF, 'passed_id', $passed_id); - $mdn_url = set_url_var($PHP_SELF, 'passed_ent_id', $passed_ent_id); - $mdn_url = set_url_var($PHP_SELF, 'sendreceipt', 1); + $mdn_url = set_url_var($mdn_url, 'mailbox', urlencode($mailbox)); + $mdn_url = set_url_var($mdn_url, 'passed_id', $passed_id); + $mdn_url = set_url_var($mdn_url, 'passed_ent_id', $passed_ent_id); + $mdn_url = set_url_var($mdn_url, 'sendreceipt', 1); $oTemplate->assign('read_receipt_sent', $message->is_mdnsent); - $oTemplate->assign('first_time_reading', $FirstTimeSee); $oTemplate->assign('send_receipt_href', $mdn_url); $env[_("Read Receipt")] = $oTemplate->fetch('read_handle_receipt.tpl'); @@ -436,7 +458,7 @@ function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, /** * Format message toolbar * - * @param string $mailbox Name of current mailbox + * @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 @@ -455,8 +477,6 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $urlMailbox = urlencode($mailbox); - $msgs_url = $base_uri . 'src/'; - // Create Prev & Next links // Handle nested entities first (i.e. Mime Attach parts) $prev_href = $next_href = $up_href = $del_href = $del_prev_href = $del_next_href = ''; @@ -538,11 +558,11 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed } } - // Start with Search Results or Message List link. - $list_xtra = "?where=read_body.php&what=$what&mailbox=" . $urlMailbox. - "&startMessage=$startMessage"; - $msg_list_href = $base_uri .'src/right_main.php'. $list_xtra; - $search_href = $where=='search.php' ? $base_uri .'src/search.php?'.$list_xtra : ''; + $msg_list_href = get_message_list_uri($aMailbox['NAME'], $startMessage, $what); + if ($where == 'search.php') + $search_href = str_replace('read_body.php', 'search.php', $msg_list_href); + else + $search_href = ''; $comp_uri = $base_uri.'src/compose.php' . '?passed_id=' . $passed_id . @@ -553,7 +573,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed // Start form for reply/reply all/forward.. $target = ''; $on_click=''; - $method='method="post" '; + $method='post'; $onsubmit=''; if ($compose_new_win == '1') { if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) { @@ -563,12 +583,12 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $compose_height = '550'; } if ( checkForJavascript() ) { - $on_click=' onclick="comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')"'; + $on_click='comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')'; $comp_uri = 'javascript:void(0)'; - $method='method="get" '; - $onsubmit = 'onsubmit="return false" '; + $method='get'; + $onsubmit = 'return false'; } else { - $target = 'target="_blank"'; + $target = '_blank'; } } @@ -584,7 +604,10 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->assign('message_list_href', $msg_list_href); $oTemplate->assign('search_href', $search_href); - $oTemplate->assign('form_extra', $method . $target . $onsubmit); + $oTemplate->assign('form_extra', ''); + $oTemplate->assign('form_method', $method); + $oTemplate->assign('form_target', $target); + $oTemplate->assign('form_onsubmit', $onsubmit); $oTemplate->assign('compose_href', $comp_uri); $oTemplate->assign('button_onclick', $on_click); $oTemplate->assign('forward_as_attachment_enabled', $enable_forward_as_attachment==1); @@ -634,6 +657,9 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->assign('can_be_copied', false); } + global $null; + do_hook('read_body_menu', $null); + if ($nav_on_top) { $oTemplate->display('read_menubar_nav.tpl'); $oTemplate->display('read_menubar_buttons.tpl'); @@ -642,8 +668,6 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->display('read_menubar_nav.tpl'); } - global $null; - do_hook('read_body_menu_bottom', $null); } function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { @@ -667,16 +691,26 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { // Build the printer friend link /* hackydiehack */ + + // Pull "view_unsafe_images" from the URL to find out if the unsafe images + // should be displayed. The default is not to display unsafe images. if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) { + // If "view_unsafe_images" isn't part of the URL, default to not + // displaying unsafe images. $view_unsafe_images = false; } else { + // If "view_unsafe_images" is part of the URL, display unsafe images + // regardless of the value of the URL variable. + // FIXME: Do we really want to display the unsafe images regardless of the value in URL variable? $view_unsafe_images = true; } + $pf_params = '?passed_ent_id=' . $urlPassed_ent_id . '&mailbox=' . $urlMailbox . '&passed_id=' . $urlPassed_id . '&view_unsafe_images='. (bool) $view_unsafe_images . '&show_html_default=' . $show_html_default; + $links = array(); $links[] = array ( 'URL' => $url, @@ -785,13 +819,13 @@ if(sqgetGlobalVar('view_unsafe_images', $temp)) { } else { $view_unsafe_images = 0; } + /** * Retrieve mailbox cache */ sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION); /* end of get globals */ -global $sqimap_capabilities, $lastTargetMailbox; $imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, 0); $aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array()); @@ -883,9 +917,14 @@ if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) { } else { $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); $FirstTimeSee = !$message->is_seen; - $message->is_seen = true; - $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message; } + +/** + * update message seen status and put in cache + */ +$message->is_seen = true; +$aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message; + if (isset($passed_ent_id) && $passed_ent_id) { $message = $message->getEntity($passed_ent_id); if ($message->type0 != 'message' && $message->type1 != 'rfc822') { @@ -912,13 +951,8 @@ $header = $message->header; if (isset($sendreceipt)) { if ( !$message->is_mdnsent ) { - $final_recipient = ''; - if ((isset($identity)) && ($identity != 0)) //Main identity - $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' )); - if ($final_recipient == '' ) - $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' )); $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]); - if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) { + if ( SendMDN( $mailbox, $passed_id, $message, $imapConnection ) > 0 && $supportMDN ) { ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id); $message->is_mdnsent = true; $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message; @@ -951,8 +985,11 @@ $mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox; sqsession_register($mailbox_cache,'mailbox_cache'); $_SESSION['mailbox_cache'] = $mailbox_cache; +// message list URI is used in page header when on read_body +$oTemplate->assign('message_list_href', get_message_list_uri($aMailbox['NAME'], $startMessage, $what)); + displayPageHeader($color, $mailbox,'',''); -formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false); +formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,false); formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee); $oTemplate->assign('message_body', $messagebody); @@ -981,9 +1018,8 @@ if ($attachment_common_show_images && is_array($attachment_common_show_images_li $oTemplate->display('read_display_images_inline.tpl'); } -formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE); +formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE); do_hook('read_body_bottom', $null); sqimap_logout($imapConnection); $oTemplate->display('footer.tpl'); -?>