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