fsf changes, meant to be rebased on upstream
[squirrelmail.git] / src / read_body.php
CommitLineData
59177427 1<?php
134e4174 2
35586184 3/**
4 * read_body.php
5 *
35586184 6 * This file is used for reading the msgs array and displaying
7 * the resulting emails in the right frame.
8 *
33aab559 9 * @copyright 1999-2024 The SquirrelMail Project Team
4b4abf93 10 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
00042145 11 * @version $Id: read_body.php 14845 2020-01-07 08:09:34Z pdontthink $
8f6f9ba5 12 * @package squirrelmail
a07cd1a4 13 */
35586184 14
ebd2391c 15/** This is the read_body page */
16define('PAGE_NAME', 'read_body');
17
30967a1e 18/**
202bcbcc 19 * Include the SquirrelMail initialization file.
30967a1e 20 */
202bcbcc 21require('../include/init.php');
86725763 22
23/* SquirrelMail required files. */
86725763 24require_once(SM_PATH . 'functions/imap.php');
202bcbcc 25require_once(SM_PATH . 'functions/imap_asearch.php'); // => move to mailbox_display
86725763 26require_once(SM_PATH . 'functions/mime.php');
27require_once(SM_PATH . 'functions/date.php');
28require_once(SM_PATH . 'functions/url_parser.php');
6d021521 29require_once(SM_PATH . 'functions/identity.php');
202bcbcc 30require_once(SM_PATH . 'functions/mailbox_display.php');
31require_once(SM_PATH . 'functions/forms.php');
32require_once(SM_PATH . 'functions/attachment_common.php');
628bce99 33require_once(SM_PATH . 'functions/compose.php');
38c944cc 34
a07cd1a4 35/**
1fca12b5 36 * Given an IMAP message id number, this will look it up in the cached
1e150c97 37 * and sorted msgs array and return the index of the next message
1fca12b5 38 *
1e150c97 39 * @param int $passed_id The current message UID
e8b2c636 40 * @return the index of the next valid message from the array or -1 if there is no next message
1fca12b5 41 */
e0e30169 42function findNextMessage($uidset,$passed_id='backwards') {
324ac3c5 43 if (!is_array($uidset)) {
44 return -1;
45 }
e0e30169 46 if ($passed_id=='backwards' || !is_array($uidset)) { // check for backwards compattibilty gpg plugin
47 $passed_id = $uidset;
e0e30169 48 }
91c27aee 49 $result = sqm_array_get_value_by_offset($uidset,$passed_id,1);
50 if ($result === false) {
51 return -1;
52 } else {
53 return $result;
10f0ce72 54 }
a07cd1a4 55}
56
1e150c97 57/**
58 * Given an IMAP message id number, this will look it up in the cached
59 * and sorted msgs array and return the index of the previous message
60 *
61 * @param int $passed_id The current message UID
e8b2c636 62 * @return the index of the previous valid message from the array or -1 if there is no previous message
1e150c97 63 */
e0e30169 64
65function findPreviousMessage($uidset, $passed_id) {
324ac3c5 66 if (!is_array($uidset)) {
67 return -1;
e0e30169 68 }
91c27aee 69 $result = sqm_array_get_value_by_offset($uidset,$passed_id,-1);
70 if ($result === false) {
71 return -1;
72 } else {
73 return $result;
a07cd1a4 74 }
a07cd1a4 75}
10f0ce72 76
7d020720 77function html_toggle_href ($mailbox, $passed_id, $passed_ent_id, $message) {
7277191e 78 global $base_uri, $show_html_default;
79
80 $has_html = false;
81 if ($message->header->type0 == 'message' && $message->header->type1 == 'rfc822') {
82 $type0 = $message->rfc822_header->content_type->type0;
83 $type1 = $message->rfc822_header->content_type->type1;
84 } else {
85 $type0 = $message->header->type0;
86 $type1 = $message->header->type1;
87 }
88 if($type0 == 'multipart' &&
7d020720 89 ($type1 == 'alternative' || $type1 == 'mixed' || $type1 == 'related' || $type1=='signed')) {
7277191e 90 if ($message->findDisplayEntity(array(), array('text/html'), true)) {
91 $has_html = true;
92 }
93 }
94 /*
95 * Normal single part message so check its type.
96 */
97 else {
98 if($type0 == 'text' && $type1 == 'html') {
99 $has_html = true;
100 }
101 }
102 if($has_html == true) {
202bcbcc 103 $vars = array('passed_ent_id', 'show_more', 'show_more_cc', 'override_type0', 'override_type1', 'startMessage','where', 'what');
7277191e 104
105 $new_link = $base_uri . 'src/read_body.php?passed_id=' . urlencode($passed_id) .
106 '&amp;passed_ent_id=' . urlencode($passed_ent_id) .
107 '&amp;mailbox=' . urlencode($mailbox);
108 foreach($vars as $var) {
109 if(sqgetGlobalVar($var, $temp)) {
110 $new_link .= '&amp;' . $var . '=' . urlencode($temp);
111 }
112 }
113
114 if($show_html_default == 1) {
115 $new_link .= '&amp;show_html_default=0';
7277191e 116 } else {
117 $new_link .= '&amp;show_html_default=1';
7277191e 118 }
7d020720 119 return $new_link;
7277191e 120 }
121 return '';
122}
123
4669e892 124function ServerMDNSupport($aFlags) {
125 /* escaping $ doesn't work -> \x36 */
c075fcfe 126 return ( in_array('$mdnsent',$aFlags,true) ||
127 in_array('\\*',$aFlags,true) ) ;
57257333 128}
129
40e07136 130function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) {
f08f23b8 131 global $squirrelmail_language, $default_charset, $default_move_to_sent,
132 $languages, $useSendmail, $domain, $sent_folder, $username,
133 $data_dir;
57257333 134
e95c04ec 135 sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER);
0b97a708 136
38bca81c 137 $header = $message->rfc822_header;
57257333 138
fc224f68 139 $rfc822_header = new Rfc822Header();
d9c1dccc 140 $content_type = new ContentType('multipart/report');
fc224f68 141 $content_type->properties['report-type']='disposition-notification';
d9c1dccc 142
fc224f68 143 set_my_charset();
144 if ($default_charset) {
d9c1dccc 145 $content_type->properties['charset']=$default_charset;
fc224f68 146 }
147 $rfc822_header->content_type = $content_type;
6a8deff5 148 if (!empty($header->dnt))
149 $rfc822_header->to[] = $header->dnt;
150 else
151 $rfc822_header->to[] = $header->dsn;
2229a3ae 152 $rfc822_header->subject = _("Read:") . ' ' . decodeHeader($header->subject,true,false);
fc224f68 153
40e07136 154 $idents = get_identities();
155 $needles = array();
156 if ($header->to) {
157 foreach ($header->to as $message_to) {
158 $needles[] = $message_to->mailbox.'@'.$message_to->host;
159 }
27a1d10a 160 }
40e07136 161 $identity = find_identity($needles);
162 $from_addr = build_from_header($identity);
163 $reply_to = isset($idents[$identity]['reply_to']) ? $idents[$identity]['reply_to'] : '';
164 // FIXME: this must actually be the envelope address of the orginal message,
165 // but do we have that information? For now the first identity is our best guess.
166 $final_recipient = $idents[0]['email_address'];
fc224f68 167
fc224f68 168 $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true);
169 if ($reply_to) {
170 $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true);
171 }
d9c1dccc 172
57257333 173 // part 1 (RFC2298)
3aaa3214 174 $senton = getLongDateString( $header->date, $header->date_unparsed );
57257333 175 $to_array = $header->to;
176 $to = '';
177 foreach ($to_array as $line) {
af568a82 178 $to .= ' '.$line->getAddress();
57257333 179 }
57257333 180 $now = getLongDateString( time() );
78db1583 181 set_my_charset();
46bb8da8 182 $body = _("Your message") . "\r\n\r\n" .
48027e89 183 "\t" . _("To") . ': ' . decodeHeader($to,false,false) . "\r\n" .
184 "\t" . _("Subject") . ': ' . decodeHeader($header->subject,false,false) . "\r\n" .
185 "\t" . _("Sent") . ': ' . $senton . "\r\n" .
46bb8da8 186 "\r\n" .
187 sprintf( _("Was displayed on %s"), $now );
f69feefe 188
fc224f68 189 $special_encoding = '';
4669e892 190 if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
f4bb5d22 191 function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) {
192 $body = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $body);
d9c1dccc 193 if (strtolower($default_charset) == 'iso-2022-jp') {
194 if (mb_detect_encoding($body) == 'ASCII') {
195 $special_encoding = '8bit';
196 } else {
197 $body = mb_convert_encoding($body, 'JIS');
198 $special_encoding = '7bit';
199 }
200 }
21461ca4 201 } elseif (sq_is8bit($body)) {
202 $special_encoding = '8bit';
6fbd125b 203 }
fc224f68 204 $part1 = new Message();
205 $part1->setBody($body);
206 $mime_header = new MessageHeader;
207 $mime_header->type0 = 'text';
208 $mime_header->type1 = 'plain';
209 if ($special_encoding) {
210 $mime_header->encoding = $special_encoding;
d9c1dccc 211 } else {
3c21f499 212 $mime_header->encoding = '7bit';
fc224f68 213 }
214 if ($default_charset) {
215 $mime_header->parameters['charset'] = $default_charset;
216 }
217 $part1->mime_header = $mime_header;
218
57257333 219 // part2 (RFC2298)
d9c1dccc 220 $original_recipient = $to;
57257333 221 $original_message_id = $header->message_id;
222
b37e457f 223 $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version " . SM_VERSION . ") \r\n";
57257333 224 if ($original_recipient != '') {
fc224f68 225 $report .= "Original-Recipient : $original_recipient\r\n";
57257333 226 }
fc224f68 227 $report .= "Final-Recipient: rfc822; $final_recipient\r\n" .
57257333 228 "Original-Message-ID : $original_message_id\r\n" .
229 "Disposition: manual-action/MDN-sent-manually; displayed\r\n";
230
fc224f68 231 $part2 = new Message();
232 $part2->setBody($report);
233 $mime_header = new MessageHeader;
234 $mime_header->type0 = 'message';
235 $mime_header->type1 = 'disposition-notification';
3c21f499 236 $mime_header->encoding = '7bit';
fc224f68 237 $part2->mime_header = $mime_header;
238
239 $composeMessage = new Message();
240 $composeMessage->rfc822_header = $rfc822_header;
241 $composeMessage->addEntity($part1);
242 $composeMessage->addEntity($part2);
243
244
d9c1dccc 245 if ($useSendmail) {
246 require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
f3dc9c62 247 global $sendmail_path, $sendmail_args;
248 // Check for outdated configuration
249 if (!isset($sendmail_args)) {
250 if ($sendmail_path=='/var/qmail/bin/qmail-inject') {
251 $sendmail_args = '';
252 } else {
253 $sendmail_args = '-i -t';
254 }
255 }
256 $deliver = new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
d9c1dccc 257 $stream = $deliver->initStream($composeMessage,$sendmail_path);
fc224f68 258 } else {
d9c1dccc 259 require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
260 $deliver = new Deliver_SMTP();
783e926e 261 global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host;
d9c1dccc 262 $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
783e926e 263 if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress;
9bd3b1e6 264 get_smtp_user($user, $pass);
d9c1dccc 265 $stream = $deliver->initStream($composeMessage,$domain,0,
783e926e 266 $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host);
d9c1dccc 267 }
268 $success = false;
fc224f68 269 if ($stream) {
f08f23b8 270 $deliver->mail($composeMessage, $stream);
d9c1dccc 271 $success = $deliver->finalizeStream($stream);
fc224f68 272 }
d9c1dccc 273 if (!$success) {
c4d486d8 274 $msg = _("Message not sent.") . "\n" .
6c3d00b5 275 $deliver->dlv_msg;
a15f9d93 276 if (! empty($deliver->dlv_server_msg)) {
14e1d36e 277 $msg.= "\n" .
0cc4fb0d 278 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
3047e291 279 nl2br(sm_encode_html_special_chars($deliver->dlv_server_msg));
a15f9d93 280 }
856e58ef 281 plain_error_message($msg);
fc224f68 282 } else {
283 unset ($deliver);
f08f23b8 284
285 // move to sent folder
286 //
287 $move_to_sent = getPref($data_dir,$username,'move_to_sent');
288 if (isset($default_move_to_sent) && ($default_move_to_sent != 0)) {
289 $svr_allow_sent = true;
290 } else {
291 $svr_allow_sent = false;
292 }
293
294 if (isset($sent_folder) && (($sent_folder != '') || ($sent_folder != 'none'))
295 && sqimap_mailbox_exists( $imapConnection, $sent_folder)) {
296 $fld_sent = true;
297 } else {
298 $fld_sent = false;
299 }
300
301 if ((isset($move_to_sent) && ($move_to_sent != 0)) || (!isset($move_to_sent))) {
302 $lcl_allow_sent = true;
303 } else {
304 $lcl_allow_sent = false;
305 }
306
307 if (($fld_sent && $svr_allow_sent && !$lcl_allow_sent) || ($fld_sent && $lcl_allow_sent)) {
308 $save_reply_with_orig=getPref($data_dir,$username,'save_reply_with_orig');
309 if ($save_reply_with_orig) {
310 $sent_folder = $mailbox;
311 }
d9c1dccc 312 require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
313 $imap_deliver = new Deliver_IMAP();
899d71a7 314 $imap_deliver->mail($composeMessage, $imapConnection, 0, 0, $imapConnection, $sent_folder);
d9c1dccc 315 unset ($imap_deliver);
316 }
317 }
318 return $success;
57257333 319}
320
6201339c 321function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) {
d9c1dccc 322 $sg = $set?'+':'-';
323 $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)';
4669e892 324 $read = sqimap_run_command ($imapConnection, $cmd, true, $response,
6201339c 325 $readmessage, TRUE);
57257333 326}
327
4d0cd98b 328function formatRecipientString($recipients, $item ) {
856e58ef 329 global $show_more, $show_more_cc, $show_more_bcc,
7d020720 330 $PHP_SELF, $oTemplate;
4d0cd98b 331
d9c1dccc 332 $string = '';
38c944cc 333 if ((is_array($recipients)) && (isset($recipients[0]))) {
d9c1dccc 334 $show = false;
38c944cc 335
336 if ($item == 'to') {
d9c1dccc 337 if ($show_more) {
338 $show = true;
339 $url = set_url_var($PHP_SELF, 'show_more',0);
340 } else {
341 $url = set_url_var($PHP_SELF, 'show_more',1);
342 }
343 } else if ($item == 'cc') {
344 if ($show_more_cc) {
345 $show = true;
346 $url = set_url_var($PHP_SELF, 'show_more_cc',0);
347 } else {
348 $url = set_url_var($PHP_SELF, 'show_more_cc',1);
349 }
350 } else if ($item == 'bcc') {
351 if ($show_more_bcc) {
352 $show = true;
353 $url = set_url_var($PHP_SELF, 'show_more_bcc',0);
354 } else {
355 $url = set_url_var($PHP_SELF, 'show_more_bcc',1);
356 }
357 }
67dc67bb 358
7d020720 359 $a = array();
360 foreach ($recipients as $r) {
361 $a[] = array(
bca7d6d2 362 // note: decodeHeader is htmlsafe by default
363 'Name' => decodeHeader($r->getAddress(false)),
3047e291 364 'Email' => sm_encode_html_special_chars($r->getEmail()),
bca7d6d2 365 'Full' => decodeHeader($r->getAddress(true))
7d020720 366 );
1fca12b5 367 }
67dc67bb 368
7d020720 369 $oTemplate->assign('which_field', $item);
370 $oTemplate->assign('recipients', $a);
371 $oTemplate->assign('more_less_toggle_href', $url);
372 $oTemplate->assign('show_more', $show);
67dc67bb 373
7d020720 374 $string = $oTemplate->fetch('read_recipient_list.tpl');
4d0cd98b 375 }
c615b1da 376 return $string;
377}
378
e0e30169 379function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
af568a82 380 $color, $FirstTimeSee) {
ce68b76b 381 global $default_use_mdn, $default_use_priority,
457e8593 382 $show_xmailer_default, $mdn_user_support, $PHP_SELF,
7d020720 383 $squirrelmail_language, $oTemplate;
38bca81c 384
134e4174 385 $mailbox = $aMailbox['NAME'];
e0e30169 386
d9c1dccc 387 $header = $message->rfc822_header;
388 $env = array();
bdb9ce72 389 $env[_("Subject")] = str_replace("&nbsp;"," ",decodeHeader($header->subject));
7893c8a5 390
d9c1dccc 391 $from_name = $header->getAddr_s('from');
d6b6d221 392 if (!$from_name)
d9c1dccc 393 $from_name = $header->getAddr_s('sender');
d6b6d221 394 if (!$from_name)
395 $env[_("From")] = _("Unknown sender");
396 else
397 $env[_("From")] = decodeHeader($from_name);
3aaa3214 398 $env[_("Date")] = getLongDateString($header->date, $header->date_unparsed);
d9c1dccc 399 $env[_("To")] = formatRecipientString($header->to, "to");
400 $env[_("Cc")] = formatRecipientString($header->cc, "cc");
401 $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc");
402 if ($default_use_priority) {
7d020720 403 $oTemplate->assign('message_priority', $header->priority);
404 $env[_("Priority")] = $oTemplate->fetch('read_message_priority.tpl');
d9c1dccc 405 }
406 if ($show_xmailer_default) {
7d020720 407 $oTemplate->assign('xmailer', decodeHeader($header->xmailer));
408 $env[_("Mailer")] = $oTemplate->fetch('read_xmailer.tpl');
d9c1dccc 409 }
e0d7bbf4 410
411 // this is used for both mdn and also general use for plugins, etc
412 $oTemplate->assign('first_time_reading', $FirstTimeSee);
413
d9c1dccc 414 if ($default_use_mdn) {
415 if ($mdn_user_support) {
6a8deff5 416 // We are generous to the sender because DSNs are commonly ignored by servers and
417 // technically offering a return receipt in the MUA for a DSN is overstepping the RFCs
418 if ($header->dnt || $header->dnt) {
7d020720 419 $mdn_url = $PHP_SELF;
ef3e6c1f 420 $mdn_url = set_url_var($mdn_url, 'mailbox', urlencode($mailbox));
421 $mdn_url = set_url_var($mdn_url, 'passed_id', $passed_id);
422 $mdn_url = set_url_var($mdn_url, 'passed_ent_id', $passed_ent_id);
423 $mdn_url = set_url_var($mdn_url, 'sendreceipt', 1);
7d020720 424
425 $oTemplate->assign('read_receipt_sent', $message->is_mdnsent);
7d020720 426 $oTemplate->assign('send_receipt_href', $mdn_url);
67dc67bb 427
7d020720 428 $env[_("Read Receipt")] = $oTemplate->fetch('read_handle_receipt.tpl');
d9c1dccc 429 }
430 }
431 }
1c3d4412 432
433 $statuses = array();
67dc67bb 434 if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
435 if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\deleted']) &&
436 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\deleted'] === true) {
437 $statuses[] = _("deleted");
438 }
439 if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\answered']) &&
440 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\answered'] === true) {
441 $statuses[] = _("answered");
442 }
443 if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\draft']) &&
444 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\draft'] === true) {
445 $statuses[] = _("draft");
446 }
447 if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\flagged']) &&
448 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\flagged'] === true) {
449 $statuses[] = _("flagged");
450 }
451 if ( count($statuses) ) {
452 $env[_("Status")] = implode(', ', $statuses);
453 }
1c3d4412 454 }
67dc67bb 455
7d020720 456 $env[_("Options")] = formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color);
c615b1da 457
1c3d4412 458
7d020720 459 $oTemplate->assign('headers_to_display', $env);
67dc67bb 460
7d020720 461 $oTemplate->display('read_headers.tpl');
d9c1dccc 462}
c615b1da 463
1e150c97 464/**
4669e892 465 * Format message toolbar
466 *
726f0cd4 467 * @param array $aMailbox Current mailbox information array
468 * @param int $passed_id UID of current message
469 * @param int $passed_ent_id Id of entity within message
470 * @param object $message Current message object
471 * @param void $removedVar This parameter is no longer used, but remains
472 * so as not to break this function's prototype
473 * (OPTIONAL)
474 * @param boolean $nav_on_top When TRUE, the menubar is being constructed
475 * for use at the top of the page, otherwise it
476 * will be used for page bottom (OPTIONAL;
477 * default = TRUE)
1e150c97 478 */
726f0cd4 479function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,
480 $removedVar=FALSE, $nav_on_top=TRUE) {
481
7d020720 482 global $base_uri, $draft_folder, $where, $what, $sort,
4669e892 483 $startMessage, $PHP_SELF, $save_as_draft,
1e150c97 484 $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
7d020720 485 $delete_prev_next_display, $show_copy_buttons,
457e8593 486 $compose_new_win, $compose_width, $compose_height,
e8b2c636 487 $oTemplate, $return_to_message_list_after_move;
c615b1da 488
e0e30169 489 //FIXME cleanup argument list, use $aMailbox where possible
490 $mailbox = $aMailbox['NAME'];
491
d9c1dccc 492 $urlMailbox = urlencode($mailbox);
3627fc02 493 $next = $prev = -1;
c615b1da 494
1e150c97 495 // Create Prev & Next links
496 // Handle nested entities first (i.e. Mime Attach parts)
7d020720 497 $prev_href = $next_href = $up_href = $del_href = $del_prev_href = $del_next_href = '';
67dc67bb 498 $msg_list_href = $search_href = $view_msg_href = '';
1e150c97 499 if (isset($passed_ent_id) && $passed_ent_id) {
500 // code for navigating through attached message/rfc822 messages
d9c1dccc 501 $url = set_url_var($PHP_SELF, 'passed_ent_id',0);
70bdc740 502 $entities = array();
503 $entity_count = array();
504 $c = 0;
f2f03410 505
70bdc740 506 foreach($message->parent->entities as $ent) {
9f42bfc8 507 if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') {
67dc67bb 508
9f42bfc8 509 $c++;
510 $entity_count[$c] = $ent->entity_id;
511 $entities[$ent->entity_id] = $c;
512 }
70bdc740 513 }
1e150c97 514
91c27aee 515 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
70bdc740 516 $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
7d020720 517 $prev_href = set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id);
70bdc740 518 }
1e150c97 519
91c27aee 520 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] < $c) {
70bdc740 521 $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1];
7d020720 522 $next_href = set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id);
70bdc740 523 }
1e150c97 524
d9c1dccc 525 $par_ent_id = $message->parent->entity_id;
526 if ($par_ent_id) {
527 $par_ent_id = substr($par_ent_id,0,-2);
1e150c97 528 if ( $par_ent_id != 0 ) {
7d020720 529 $up_href = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id);
1e150c97 530 }
531 }
532
7d020720 533 $view_msg_href = $url;
1e150c97 534
535 // Prev/Next links for regular messages
324ac3c5 536 } else if ( true ) { //!(isset($where) && isset($what)) ) {
324ac3c5 537 $prev = findPreviousMessage($aMailbox['UIDSET'][$what], $passed_id);
538 $next = findNextMessage($aMailbox['UIDSET'][$what],$passed_id);
1e150c97 539
1e150c97 540 if ($prev >= 0) {
7d020720 541 $prev_href = $base_uri . 'src/read_body.php?passed_id='.$prev.
1e150c97 542 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 543 "&amp;where=$where&amp;what=$what" .
1e150c97 544 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
d9c1dccc 545 }
1e150c97 546
1e150c97 547 if ($next >= 0) {
7d020720 548 $next_href = $base_uri . 'src/read_body.php?passed_id='.$next.
1e150c97 549 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 550 "&amp;where=$where&amp;what=$what" .
1e150c97 551 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
1e150c97 552 }
553
1e150c97 554 // Only bother with Delete & Prev and Delete & Next IF
6201339c 555 // top display is enabled.
4669e892 556 if ( $delete_prev_next_display == 1 &&
324ac3c5 557 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
1e150c97 558 if ($prev >= 0) {
7d020720 559 $del_prev_href = $base_uri . 'src/read_body.php?passed_id='.$prev.
1e150c97 560 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
561 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 562 "&amp;where=$where&amp;what=$what" .
5f2c00dd 563 '&amp;delete_id='.$passed_id .
564 '&amp;smtoken='.sm_generate_security_token();
1e150c97 565 }
566
1e150c97 567 if ($next >= 0) {
7d020720 568 $del_next_href = $base_uri . 'src/read_body.php?passed_id='.$next.
1e150c97 569 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
570 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 571 "&amp;where=$where&amp;what=$what" .
5f2c00dd 572 '&amp;delete_id='.$passed_id .
573 '&amp;smtoken='.sm_generate_security_token();
1e150c97 574 }
1e150c97 575 }
576 }
577
c4dcda23 578 $msg_list_href = get_message_list_uri($aMailbox['NAME'], $startMessage, $what);
579 if ($where == 'search.php')
580 $search_href = str_replace('read_body.php', 'search.php', $msg_list_href);
581 else
582 $search_href = '';
1e150c97 583
98a9cc03 584 $comp_uri = $base_uri.'src/compose.php' .
585 '?passed_id=' . $passed_id .
586 '&amp;mailbox=' . $urlMailbox .
587 '&amp;startMessage=' . $startMessage .
588 (isset($passed_ent_id) ? '&amp;passed_ent_id='.$passed_ent_id : '');
4669e892 589
590 // Start form for reply/reply all/forward..
1a531551 591 $target = '';
592 $on_click='';
89a067ff 593 $method='post';
6190378c 594 $onsubmit='';
1a531551 595 if ($compose_new_win == '1') {
91c27aee 596 if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
597 $compose_width = '640';
598 }
599 if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
600 $compose_height = '550';
601 }
457e8593 602 if ( checkForJavascript() ) {
0be2024f 603 $on_click='comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')';
1a531551 604 $comp_uri = 'javascript:void(0)';
89a067ff 605 $method='get';
606 $onsubmit = 'return false';
1a531551 607 } else {
89a067ff 608 $target = '_blank';
1a531551 609 }
610 }
611
7d020720 612 $oTemplate->assign('nav_on_top', $nav_on_top);
98a9cc03 613
7d020720 614 $oTemplate->assign('prev_href', $prev_href);
615 $oTemplate->assign('up_href', $up_href);
616 $oTemplate->assign('next_href', $next_href);
617 $oTemplate->assign('del_prev_href', $del_prev_href);
618 $oTemplate->assign('del_next_href', $del_next_href);
619 $oTemplate->assign('view_msg_href', $view_msg_href);
620
621 $oTemplate->assign('message_list_href', $msg_list_href);
622 $oTemplate->assign('search_href', $search_href);
623
89a067ff 624 $oTemplate->assign('form_extra', '');
625 $oTemplate->assign('form_method', $method);
626 $oTemplate->assign('form_target', $target);
627 $oTemplate->assign('form_onsubmit', $onsubmit);
7d020720 628 $oTemplate->assign('compose_href', $comp_uri);
629 $oTemplate->assign('button_onclick', $on_click);
630 $oTemplate->assign('forward_as_attachment_enabled', $enable_forward_as_attachment==1);
67dc67bb 631
d08a5945 632 //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
633 $oTemplate->assign('mailbox', $aMailbox['NAME']);
634 $oTemplate->assign('passed_id', $passed_id);
635 $oTemplate->assign('what', $what);
636
1e150c97 637 // If Draft folder - create Resume link
67dc67bb 638 $resume_draft = $edit_as_new = false;
1f78253f 639 if (isDraftMailbox($mailbox) && ($save_as_draft)) {
71911a21 640 $resume_draft = true;
1e150c97 641 } else if (handleAsSent($mailbox)) {
7d020720 642 $edit_as_new = true;
1e150c97 643 }
7d020720 644 $oTemplate->assign('can_resume_draft', $resume_draft);
67dc67bb 645 $oTemplate->assign('can_edit_as_new', $edit_as_new);
646
7d020720 647 $oTemplate->assign('mailboxes', sqimap_mailbox_option_array($imapConnection));
648 if (in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true)) {
7d020720 649 $oTemplate->assign('can_be_deleted', true);
e8b2c636 650 // force return-to-message-list if this is the only message in the folder
651 if ($return_to_message_list_after_move || ($next < 0 && $prev < 0))
652 $oTemplate->assign('move_delete_form_action', $base_uri.'src/'.$where);
653 else
654 $oTemplate->assign('move_delete_form_action', $base_uri.'src/read_body.php');
7d020720 655 $oTemplate->assign('delete_form_extra', addHidden('mailbox', $aMailbox['NAME'])."\n" .
656 addHidden('msg[0]', $passed_id)."\n" .
43ecfa04 657 // only need when $return_to_message_list_after_move is off
658 addHidden('passed_id', ($next >= 0 ? $next : $prev))."\n" .
7d020720 659 addHidden('startMessage', $startMessage)."\n" );
4669e892 660 if (!(isset($passed_ent_id) && $passed_ent_id)) {
7d020720 661 $oTemplate->assign('can_be_moved', true);
662 $oTemplate->assign('move_form_extra', addHidden('mailbox', $aMailbox['NAME'])."\n" .
e8b2c636 663 addHidden('msg[0]', $passed_id)."\n" .
664 // only need when $return_to_message_list_after_move is off
665 addHidden('passed_id', ($next >= 0 ? $next : $prev))."\n" .
666 addHidden('startMessage', $startMessage)."\n" );
7d020720 667 $oTemplate->assign('last_move_target', isset($lastTargetMailbox) && !empty($lastTargetMailbox) ? $lastTargetMailbox : '');
668 $oTemplate->assign('can_be_copied', $show_copy_buttons==1);
1e150c97 669 } else {
7d020720 670 $oTemplate->assign('can_be_moved', false);
671 $oTemplate->assign('move_form_extra', '');
672 $oTemplate->assign('last_move_target', '');
673 $oTemplate->assign('can_be_copied', false);
988e24f6 674 }
7d020720 675 } else {
676 $oTemplate->assign('can_be_deleted', false);
677 $oTemplate->assign('move_delete_form_action', '');
678 $oTemplate->assign('delete_form_extra', '');
679 $oTemplate->assign('can_be_moved', false);
680 $oTemplate->assign('move_form_extra', '');
681 $oTemplate->assign('last_move_target', '');
682 $oTemplate->assign('can_be_copied', false);
683 }
67dc67bb 684
74540ffc 685 // access keys... only add to the top menubar, because adding
726f0cd4 686 // them twice makes them less functional (press access key, *then*
74540ffc 687 // press <enter> to make it work)
726f0cd4 688 //
74540ffc 689 if ($nav_on_top) {
726f0cd4 690 global $accesskey_read_msg_reply, $accesskey_read_msg_reply_all,
691 $accesskey_read_msg_forward, $accesskey_read_msg_as_attach,
692 $accesskey_read_msg_delete, $accesskey_read_msg_bypass_trash,
28cdccf6 693 $accesskey_read_msg_move, $accesskey_read_msg_move_to,
694 $accesskey_read_msg_copy;
726f0cd4 695 } else {
696 $accesskey_read_msg_reply = $accesskey_read_msg_reply_all =
697 $accesskey_read_msg_forward = $accesskey_read_msg_as_attach =
698 $accesskey_read_msg_delete = $accesskey_read_msg_bypass_trash =
28cdccf6 699 $accesskey_read_msg_move = $accesskey_read_msg_move_to =
700 $accesskey_read_msg_copy = 'NONE';
726f0cd4 701 }
8949acd6 702 $oTemplate->assign('accesskey_read_msg_reply', $accesskey_read_msg_reply);
703 $oTemplate->assign('accesskey_read_msg_reply_all', $accesskey_read_msg_reply_all);
704 $oTemplate->assign('accesskey_read_msg_forward', $accesskey_read_msg_forward);
705 $oTemplate->assign('accesskey_read_msg_as_attach', $accesskey_read_msg_as_attach);
706 $oTemplate->assign('accesskey_read_msg_delete', $accesskey_read_msg_delete);
707 $oTemplate->assign('accesskey_read_msg_bypass_trash', $accesskey_read_msg_bypass_trash);
708 $oTemplate->assign('accesskey_read_msg_move_to', $accesskey_read_msg_move_to);
709 $oTemplate->assign('accesskey_read_msg_move', $accesskey_read_msg_move);
28cdccf6 710 $oTemplate->assign('accesskey_read_msg_copy', $accesskey_read_msg_copy);
8949acd6 711
2d97bb26 712 global $null;
713 do_hook('read_body_menu', $null);
714
7d020720 715 if ($nav_on_top) {
716 $oTemplate->display('read_menubar_nav.tpl');
717 $oTemplate->display('read_menubar_buttons.tpl');
718 } else {
719 $oTemplate->display('read_menubar_buttons.tpl');
720 $oTemplate->display('read_menubar_nav.tpl');
764971df 721 }
67dc67bb 722
c615b1da 723}
724
725function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
7d020720 726 global $base_uri, $where, $what, $show_html_default,
a6519f05 727 $oTemplate, $download_href, $PHP_SELF,
7d020720 728 $unsafe_image_toggle_href, $unsafe_image_toggle_text;
4669e892 729
d9c1dccc 730 $urlMailbox = urlencode($mailbox);
78909469 731 $urlPassed_id = urlencode($passed_id);
732 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 733
78909469 734 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
78909469 735 if (!empty($where)) {
736 $query_string .= '&amp;where=' . urlencode($where);
737 }
78909469 738 if (!empty($what)) {
739 $query_string .= '&amp;what=' . urlencode($what);
740 }
e95c04ec 741 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 742
7d020720 743 $links = array();
744 $links[] = array (
745 'URL' => $url,
746 'Text' => _("View Full Header")
747 );
a5e4a8fc 748
749 if ( checkForJavaScript() ) {
750 $links[] = array (
751 'URL' => 'javascript:printThis();',
752 'Text' => _("Print"),
753 );
754 } else {
755 $links[] = array (
756 'URL' => set_url_var($PHP_SELF, 'print', '1'),
a6519f05 757 'Text' => _("Print"),
758 'Target' => '_blank'
7d020720 759 );
a5e4a8fc 760 }
761
7d020720 762 $links[] = array (
763 'URL' => $download_href,
210b5bb5 764 'Text' => _("Download this as a file")
7d020720 765 );
766 $toggle = html_toggle_href($mailbox, $passed_id, $passed_ent_id, $message);
767 if (!empty($toggle)) {
768 $links[] = array (
769 'URL' => $toggle,
770 'Text' => $show_html_default==1 ? _("View as plain text") : _("View as HTML")
771 );
772 }
773 if (!empty($unsafe_image_toggle_href)) {
774 $links[] = array (
775 'URL' => $unsafe_image_toggle_href,
776 'Text' => $unsafe_image_toggle_text
777 );
778 }
779
780 do_hook('read_body_header_right', $links);
781
782 $oTemplate->assign('links', $links);
67dc67bb 783
7d020720 784 return $oTemplate->fetch('read_toolbar.tpl');
91c27aee 785}
786
6206f6c4 787/***************************/
2ffa3f57 788/* Main of read_body.php */
6206f6c4 789/***************************/
57257333 790
0b97a708 791/* get the globals we may need */
792
e95c04ec 793sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
e95c04ec 794sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 795if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
796 $messages = array();
ce274df9 797}
81de00c0 798sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
799if (is_array($delayed_errors)) {
800 $oErrorHandler->AssignDelayedErrors($delayed_errors);
801 sqsession_unregister("delayed_errors");
802}
e95c04ec 803/** GET VARS */
804sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 805if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
806 $where = 'right_main.php';
807}
d0b119a5 808/*
809 * Used as entry key to the list of uid's cached in the mailbox cache
810 * we use the cached uid's to get the next and prev message.
811 */
324ac3c5 812if (!sqgetGlobalVar('what', $what, SQ_GET) ){
813 $what = 0;
814}
e95c04ec 815if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
816 $show_more = (int) $temp;
1b9f3c04 817}
e95c04ec 818if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
819 $show_more_cc = (int) $temp;
0b97a708 820}
e95c04ec 821if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
822 $show_more_bcc = (int) $temp;
0b97a708 823}
e95c04ec 824if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
825 $view_hdr = (int) $temp;
0b97a708 826}
e95c04ec 827
91c27aee 828if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
829 $iAccount = (int) $temp;
830} else {
831 $iAccount = 0;
832}
833
e95c04ec 834/** GET/POST VARS */
51bbe8fa 835sqgetGlobalVar('passed_id', $passed_id, SQ_INORDER, NULL, SQ_TYPE_BIGINT);
e95c04ec 836sqgetGlobalVar('passed_ent_id', $passed_ent_id);
837sqgetGlobalVar('mailbox', $mailbox);
838
e95c04ec 839if ( sqgetGlobalVar('sort', $temp) ) {
840 $sort = (int) $temp;
0b97a708 841}
e95c04ec 842if ( sqgetGlobalVar('startMessage', $temp) ) {
843 $startMessage = (int) $temp;
324ac3c5 844} else {
845 $startMessage = 1;
ce274df9 846}
7277191e 847if(sqgetGlobalVar('show_html_default', $temp)) {
848 $show_html_default = (int) $temp;
849}
850
851if(sqgetGlobalVar('view_unsafe_images', $temp)) {
852 $view_unsafe_images = (int) $temp;
853 if($view_unsafe_images == 1) {
854 $show_html_default = 1;
855 }
856} else {
857 $view_unsafe_images = 0;
858}
d31f73f1 859
324ac3c5 860/**
861 * Retrieve mailbox cache
862 */
863sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 864
ce274df9 865/* end of get globals */
38c944cc 866
906f7e9f 867$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, 0);
91c27aee 868$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
869
c3731db5 870
91c27aee 871/**
c3731db5 872 Start code to set the columns to fetch in case of hitting the next/prev link
873 The reason for this is the fact that the cache can be invalidated which means that the headers
874 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
875
876 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
877*/
878
879/**
880 * Replace From => To in case it concerns a draft or sent folder
881 */
199ff86a 882$aColumns = array();
c3731db5 883if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
884 !in_array(SQM_COL_TO,$index_order)) {
885 $aNewOrder = array(); // nice var name ;)
886 foreach($index_order as $iCol) {
887 if ($iCol == SQM_COL_FROM) {
888 $iCol = SQM_COL_TO;
889 }
199ff86a 890 $aColumns[$iCol] = array();
c3731db5 891 }
c3731db5 892} else {
199ff86a 893 foreach ($index_order as $iCol) {
894 $aColumns[$iCol] = array();
895 }
c3731db5 896}
897
898$aProps = array(
899 'columns' => $aColumns, // columns bound settings
900 'config' => array(
901 'highlight_list' => $message_highlight_list, // row highlighting rules
902 'trash_folder' => $trash_folder,
903 'sent_folder' => $sent_folder,
904 'draft_folder' => $draft_folder));
905
906calcFetchColumns($aMailbox,$aProps);
907
908/**
909 End code to set the columns to fetch in case of hitting the next/prev link
910*/
911
912
913
914/**
915 * Check if cache is still valid, $what contains the key
916 * which gives us acces to the array with uid's. At this moment
917 * 0 is used for a normal message list and search uses 1 as key. This can be
918 * changed / extended in the future.
919 * If on a select of a mailbox we detect that the cache should be invalidated due to
920 * the delete of messages or due to new messages we empty the list with uid's and
921 * that's what we detect below.
922 */
91c27aee 923if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 924 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 925}
38c944cc 926
d0b119a5 927$iSetIndex = $aMailbox['SETINDEX'];
928$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
929
324ac3c5 930/**
931 * Update the seen state
932 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
933 */
934if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
935 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 936}
e0e30169 937
1e150c97 938/**
939 * Process Delete from delete-move-next
940 * but only if delete_id was set
941 */
942if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 943 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 944}
945
43ecfa04 946/**
947 * or delete button... why is handleMessageListForm (per above) conditional anway?
948 */
949if ( sqgetGlobalVar('delete', $ignore, SQ_POST) ) {
950 $sError = handleMessageListForm($imapConnection,$aMailbox);
951}
952
e8b2c636 953/**
954 * or move button... why is handleMessageListForm (per above) conditional anway?
955 */
956if ( sqgetGlobalVar('moveButton', $ignore, SQ_POST) ) {
957 $sError = handleMessageListForm($imapConnection,$aMailbox);
958 sqgetGlobalVar('targetMailbox', $lastTargetMailbox, SQ_POST);
959}
960
38c944cc 961/**
962 * $message contains all information about the message
963 * including header and body
964 */
37d2a6ee 965
324ac3c5 966if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
967 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
968 $FirstTimeSee = !$message->is_seen;
38c944cc 969} else {
324ac3c5 970 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
971 $FirstTimeSee = !$message->is_seen;
5200c026 972}
bdfa0f9a 973
974/**
975 * update message seen status and put in cache
976 */
977$message->is_seen = true;
978$aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
979
dd628162 980if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 981 $message = $message->getEntity($passed_ent_id);
982 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
983 $message = $message->parent;
984 }
985 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
986 $rfc822_header = new Rfc822Header();
987 $rfc822_header->parseHeader($read);
988 $message->rfc822_header = $rfc822_header;
91c27aee 989} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
990 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
991 $rfc822_header = new Rfc822Header();
992 $rfc822_header->parseHeader($read);
993 $message->rfc822_header = $rfc822_header;
c615b1da 994} else {
324ac3c5 995 $passed_ent_id = 0;
38c944cc 996}
5200c026 997$header = $message->header;
57257333 998
a798d8b2 999// gmail does not mark messages as read when retrieving the message body
1000// even though RFC 3501, section 6.4.5 (FETCH Command) says:
1001// "The \Seen flag is implicitly set; if this causes the flags to change,
1002// they SHOULD be included as part of the FETCH responses."
1003//
1004if ($imap_server_type == 'gmail') {
694205bb 1005 sqimap_toggle_flag($imapConnection, array($passed_id), '\\Seen', true, true);
a798d8b2 1006}
57257333 1007
6206f6c4 1008/****************************************/
1009/* Block for handling incoming url vars */
1010/****************************************/
5200c026 1011
5200c026 1012if (isset($sendreceipt)) {
1013 if ( !$message->is_mdnsent ) {
324ac3c5 1014 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
40e07136 1015 if ( SendMDN( $mailbox, $passed_id, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1016 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1017 $message->is_mdnsent = true;
1012f961 1018 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1019 }
5200c026 1020 }
1021}
6206f6c4 1022/***********************************************/
1023/* End of block for handling incoming url vars */
1024/***********************************************/
1025
58ca5611 1026$oTemplate->assign('aAttribs', array('class' => 'entity_sep'));
1027$hr = $oTemplate->fetch('horizontal_rule.tpl');
9f42bfc8 1028$messagebody = '';
6e515418 1029do_hook('read_body_top', $null);
c4ad259b 1030if ($show_html_default == 1) {
1031 $ent_ar = $message->findDisplayEntity(array());
1032} else {
1033 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1034}
a128c967 1035$cnt = count($ent_ar);
1036for ($i = 0; $i < $cnt; $i++) {
6a108031 1037 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1038 if ($i != $cnt-1) {
58ca5611 1039 $messagebody .= $hr;
a128c967 1040 }
38c944cc 1041}
e55c441a 1042
202bcbcc 1043/**
1044 * Write mailbox with updated seen flag information back to cache.
1045 */
1046$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1047sqsession_register($mailbox_cache,'mailbox_cache');
1048$_SESSION['mailbox_cache'] = $mailbox_cache;
202bcbcc 1049
c4dcda23 1050// message list URI is used in page header when on read_body
1051$oTemplate->assign('message_list_href', get_message_list_uri($aMailbox['NAME'], $startMessage, $what));
1052
b89ceca6 1053displayPageHeader($color, $mailbox,'','');
a6519f05 1054
1055/* this is the non-javascript version of printer friendly */
1056if ( sqgetGlobalVar('print', $print, SQ_GET) ) {
1057 $oTemplate->display('read_message_print.tpl');
1058} else {
1059 formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,false);
1060}
e0e30169 1061formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
7d020720 1062
1063$oTemplate->assign('message_body', $messagebody);
1064$oTemplate->display('read_message_body.tpl');
1065
1066formatAttachments($message,$ent_ar,$mailbox, $passed_id);
a07cd1a4 1067
1068/* show attached images inline -- if pref'fed so */
7d020720 1069if ($attachment_common_show_images && is_array($attachment_common_show_images_list)) {
1070 $images = array();
a07cd1a4 1071 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1072 $imgurl = SM_PATH . 'src/download.php' .
57257333 1073 '?' .
cd7b8833 1074 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1075 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1076 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1077 '&amp;absolute_dl=true';
7d020720 1078 $a = array();
1079 $a['Name'] = $img['name'];
1080 $a['DisplayURL'] = $imgurl;
1081 $a['DownloadURL'] = $img['download_href'];
1082 $images[] = $a;
10f0ce72 1083 }
67dc67bb 1084
7d020720 1085 $oTemplate->assign('images', $images);
1086 $oTemplate->display('read_display_images_inline.tpl');
a07cd1a4 1087}
1088
9ad07d9a 1089formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1090
6e515418 1091do_hook('read_body_bottom', $null);
a07cd1a4 1092sqimap_logout($imapConnection);
51d66ea2 1093$oTemplate->display('footer.tpl');