X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fread_body.php;h=456e9df3797839bd3ac949354f4021d6321c1890;hb=bcd3bed711ab7b1515a4426f98e95d72e419d507;hp=46c90174f10d8b4784bb4866ca69ad5be1a23a70;hpb=7d02072016814952434d46921238e02520fda3ba;p=squirrelmail.git diff --git a/src/read_body.php b/src/read_body.php index 46c90174..456e9df3 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. */ @@ -27,6 +30,7 @@ require_once(SM_PATH . 'functions/identity.php'); require_once(SM_PATH . 'functions/mailbox_display.php'); require_once(SM_PATH . 'functions/forms.php'); require_once(SM_PATH . 'functions/attachment_common.php'); +require_once(SM_PATH . 'functions/compose.php'); /** * Given an IMAP message id number, this will look it up in the cached @@ -123,9 +127,8 @@ 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, +function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) { + global $squirrelmail_language, $default_charset, $languages, $useSendmail, $domain, $sent_folder; sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); @@ -142,38 +145,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) { @@ -222,11 +216,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"; @@ -273,13 +266,14 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) { $success = $deliver->finalizeStream($stream); } if (!$success) { - $msg = $deliver->dlv_msg; + $msg = _("Message not sent.") . "
\n" . + $deliver->dlv_msg; if (! empty($deliver->dlv_server_msg)) { $msg.= '
' . _("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)) { @@ -302,7 +296,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 = ''; @@ -331,7 +325,7 @@ function formatRecipientString($recipients, $item ) { $url = set_url_var($PHP_SELF, 'show_more_bcc',1); } } - + $a = array(); foreach ($recipients as $r) { $a[] = array( @@ -340,12 +334,12 @@ function formatRecipientString($recipients, $item ) { 'Full' => htmlspecialchars($r->getAddress(true)) ); } - + $oTemplate->assign('which_field', $item); $oTemplate->assign('recipients', $a); $oTemplate->assign('more_less_toggle_href', $url); $oTemplate->assign('show_more', $show); - + $string = $oTemplate->fetch('read_recipient_list.tpl'); } return $string; @@ -354,7 +348,7 @@ function formatRecipientString($recipients, $item ) { function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee) { global $default_use_mdn, $default_use_priority, - $show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on, + $show_xmailer_default, $mdn_user_support, $PHP_SELF, $squirrelmail_language, $oTemplate; $mailbox = $aMailbox['NAME']; @@ -370,7 +364,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"); @@ -382,34 +376,62 @@ 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'); } } } + + $statuses = array(); + if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) { + if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\deleted']) && + $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\deleted'] === true) { + $statuses[] = _("deleted"); + } + if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\answered']) && + $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\answered'] === true) { + $statuses[] = _("answered"); + } + if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\draft']) && + $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\draft'] === true) { + $statuses[] = _("draft"); + } + if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\flagged']) && + $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\flagged'] === true) { + $statuses[] = _("flagged"); + } + if ( count($statuses) ) { + $env[_("Status")] = implode(', ', $statuses); + } + } + $env[_("Options")] = formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color); + $oTemplate->assign('headers_to_display', $env); - + $oTemplate->display('read_headers.tpl'); } /** * 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 @@ -420,7 +442,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $startMessage, $PHP_SELF, $save_as_draft, $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox, $delete_prev_next_display, $show_copy_buttons, - $compose_new_win, $javascript_on, $compose_width, $compose_height, + $compose_new_win, $compose_width, $compose_height, $oTemplate; //FIXME cleanup argument list, use $aMailbox where possible @@ -428,12 +450,10 @@ 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 = ''; - $msg_list_href = $search_href = $view_msg_href = ''; + $msg_list_href = $search_href = $view_msg_href = ''; if (isset($passed_ent_id) && $passed_ent_id) { // code for navigating through attached message/rfc822 messages $url = set_url_var($PHP_SELF, 'passed_ent_id',0); @@ -443,7 +463,7 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed foreach($message->parent->entities as $ent) { if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') { - + $c++; $entity_count[$c] = $ent->entity_id; $entities[$ent->entity_id] = $c; @@ -511,11 +531,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 . @@ -526,7 +546,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)) { @@ -535,13 +555,13 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) { $compose_height = '550'; } - if ( $javascript_on ) { - $on_click=' onclick="comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')"'; + if ( checkForJavascript() ) { + $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'; } } @@ -557,21 +577,29 @@ 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); - + + //FIXME: I am surprised these aren't already given to the template; probably needs to be given at a higher level, so I have NO IDEA if this is the right place to do this... adding them so template can construct its own API calls... we can build those herein too if preferrable + $oTemplate->assign('mailbox', $aMailbox['NAME']); + $oTemplate->assign('passed_id', $passed_id); + $oTemplate->assign('what', $what); + // If Draft folder - create Resume link - $resume_draft = $edit_as_new = false; + $resume_draft = $edit_as_new = false; if (($mailbox == $draft_folder) && ($save_as_draft)) { $resume_draft = true; 'smaction_draft'; } else if (handleAsSent($mailbox)) { $edit_as_new = true; } $oTemplate->assign('can_resume_draft', $resume_draft); - $oTemplate->assign('can_edit_as_new', $edit_as_new); - + $oTemplate->assign('can_edit_as_new', $edit_as_new); + $oTemplate->assign('mailboxes', sqimap_mailbox_option_array($imapConnection)); if (in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true)) { $delete_url = $base_uri . "src/$where"; @@ -601,7 +629,10 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->assign('last_move_target', ''); $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'); @@ -609,13 +640,12 @@ function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removed $oTemplate->display('read_menubar_buttons.tpl'); $oTemplate->display('read_menubar_nav.tpl'); } - - do_hook('read_body_menu_bottom'); + } function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { global $base_uri, $where, $what, $show_html_default, - $oTemplate, $javascript_on, $download_href, + $oTemplate, $download_href, $unsafe_image_toggle_href, $unsafe_image_toggle_text; $urlMailbox = urlencode($mailbox); @@ -643,7 +673,7 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { '&mailbox=' . $urlMailbox . '&passed_id=' . $urlPassed_id . '&view_unsafe_images='. (bool) $view_unsafe_images . - '&show_html_default=' . $show_html_default; + '&show_html_default=' . $show_html_default; $links = array(); $links[] = array ( 'URL' => $url, @@ -655,7 +685,7 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { ); $links[] = array ( 'URL' => $download_href, - 'Text' => _("Download this is a file") + 'Text' => _("Download this as a file") ); $toggle = html_toggle_href($mailbox, $passed_id, $passed_ent_id, $message); if (!empty($toggle)) { @@ -674,7 +704,7 @@ function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) { do_hook('read_body_header_right', $links); $oTemplate->assign('links', $links); - + return $oTemplate->fetch('read_toolbar.tpl'); } @@ -758,7 +788,6 @@ if(sqgetGlobalVar('view_unsafe_images', $temp)) { 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()); @@ -850,9 +879,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') { @@ -879,13 +913,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; @@ -897,7 +926,7 @@ if (isset($sendreceipt)) { /***********************************************/ $messagebody = ''; -do_hook('read_body_top'); +do_hook('read_body_top', $null); if ($show_html_default == 1) { $ent_ar = $message->findDisplayEntity(array()); } else { @@ -918,8 +947,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); @@ -943,14 +975,13 @@ if ($attachment_common_show_images && is_array($attachment_common_show_images_li $a['DownloadURL'] = $img['download_href']; $images[] = $a; } - + $oTemplate->assign('images', $images); $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'); +do_hook('read_body_bottom', $null); sqimap_logout($imapConnection); $oTemplate->display('footer.tpl'); -?> \ No newline at end of file