Fix bug where could not toggle flag (delete, etc) a single message
[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 *
77a1e3d1 9 * @copyright 1999-2022 The SquirrelMail Project Team
4b4abf93 10 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
30967a1e 11 * @version $Id$
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);
c615b1da 493
1e150c97 494 // Create Prev & Next links
495 // Handle nested entities first (i.e. Mime Attach parts)
7d020720 496 $prev_href = $next_href = $up_href = $del_href = $del_prev_href = $del_next_href = '';
67dc67bb 497 $msg_list_href = $search_href = $view_msg_href = '';
1e150c97 498 if (isset($passed_ent_id) && $passed_ent_id) {
499 // code for navigating through attached message/rfc822 messages
d9c1dccc 500 $url = set_url_var($PHP_SELF, 'passed_ent_id',0);
70bdc740 501 $entities = array();
502 $entity_count = array();
503 $c = 0;
f2f03410 504
70bdc740 505 foreach($message->parent->entities as $ent) {
9f42bfc8 506 if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') {
67dc67bb 507
9f42bfc8 508 $c++;
509 $entity_count[$c] = $ent->entity_id;
510 $entities[$ent->entity_id] = $c;
511 }
70bdc740 512 }
1e150c97 513
91c27aee 514 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
70bdc740 515 $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
7d020720 516 $prev_href = set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id);
70bdc740 517 }
1e150c97 518
91c27aee 519 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] < $c) {
70bdc740 520 $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1];
7d020720 521 $next_href = set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id);
70bdc740 522 }
1e150c97 523
d9c1dccc 524 $par_ent_id = $message->parent->entity_id;
525 if ($par_ent_id) {
526 $par_ent_id = substr($par_ent_id,0,-2);
1e150c97 527 if ( $par_ent_id != 0 ) {
7d020720 528 $up_href = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id);
1e150c97 529 }
530 }
531
7d020720 532 $view_msg_href = $url;
1e150c97 533
534 // Prev/Next links for regular messages
324ac3c5 535 } else if ( true ) { //!(isset($where) && isset($what)) ) {
324ac3c5 536 $prev = findPreviousMessage($aMailbox['UIDSET'][$what], $passed_id);
537 $next = findNextMessage($aMailbox['UIDSET'][$what],$passed_id);
1e150c97 538
1e150c97 539 if ($prev >= 0) {
7d020720 540 $prev_href = $base_uri . 'src/read_body.php?passed_id='.$prev.
1e150c97 541 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 542 "&amp;where=$where&amp;what=$what" .
1e150c97 543 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
d9c1dccc 544 }
1e150c97 545
1e150c97 546 if ($next >= 0) {
7d020720 547 $next_href = $base_uri . 'src/read_body.php?passed_id='.$next.
1e150c97 548 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 549 "&amp;where=$where&amp;what=$what" .
1e150c97 550 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
1e150c97 551 }
552
1e150c97 553 // Only bother with Delete & Prev and Delete & Next IF
6201339c 554 // top display is enabled.
4669e892 555 if ( $delete_prev_next_display == 1 &&
324ac3c5 556 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
1e150c97 557 if ($prev >= 0) {
7d020720 558 $del_prev_href = $base_uri . 'src/read_body.php?passed_id='.$prev.
1e150c97 559 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
560 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 561 "&amp;where=$where&amp;what=$what" .
5f2c00dd 562 '&amp;delete_id='.$passed_id .
563 '&amp;smtoken='.sm_generate_security_token();
1e150c97 564 }
565
1e150c97 566 if ($next >= 0) {
7d020720 567 $del_next_href = $base_uri . 'src/read_body.php?passed_id='.$next.
1e150c97 568 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
569 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 570 "&amp;where=$where&amp;what=$what" .
5f2c00dd 571 '&amp;delete_id='.$passed_id .
572 '&amp;smtoken='.sm_generate_security_token();
1e150c97 573 }
1e150c97 574 }
575 }
576
c4dcda23 577 $msg_list_href = get_message_list_uri($aMailbox['NAME'], $startMessage, $what);
578 if ($where == 'search.php')
579 $search_href = str_replace('read_body.php', 'search.php', $msg_list_href);
580 else
581 $search_href = '';
1e150c97 582
98a9cc03 583 $comp_uri = $base_uri.'src/compose.php' .
584 '?passed_id=' . $passed_id .
585 '&amp;mailbox=' . $urlMailbox .
586 '&amp;startMessage=' . $startMessage .
587 (isset($passed_ent_id) ? '&amp;passed_ent_id='.$passed_ent_id : '');
4669e892 588
589 // Start form for reply/reply all/forward..
1a531551 590 $target = '';
591 $on_click='';
89a067ff 592 $method='post';
6190378c 593 $onsubmit='';
1a531551 594 if ($compose_new_win == '1') {
91c27aee 595 if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
596 $compose_width = '640';
597 }
598 if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
599 $compose_height = '550';
600 }
457e8593 601 if ( checkForJavascript() ) {
0be2024f 602 $on_click='comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')';
1a531551 603 $comp_uri = 'javascript:void(0)';
89a067ff 604 $method='get';
605 $onsubmit = 'return false';
1a531551 606 } else {
89a067ff 607 $target = '_blank';
1a531551 608 }
609 }
610
7d020720 611 $oTemplate->assign('nav_on_top', $nav_on_top);
98a9cc03 612
7d020720 613 $oTemplate->assign('prev_href', $prev_href);
614 $oTemplate->assign('up_href', $up_href);
615 $oTemplate->assign('next_href', $next_href);
616 $oTemplate->assign('del_prev_href', $del_prev_href);
617 $oTemplate->assign('del_next_href', $del_next_href);
618 $oTemplate->assign('view_msg_href', $view_msg_href);
619
620 $oTemplate->assign('message_list_href', $msg_list_href);
621 $oTemplate->assign('search_href', $search_href);
622
89a067ff 623 $oTemplate->assign('form_extra', '');
624 $oTemplate->assign('form_method', $method);
625 $oTemplate->assign('form_target', $target);
626 $oTemplate->assign('form_onsubmit', $onsubmit);
7d020720 627 $oTemplate->assign('compose_href', $comp_uri);
628 $oTemplate->assign('button_onclick', $on_click);
629 $oTemplate->assign('forward_as_attachment_enabled', $enable_forward_as_attachment==1);
67dc67bb 630
d08a5945 631 //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
632 $oTemplate->assign('mailbox', $aMailbox['NAME']);
633 $oTemplate->assign('passed_id', $passed_id);
634 $oTemplate->assign('what', $what);
635
1e150c97 636 // If Draft folder - create Resume link
67dc67bb 637 $resume_draft = $edit_as_new = false;
1f78253f 638 if (isDraftMailbox($mailbox) && ($save_as_draft)) {
71911a21 639 $resume_draft = true;
1e150c97 640 } else if (handleAsSent($mailbox)) {
7d020720 641 $edit_as_new = true;
1e150c97 642 }
7d020720 643 $oTemplate->assign('can_resume_draft', $resume_draft);
67dc67bb 644 $oTemplate->assign('can_edit_as_new', $edit_as_new);
645
7d020720 646 $oTemplate->assign('mailboxes', sqimap_mailbox_option_array($imapConnection));
647 if (in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true)) {
7d020720 648 $oTemplate->assign('can_be_deleted', true);
e8b2c636 649 // force return-to-message-list if this is the only message in the folder
650 if ($return_to_message_list_after_move || ($next < 0 && $prev < 0))
651 $oTemplate->assign('move_delete_form_action', $base_uri.'src/'.$where);
652 else
653 $oTemplate->assign('move_delete_form_action', $base_uri.'src/read_body.php');
7d020720 654 $oTemplate->assign('delete_form_extra', addHidden('mailbox', $aMailbox['NAME'])."\n" .
655 addHidden('msg[0]', $passed_id)."\n" .
656 addHidden('startMessage', $startMessage)."\n" );
4669e892 657 if (!(isset($passed_ent_id) && $passed_ent_id)) {
7d020720 658 $oTemplate->assign('can_be_moved', true);
659 $oTemplate->assign('move_form_extra', addHidden('mailbox', $aMailbox['NAME'])."\n" .
e8b2c636 660 addHidden('msg[0]', $passed_id)."\n" .
661 // only need when $return_to_message_list_after_move is off
662 addHidden('passed_id', ($next >= 0 ? $next : $prev))."\n" .
663 addHidden('startMessage', $startMessage)."\n" );
7d020720 664 $oTemplate->assign('last_move_target', isset($lastTargetMailbox) && !empty($lastTargetMailbox) ? $lastTargetMailbox : '');
665 $oTemplate->assign('can_be_copied', $show_copy_buttons==1);
1e150c97 666 } else {
7d020720 667 $oTemplate->assign('can_be_moved', false);
668 $oTemplate->assign('move_form_extra', '');
669 $oTemplate->assign('last_move_target', '');
670 $oTemplate->assign('can_be_copied', false);
988e24f6 671 }
7d020720 672 } else {
673 $oTemplate->assign('can_be_deleted', false);
674 $oTemplate->assign('move_delete_form_action', '');
675 $oTemplate->assign('delete_form_extra', '');
676 $oTemplate->assign('can_be_moved', false);
677 $oTemplate->assign('move_form_extra', '');
678 $oTemplate->assign('last_move_target', '');
679 $oTemplate->assign('can_be_copied', false);
680 }
67dc67bb 681
74540ffc 682 // access keys... only add to the top menubar, because adding
726f0cd4 683 // them twice makes them less functional (press access key, *then*
74540ffc 684 // press <enter> to make it work)
726f0cd4 685 //
74540ffc 686 if ($nav_on_top) {
726f0cd4 687 global $accesskey_read_msg_reply, $accesskey_read_msg_reply_all,
688 $accesskey_read_msg_forward, $accesskey_read_msg_as_attach,
689 $accesskey_read_msg_delete, $accesskey_read_msg_bypass_trash,
28cdccf6 690 $accesskey_read_msg_move, $accesskey_read_msg_move_to,
691 $accesskey_read_msg_copy;
726f0cd4 692 } else {
693 $accesskey_read_msg_reply = $accesskey_read_msg_reply_all =
694 $accesskey_read_msg_forward = $accesskey_read_msg_as_attach =
695 $accesskey_read_msg_delete = $accesskey_read_msg_bypass_trash =
28cdccf6 696 $accesskey_read_msg_move = $accesskey_read_msg_move_to =
697 $accesskey_read_msg_copy = 'NONE';
726f0cd4 698 }
8949acd6 699 $oTemplate->assign('accesskey_read_msg_reply', $accesskey_read_msg_reply);
700 $oTemplate->assign('accesskey_read_msg_reply_all', $accesskey_read_msg_reply_all);
701 $oTemplate->assign('accesskey_read_msg_forward', $accesskey_read_msg_forward);
702 $oTemplate->assign('accesskey_read_msg_as_attach', $accesskey_read_msg_as_attach);
703 $oTemplate->assign('accesskey_read_msg_delete', $accesskey_read_msg_delete);
704 $oTemplate->assign('accesskey_read_msg_bypass_trash', $accesskey_read_msg_bypass_trash);
705 $oTemplate->assign('accesskey_read_msg_move_to', $accesskey_read_msg_move_to);
706 $oTemplate->assign('accesskey_read_msg_move', $accesskey_read_msg_move);
28cdccf6 707 $oTemplate->assign('accesskey_read_msg_copy', $accesskey_read_msg_copy);
8949acd6 708
2d97bb26 709 global $null;
710 do_hook('read_body_menu', $null);
711
7d020720 712 if ($nav_on_top) {
713 $oTemplate->display('read_menubar_nav.tpl');
714 $oTemplate->display('read_menubar_buttons.tpl');
715 } else {
716 $oTemplate->display('read_menubar_buttons.tpl');
717 $oTemplate->display('read_menubar_nav.tpl');
764971df 718 }
67dc67bb 719
c615b1da 720}
721
722function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
7d020720 723 global $base_uri, $where, $what, $show_html_default,
a6519f05 724 $oTemplate, $download_href, $PHP_SELF,
7d020720 725 $unsafe_image_toggle_href, $unsafe_image_toggle_text;
4669e892 726
d9c1dccc 727 $urlMailbox = urlencode($mailbox);
78909469 728 $urlPassed_id = urlencode($passed_id);
729 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 730
78909469 731 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
78909469 732 if (!empty($where)) {
733 $query_string .= '&amp;where=' . urlencode($where);
734 }
78909469 735 if (!empty($what)) {
736 $query_string .= '&amp;what=' . urlencode($what);
737 }
e95c04ec 738 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 739
7d020720 740 $links = array();
741 $links[] = array (
742 'URL' => $url,
743 'Text' => _("View Full Header")
744 );
a5e4a8fc 745
746 if ( checkForJavaScript() ) {
747 $links[] = array (
748 'URL' => 'javascript:printThis();',
749 'Text' => _("Print"),
750 );
751 } else {
752 $links[] = array (
753 'URL' => set_url_var($PHP_SELF, 'print', '1'),
a6519f05 754 'Text' => _("Print"),
755 'Target' => '_blank'
7d020720 756 );
a5e4a8fc 757 }
758
7d020720 759 $links[] = array (
760 'URL' => $download_href,
210b5bb5 761 'Text' => _("Download this as a file")
7d020720 762 );
763 $toggle = html_toggle_href($mailbox, $passed_id, $passed_ent_id, $message);
764 if (!empty($toggle)) {
765 $links[] = array (
766 'URL' => $toggle,
767 'Text' => $show_html_default==1 ? _("View as plain text") : _("View as HTML")
768 );
769 }
770 if (!empty($unsafe_image_toggle_href)) {
771 $links[] = array (
772 'URL' => $unsafe_image_toggle_href,
773 'Text' => $unsafe_image_toggle_text
774 );
775 }
776
777 do_hook('read_body_header_right', $links);
778
779 $oTemplate->assign('links', $links);
67dc67bb 780
7d020720 781 return $oTemplate->fetch('read_toolbar.tpl');
91c27aee 782}
783
6206f6c4 784/***************************/
2ffa3f57 785/* Main of read_body.php */
6206f6c4 786/***************************/
57257333 787
0b97a708 788/* get the globals we may need */
789
e95c04ec 790sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
e95c04ec 791sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 792if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
793 $messages = array();
ce274df9 794}
81de00c0 795sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
796if (is_array($delayed_errors)) {
797 $oErrorHandler->AssignDelayedErrors($delayed_errors);
798 sqsession_unregister("delayed_errors");
799}
e95c04ec 800/** GET VARS */
801sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 802if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
803 $where = 'right_main.php';
804}
d0b119a5 805/*
806 * Used as entry key to the list of uid's cached in the mailbox cache
807 * we use the cached uid's to get the next and prev message.
808 */
324ac3c5 809if (!sqgetGlobalVar('what', $what, SQ_GET) ){
810 $what = 0;
811}
e95c04ec 812if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
813 $show_more = (int) $temp;
1b9f3c04 814}
e95c04ec 815if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
816 $show_more_cc = (int) $temp;
0b97a708 817}
e95c04ec 818if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
819 $show_more_bcc = (int) $temp;
0b97a708 820}
e95c04ec 821if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
822 $view_hdr = (int) $temp;
0b97a708 823}
e95c04ec 824
91c27aee 825if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
826 $iAccount = (int) $temp;
827} else {
828 $iAccount = 0;
829}
830
e95c04ec 831/** GET/POST VARS */
51bbe8fa 832sqgetGlobalVar('passed_id', $passed_id, SQ_INORDER, NULL, SQ_TYPE_BIGINT);
e95c04ec 833sqgetGlobalVar('passed_ent_id', $passed_ent_id);
834sqgetGlobalVar('mailbox', $mailbox);
835
e95c04ec 836if ( sqgetGlobalVar('sort', $temp) ) {
837 $sort = (int) $temp;
0b97a708 838}
e95c04ec 839if ( sqgetGlobalVar('startMessage', $temp) ) {
840 $startMessage = (int) $temp;
324ac3c5 841} else {
842 $startMessage = 1;
ce274df9 843}
7277191e 844if(sqgetGlobalVar('show_html_default', $temp)) {
845 $show_html_default = (int) $temp;
846}
847
848if(sqgetGlobalVar('view_unsafe_images', $temp)) {
849 $view_unsafe_images = (int) $temp;
850 if($view_unsafe_images == 1) {
851 $show_html_default = 1;
852 }
853} else {
854 $view_unsafe_images = 0;
855}
d31f73f1 856
324ac3c5 857/**
858 * Retrieve mailbox cache
859 */
860sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 861
ce274df9 862/* end of get globals */
38c944cc 863
906f7e9f 864$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, 0);
91c27aee 865$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
866
c3731db5 867
91c27aee 868/**
c3731db5 869 Start code to set the columns to fetch in case of hitting the next/prev link
870 The reason for this is the fact that the cache can be invalidated which means that the headers
871 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
872
873 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
874*/
875
876/**
877 * Replace From => To in case it concerns a draft or sent folder
878 */
199ff86a 879$aColumns = array();
c3731db5 880if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
881 !in_array(SQM_COL_TO,$index_order)) {
882 $aNewOrder = array(); // nice var name ;)
883 foreach($index_order as $iCol) {
884 if ($iCol == SQM_COL_FROM) {
885 $iCol = SQM_COL_TO;
886 }
199ff86a 887 $aColumns[$iCol] = array();
c3731db5 888 }
c3731db5 889} else {
199ff86a 890 foreach ($index_order as $iCol) {
891 $aColumns[$iCol] = array();
892 }
c3731db5 893}
894
895$aProps = array(
896 'columns' => $aColumns, // columns bound settings
897 'config' => array(
898 'highlight_list' => $message_highlight_list, // row highlighting rules
899 'trash_folder' => $trash_folder,
900 'sent_folder' => $sent_folder,
901 'draft_folder' => $draft_folder));
902
903calcFetchColumns($aMailbox,$aProps);
904
905/**
906 End code to set the columns to fetch in case of hitting the next/prev link
907*/
908
909
910
911/**
912 * Check if cache is still valid, $what contains the key
913 * which gives us acces to the array with uid's. At this moment
914 * 0 is used for a normal message list and search uses 1 as key. This can be
915 * changed / extended in the future.
916 * If on a select of a mailbox we detect that the cache should be invalidated due to
917 * the delete of messages or due to new messages we empty the list with uid's and
918 * that's what we detect below.
919 */
91c27aee 920if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 921 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 922}
38c944cc 923
d0b119a5 924$iSetIndex = $aMailbox['SETINDEX'];
925$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
926
324ac3c5 927/**
928 * Update the seen state
929 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
930 */
931if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
932 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 933}
e0e30169 934
1e150c97 935/**
936 * Process Delete from delete-move-next
937 * but only if delete_id was set
938 */
939if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 940 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 941}
942
e8b2c636 943/**
944 * or move button... why is handleMessageListForm (per above) conditional anway?
945 */
946if ( sqgetGlobalVar('moveButton', $ignore, SQ_POST) ) {
947 $sError = handleMessageListForm($imapConnection,$aMailbox);
948 sqgetGlobalVar('targetMailbox', $lastTargetMailbox, SQ_POST);
949}
950
38c944cc 951/**
952 * $message contains all information about the message
953 * including header and body
954 */
37d2a6ee 955
324ac3c5 956if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
957 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
958 $FirstTimeSee = !$message->is_seen;
38c944cc 959} else {
324ac3c5 960 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
961 $FirstTimeSee = !$message->is_seen;
5200c026 962}
bdfa0f9a 963
964/**
965 * update message seen status and put in cache
966 */
967$message->is_seen = true;
968$aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
969
dd628162 970if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 971 $message = $message->getEntity($passed_ent_id);
972 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
973 $message = $message->parent;
974 }
975 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
976 $rfc822_header = new Rfc822Header();
977 $rfc822_header->parseHeader($read);
978 $message->rfc822_header = $rfc822_header;
91c27aee 979} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
980 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
981 $rfc822_header = new Rfc822Header();
982 $rfc822_header->parseHeader($read);
983 $message->rfc822_header = $rfc822_header;
c615b1da 984} else {
324ac3c5 985 $passed_ent_id = 0;
38c944cc 986}
5200c026 987$header = $message->header;
57257333 988
a798d8b2 989// gmail does not mark messages as read when retrieving the message body
990// even though RFC 3501, section 6.4.5 (FETCH Command) says:
991// "The \Seen flag is implicitly set; if this causes the flags to change,
992// they SHOULD be included as part of the FETCH responses."
993//
994if ($imap_server_type == 'gmail') {
694205bb 995 sqimap_toggle_flag($imapConnection, array($passed_id), '\\Seen', true, true);
a798d8b2 996}
57257333 997
6206f6c4 998/****************************************/
999/* Block for handling incoming url vars */
1000/****************************************/
5200c026 1001
5200c026 1002if (isset($sendreceipt)) {
1003 if ( !$message->is_mdnsent ) {
324ac3c5 1004 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
40e07136 1005 if ( SendMDN( $mailbox, $passed_id, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1006 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1007 $message->is_mdnsent = true;
1012f961 1008 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1009 }
5200c026 1010 }
1011}
6206f6c4 1012/***********************************************/
1013/* End of block for handling incoming url vars */
1014/***********************************************/
1015
58ca5611 1016$oTemplate->assign('aAttribs', array('class' => 'entity_sep'));
1017$hr = $oTemplate->fetch('horizontal_rule.tpl');
9f42bfc8 1018$messagebody = '';
6e515418 1019do_hook('read_body_top', $null);
c4ad259b 1020if ($show_html_default == 1) {
1021 $ent_ar = $message->findDisplayEntity(array());
1022} else {
1023 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1024}
a128c967 1025$cnt = count($ent_ar);
1026for ($i = 0; $i < $cnt; $i++) {
6a108031 1027 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1028 if ($i != $cnt-1) {
58ca5611 1029 $messagebody .= $hr;
a128c967 1030 }
38c944cc 1031}
e55c441a 1032
202bcbcc 1033/**
1034 * Write mailbox with updated seen flag information back to cache.
1035 */
1036$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1037sqsession_register($mailbox_cache,'mailbox_cache');
1038$_SESSION['mailbox_cache'] = $mailbox_cache;
202bcbcc 1039
c4dcda23 1040// message list URI is used in page header when on read_body
1041$oTemplate->assign('message_list_href', get_message_list_uri($aMailbox['NAME'], $startMessage, $what));
1042
b89ceca6 1043displayPageHeader($color, $mailbox,'','');
a6519f05 1044
1045/* this is the non-javascript version of printer friendly */
1046if ( sqgetGlobalVar('print', $print, SQ_GET) ) {
1047 $oTemplate->display('read_message_print.tpl');
1048} else {
1049 formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message,false);
1050}
e0e30169 1051formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
7d020720 1052
1053$oTemplate->assign('message_body', $messagebody);
1054$oTemplate->display('read_message_body.tpl');
1055
1056formatAttachments($message,$ent_ar,$mailbox, $passed_id);
a07cd1a4 1057
1058/* show attached images inline -- if pref'fed so */
7d020720 1059if ($attachment_common_show_images && is_array($attachment_common_show_images_list)) {
1060 $images = array();
a07cd1a4 1061 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1062 $imgurl = SM_PATH . 'src/download.php' .
57257333 1063 '?' .
cd7b8833 1064 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1065 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1066 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1067 '&amp;absolute_dl=true';
7d020720 1068 $a = array();
1069 $a['Name'] = $img['name'];
1070 $a['DisplayURL'] = $imgurl;
1071 $a['DownloadURL'] = $img['download_href'];
1072 $images[] = $a;
10f0ce72 1073 }
67dc67bb 1074
7d020720 1075 $oTemplate->assign('images', $images);
1076 $oTemplate->display('read_display_images_inline.tpl');
a07cd1a4 1077}
1078
9ad07d9a 1079formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1080
6e515418 1081do_hook('read_body_bottom', $null);
a07cd1a4 1082sqimap_logout($imapConnection);
51d66ea2 1083$oTemplate->display('footer.tpl');