Do not use ob_end_flush because the fetch method returns the content of the
[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 *
47ccfad4 9 * @copyright &copy; 1999-2006 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
30967a1e 15/**
202bcbcc 16 * Include the SquirrelMail initialization file.
30967a1e 17 */
202bcbcc 18require('../include/init.php');
86725763 19
20/* SquirrelMail required files. */
202bcbcc 21
22
86725763 23require_once(SM_PATH . 'functions/imap.php');
202bcbcc 24require_once(SM_PATH . 'functions/imap_asearch.php'); // => move to mailbox_display
86725763 25require_once(SM_PATH . 'functions/mime.php');
26require_once(SM_PATH . 'functions/date.php');
27require_once(SM_PATH . 'functions/url_parser.php');
6d021521 28require_once(SM_PATH . 'functions/identity.php');
202bcbcc 29require_once(SM_PATH . 'functions/arrays.php');
30require_once(SM_PATH . 'functions/mailbox_display.php');
31require_once(SM_PATH . 'functions/forms.php');
32require_once(SM_PATH . 'functions/attachment_common.php');
38c944cc 33
a07cd1a4 34/**
1fca12b5 35 * Given an IMAP message id number, this will look it up in the cached
1e150c97 36 * and sorted msgs array and return the index of the next message
1fca12b5 37 *
1e150c97 38 * @param int $passed_id The current message UID
1fca12b5 39 * @return the index of the next valid message from the array
40 */
e0e30169 41function findNextMessage($uidset,$passed_id='backwards') {
324ac3c5 42 if (!is_array($uidset)) {
43 return -1;
44 }
e0e30169 45 if ($passed_id=='backwards' || !is_array($uidset)) { // check for backwards compattibilty gpg plugin
46 $passed_id = $uidset;
e0e30169 47 }
91c27aee 48 $result = sqm_array_get_value_by_offset($uidset,$passed_id,1);
49 if ($result === false) {
50 return -1;
51 } else {
52 return $result;
10f0ce72 53 }
a07cd1a4 54}
55
1e150c97 56/**
57 * Given an IMAP message id number, this will look it up in the cached
58 * and sorted msgs array and return the index of the previous message
59 *
60 * @param int $passed_id The current message UID
61 * @return the index of the next valid message from the array
62 */
e0e30169 63
64function findPreviousMessage($uidset, $passed_id) {
324ac3c5 65 if (!is_array($uidset)) {
66 return -1;
e0e30169 67 }
91c27aee 68 $result = sqm_array_get_value_by_offset($uidset,$passed_id,-1);
69 if ($result === false) {
70 return -1;
71 } else {
72 return $result;
a07cd1a4 73 }
a07cd1a4 74}
10f0ce72 75
a07cd1a4 76/**
1fca12b5 77 * Displays a link to a page where the message is displayed more
78 * "printer friendly".
1e150c97 79 * @param string $mailbox Name of current mailbox
4669e892 80 * @param int $passed_id
1fca12b5 81 */
1e150c97 82function printer_friendly_link($mailbox, $passed_id, $passed_ent_id) {
4c8986b4 83 global $javascript_on, $show_html_default;
a07cd1a4 84
e2da1d80 85 /* hackydiehack */
86 if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) {
87 $view_unsafe_images = false;
88 } else {
89 $view_unsafe_images = true;
90 }
164584f0 91 $params = '?passed_ent_id=' . urlencode($passed_ent_id) .
c2324b26 92 '&mailbox=' . urlencode($mailbox) .
4c8986b4 93 '&passed_id=' . urlencode($passed_id) .
94 '&view_unsafe_images='. (bool) $view_unsafe_images .
95 '&show_html_default=' . $show_html_default;
10f0ce72 96
a07cd1a4 97 $print_text = _("View Printable Version");
10f0ce72 98
c615b1da 99 $result = '';
a07cd1a4 100 /* Output the link. */
101 if ($javascript_on) {
2c92ea9d 102 $result = '<script type="text/javascript">' . "\n" .
9f42bfc8 103 '<!--' . "\n" .
104 " function printFormat() {\n" .
105 ' window.open("../src/printer_friendly_main.php' .
106 $params . '","Print","width=800,height=600");' . "\n".
107 " }\n" .
108 "// -->\n" .
109 "</script>\n" .
110 "<a href=\"javascript:printFormat();\">$print_text</a>\n";
a07cd1a4 111 } else {
c2324b26 112 $result = '<a target="_blank" href="../src/printer_friendly_bottom.php' .
9f42bfc8 113 "$params\">$print_text</a>\n";
a07cd1a4 114 }
d9c1dccc 115 return $result;
a07cd1a4 116}
117
7277191e 118function view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message) {
119 global $base_uri, $show_html_default;
120
121 $has_html = false;
122 if ($message->header->type0 == 'message' && $message->header->type1 == 'rfc822') {
123 $type0 = $message->rfc822_header->content_type->type0;
124 $type1 = $message->rfc822_header->content_type->type1;
125 } else {
126 $type0 = $message->header->type0;
127 $type1 = $message->header->type1;
128 }
129 if($type0 == 'multipart' &&
130 ($type1 == 'alternative' || $type1 == 'mixed' || $type1 == 'related')) {
131 if ($message->findDisplayEntity(array(), array('text/html'), true)) {
132 $has_html = true;
133 }
134 }
135 /*
136 * Normal single part message so check its type.
137 */
138 else {
139 if($type0 == 'text' && $type1 == 'html') {
140 $has_html = true;
141 }
142 }
143 if($has_html == true) {
202bcbcc 144 $vars = array('passed_ent_id', 'show_more', 'show_more_cc', 'override_type0', 'override_type1', 'startMessage','where', 'what');
7277191e 145
146 $new_link = $base_uri . 'src/read_body.php?passed_id=' . urlencode($passed_id) .
147 '&amp;passed_ent_id=' . urlencode($passed_ent_id) .
148 '&amp;mailbox=' . urlencode($mailbox);
149 foreach($vars as $var) {
150 if(sqgetGlobalVar($var, $temp)) {
151 $new_link .= '&amp;' . $var . '=' . urlencode($temp);
152 }
153 }
154
155 if($show_html_default == 1) {
156 $new_link .= '&amp;show_html_default=0';
157 $link = _("View as plain text");
158 } else {
159 $new_link .= '&amp;show_html_default=1';
160 $link = _("View as HTML");
161 }
162 return '&nbsp;|&nbsp<a href="' . $new_link . '">' . $link . '</a>';
163 }
164 return '';
165}
166
4669e892 167function ServerMDNSupport($aFlags) {
168 /* escaping $ doesn't work -> \x36 */
c075fcfe 169 return ( in_array('$mdnsent',$aFlags,true) ||
170 in_array('\\*',$aFlags,true) ) ;
57257333 171}
172
fc224f68 173function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
8d8da447 174 global $username, $attachment_dir, $popuser, $username, $color,
ce68b76b 175 $version, $squirrelmail_language, $default_charset,
176 $languages, $useSendmail, $domain, $sent_folder;
57257333 177
e95c04ec 178 sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER);
0b97a708 179
38bca81c 180 $header = $message->rfc822_header;
57257333 181
fc224f68 182 $rfc822_header = new Rfc822Header();
d9c1dccc 183 $content_type = new ContentType('multipart/report');
fc224f68 184 $content_type->properties['report-type']='disposition-notification';
d9c1dccc 185
fc224f68 186 set_my_charset();
187 if ($default_charset) {
d9c1dccc 188 $content_type->properties['charset']=$default_charset;
fc224f68 189 }
190 $rfc822_header->content_type = $content_type;
191 $rfc822_header->to[] = $header->dnt;
a20855e4 192 $rfc822_header->subject = _("Read:") . ' ' . encodeHeader($header->subject);
fc224f68 193
27a1d10a 194 // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md)
195 // This merely comes from compose.php and only happens when there is no
196 // email_addr specified in user's identity (which is the startup config)
197 if (ereg("^([^@%/]+)[@%/](.+)$", $username, $usernamedata)) {
198 $popuser = $usernamedata[1];
199 $domain = $usernamedata[2];
200 unset($usernamedata);
201 } else {
202 $popuser = $username;
203 }
fc224f68 204
205 $reply_to = '';
6d021521 206 $ident = get_identities();
207 if(!isset($identity)) $identity = 0;
208 $full_name = $ident[$identity]['full_name'];
209 $from_mail = $ident[$identity]['email_address'];
210 $from_addr = '"'.$full_name.'" <'.$from_mail.'>';
211 $reply_to = $ident[$identity]['reply_to'];
212
27a1d10a 213 if (!$from_mail) {
214 $from_mail = "$popuser@$domain";
215 $from_addr = $from_mail;
fc224f68 216 }
217 $rfc822_header->from = $rfc822_header->parseAddress($from_addr,true);
218 if ($reply_to) {
219 $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to,true);
220 }
d9c1dccc 221
57257333 222 // part 1 (RFC2298)
57257333 223 $senton = getLongDateString( $header->date );
224 $to_array = $header->to;
225 $to = '';
226 foreach ($to_array as $line) {
af568a82 227 $to .= ' '.$line->getAddress();
57257333 228 }
57257333 229 $now = getLongDateString( time() );
78db1583 230 set_my_charset();
46bb8da8 231 $body = _("Your message") . "\r\n\r\n" .
48027e89 232 "\t" . _("To") . ': ' . decodeHeader($to,false,false) . "\r\n" .
233 "\t" . _("Subject") . ': ' . decodeHeader($header->subject,false,false) . "\r\n" .
234 "\t" . _("Sent") . ': ' . $senton . "\r\n" .
46bb8da8 235 "\r\n" .
236 sprintf( _("Was displayed on %s"), $now );
f69feefe 237
fc224f68 238 $special_encoding = '';
4669e892 239 if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
f4bb5d22 240 function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) {
241 $body = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $body);
d9c1dccc 242 if (strtolower($default_charset) == 'iso-2022-jp') {
243 if (mb_detect_encoding($body) == 'ASCII') {
244 $special_encoding = '8bit';
245 } else {
246 $body = mb_convert_encoding($body, 'JIS');
247 $special_encoding = '7bit';
248 }
249 }
21461ca4 250 } elseif (sq_is8bit($body)) {
251 $special_encoding = '8bit';
6fbd125b 252 }
fc224f68 253 $part1 = new Message();
254 $part1->setBody($body);
255 $mime_header = new MessageHeader;
256 $mime_header->type0 = 'text';
257 $mime_header->type1 = 'plain';
258 if ($special_encoding) {
259 $mime_header->encoding = $special_encoding;
d9c1dccc 260 } else {
fc224f68 261 $mime_header->encoding = 'us-ascii';
262 }
263 if ($default_charset) {
264 $mime_header->parameters['charset'] = $default_charset;
265 }
266 $part1->mime_header = $mime_header;
267
57257333 268 // part2 (RFC2298)
d9c1dccc 269 $original_recipient = $to;
57257333 270 $original_message_id = $header->message_id;
271
fc224f68 272 $report = "Reporting-UA : $SERVER_NAME ; SquirrelMail (version $version) \r\n";
57257333 273 if ($original_recipient != '') {
fc224f68 274 $report .= "Original-Recipient : $original_recipient\r\n";
57257333 275 }
276 $final_recipient = $sender;
fc224f68 277 $report .= "Final-Recipient: rfc822; $final_recipient\r\n" .
57257333 278 "Original-Message-ID : $original_message_id\r\n" .
279 "Disposition: manual-action/MDN-sent-manually; displayed\r\n";
280
fc224f68 281 $part2 = new Message();
282 $part2->setBody($report);
283 $mime_header = new MessageHeader;
284 $mime_header->type0 = 'message';
285 $mime_header->type1 = 'disposition-notification';
286 $mime_header->encoding = 'us-ascii';
287 $part2->mime_header = $mime_header;
288
289 $composeMessage = new Message();
290 $composeMessage->rfc822_header = $rfc822_header;
291 $composeMessage->addEntity($part1);
292 $composeMessage->addEntity($part2);
293
294
d9c1dccc 295 if ($useSendmail) {
296 require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
297 global $sendmail_path;
298 $deliver = new Deliver_SendMail();
299 $stream = $deliver->initStream($composeMessage,$sendmail_path);
fc224f68 300 } else {
d9c1dccc 301 require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
302 $deliver = new Deliver_SMTP();
ce68b76b 303 global $smtpServerAddress, $smtpPort, $pop_before_smtp;
d9c1dccc 304 $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
9bd3b1e6 305 get_smtp_user($user, $pass);
d9c1dccc 306 $stream = $deliver->initStream($composeMessage,$domain,0,
70ce2218 307 $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
d9c1dccc 308 }
309 $success = false;
fc224f68 310 if ($stream) {
d9c1dccc 311 $length = $deliver->mail($composeMessage, $stream);
312 $success = $deliver->finalizeStream($stream);
fc224f68 313 }
d9c1dccc 314 if (!$success) {
a15f9d93 315 $msg = $deliver->dlv_msg;
316 if (! empty($deliver->dlv_server_msg)) {
317 $msg.= '<br />' .
0cc4fb0d 318 _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' .
a15f9d93 319 nl2br(htmlspecialchars($deliver->dlv_server_msg));
320 }
fc224f68 321 plain_error_message($msg, $color);
322 } else {
323 unset ($deliver);
d9c1dccc 324 if (sqimap_mailbox_exists ($imapConnection, $sent_folder)) {
81de00c0 325 $sid = sqimap_append ($imapConnection, $sent_folder, $length);
d9c1dccc 326 require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
327 $imap_deliver = new Deliver_IMAP();
328 $imap_deliver->mail($composeMessage, $imapConnection);
81de00c0 329 sqimap_append_done ($imapConnection, $sent_folder);
d9c1dccc 330 unset ($imap_deliver);
331 }
332 }
333 return $success;
57257333 334}
335
6201339c 336function ToggleMDNflag ($set ,$imapConnection, $mailbox, $passed_id) {
d9c1dccc 337 $sg = $set?'+':'-';
338 $cmd = 'STORE ' . $passed_id . ' ' . $sg . 'FLAGS ($MDNSent)';
4669e892 339 $read = sqimap_run_command ($imapConnection, $cmd, true, $response,
6201339c 340 $readmessage, TRUE);
57257333 341}
342
4d0cd98b 343function formatRecipientString($recipients, $item ) {
d9c1dccc 344 global $show_more_cc, $show_more, $show_more_bcc,
345 $PHP_SELF;
4d0cd98b 346
d9c1dccc 347 $string = '';
38c944cc 348 if ((is_array($recipients)) && (isset($recipients[0]))) {
d9c1dccc 349 $show = false;
38c944cc 350
351 if ($item == 'to') {
d9c1dccc 352 if ($show_more) {
353 $show = true;
354 $url = set_url_var($PHP_SELF, 'show_more',0);
355 } else {
356 $url = set_url_var($PHP_SELF, 'show_more',1);
357 }
358 } else if ($item == 'cc') {
359 if ($show_more_cc) {
360 $show = true;
361 $url = set_url_var($PHP_SELF, 'show_more_cc',0);
362 } else {
363 $url = set_url_var($PHP_SELF, 'show_more_cc',1);
364 }
365 } else if ($item == 'bcc') {
366 if ($show_more_bcc) {
367 $show = true;
368 $url = set_url_var($PHP_SELF, 'show_more_bcc',0);
369 } else {
370 $url = set_url_var($PHP_SELF, 'show_more_bcc',1);
371 }
372 }
373
374 $cnt = count($recipients);
375 foreach($recipients as $r) {
a91189d6 376 $add = decodeHeader($r->getAddress(true));
d9c1dccc 377 if ($string) {
3c621ba1 378 $string .= '<br />' . $add;
d9c1dccc 379 } else {
380 $string = $add;
381 if ($cnt > 1) {
3c621ba1 382 $string .= '&nbsp;(<a href="'.$url;
d9c1dccc 383 if ($show) {
3c621ba1 384 $string .= '">'._("less").'</a>)';
d9c1dccc 385 } else {
3c621ba1 386 $string .= '">'._("more").'</a>)';
d9c1dccc 387 break;
388 }
389 }
390 }
1fca12b5 391 }
4d0cd98b 392 }
c615b1da 393 return $string;
394}
395
e0e30169 396function formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message,
af568a82 397 $color, $FirstTimeSee) {
ce68b76b 398 global $default_use_mdn, $default_use_priority,
77836429 399 $show_xmailer_default, $mdn_user_support, $PHP_SELF, $javascript_on,
134e4174 400 $squirrelmail_language;
38bca81c 401
134e4174 402 $mailbox = $aMailbox['NAME'];
e0e30169 403
d9c1dccc 404 $header = $message->rfc822_header;
405 $env = array();
bdb9ce72 406 $env[_("Subject")] = str_replace("&nbsp;"," ",decodeHeader($header->subject));
7893c8a5 407
d9c1dccc 408 $from_name = $header->getAddr_s('from');
d6b6d221 409 if (!$from_name)
d9c1dccc 410 $from_name = $header->getAddr_s('sender');
d6b6d221 411 if (!$from_name)
412 $env[_("From")] = _("Unknown sender");
413 else
414 $env[_("From")] = decodeHeader($from_name);
d9c1dccc 415 $env[_("Date")] = getLongDateString($header->date);
416 $env[_("To")] = formatRecipientString($header->to, "to");
417 $env[_("Cc")] = formatRecipientString($header->cc, "cc");
418 $env[_("Bcc")] = formatRecipientString($header->bcc, "bcc");
419 if ($default_use_priority) {
0e8006dc 420 $env[_("Priority")] = htmlspecialchars(getPriorityStr($header->priority));
d9c1dccc 421 }
422 if ($show_xmailer_default) {
a91189d6 423 $env[_("Mailer")] = decodeHeader($header->xmailer);
d9c1dccc 424 }
425 if ($default_use_mdn) {
426 if ($mdn_user_support) {
427 if ($header->dnt) {
428 if ($message->is_mdnsent) {
509ce88e 429 $env[_("Read receipt")] = _("sent");
d9c1dccc 430 } else {
4669e892 431 $env[_("Read receipt")] = _("requested");
432 if (!(handleAsSent($mailbox) ||
d9c1dccc 433 $message->is_deleted ||
434 $passed_ent_id)) {
435 $mdn_url = $PHP_SELF . '&sendreceipt=1';
436 if ($FirstTimeSee && $javascript_on) {
2c92ea9d 437 $script = '<script type="text/javascript">' . "\n";
d9c1dccc 438 $script .= '<!--'. "\n";
439 $script .= 'if(window.confirm("' .
440 _("The message sender has requested a response to indicate that you have read this message. Would you like to send a receipt?") .
441 '")) { '."\n" .
442 ' sendMDN()'.
443 '}' . "\n";
444 $script .= '// -->'. "\n";
445 $script .= '</script>'. "\n";
446 echo $script;
447 }
448 $env[_("Read receipt")] .= '&nbsp;<a href="' . $mdn_url . '">[' .
449 _("Send read receipt now") . ']</a>';
450 }
451 }
452 }
453 }
454 }
c615b1da 455
3c621ba1 456 $s = '<table width="100%" cellpadding="0" cellspacing="2" border="0"';
457 $s .= ' align="center" bgcolor="'.$color[0].'">';
d9c1dccc 458 foreach ($env as $key => $val) {
459 if ($val) {
3c621ba1 460 $s .= '<tr>';
461 $s .= html_tag('td', '<b>' . $key . ':&nbsp;&nbsp;</b>', 'right', '', 'valign="top" width="20%"') . "\n";
462 $s .= html_tag('td', $val, 'left', '', 'valign="top" width="80%"') . "\n";
463 $s .= '</tr>';
d9c1dccc 464 }
465 }
3c621ba1 466 echo '<table bgcolor="'.$color[9].'" width="100%" cellpadding="1"'.
467 ' cellspacing="0" border="0" align="center">'."\n";
468 echo '<tr><td height="5" colspan="2" bgcolor="'.
469 $color[4].'"></td></tr><tr><td align="center">'."\n";
d9c1dccc 470 echo $s;
00ac2f42 471 do_hook('read_body_header');
d9c1dccc 472 formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color);
3c621ba1 473 echo '</table>';
474 echo '</td></tr><tr><td height="5" colspan="2" bgcolor="'.$color[4].'"></td></tr>'."\n";
475 echo '</table>';
d9c1dccc 476}
c615b1da 477
1e150c97 478/**
4669e892 479 * Format message toolbar
480 *
1e150c97 481 * @param string $mailbox Name of current mailbox
482 * @param int $passed_id UID of current message
483 * @param int $passed_ent_id Id of entity within message
484 * @param object $message Current message object
485 * @param object $mbx_response
486 */
324ac3c5 487function formatMenubar($aMailbox, $passed_id, $passed_ent_id, $message, $removedVar, $nav_on_top = TRUE) {
a94c1db1 488 global $base_uri, $draft_folder, $where, $what, $color, $sort,
4669e892 489 $startMessage, $PHP_SELF, $save_as_draft,
1e150c97 490 $enable_forward_as_attachment, $imapConnection, $lastTargetMailbox,
ce68b76b 491 $username, $delete_prev_next_display,
91c27aee 492 $compose_new_win, $javascript_on, $compose_width, $compose_height;
c615b1da 493
e0e30169 494 //FIXME cleanup argument list, use $aMailbox where possible
495 $mailbox = $aMailbox['NAME'];
496
d9c1dccc 497 $topbar_delimiter = '&nbsp;|&nbsp;';
1e150c97 498 $double_delimiter = '&nbsp;&nbsp;&nbsp;&nbsp;';
d9c1dccc 499 $urlMailbox = urlencode($mailbox);
c615b1da 500
1e150c97 501 $msgs_url = $base_uri . 'src/';
2ffa3f57 502
1e150c97 503 // BEGIN NAV ROW - PREV/NEXT, DEL PREV/NEXT, LINKS TO INDEX, etc.
45c1ed84 504 $nav_row = '<tr><td align="left" colspan="2" style="border: 1px solid '.$color[9].';"><small>';
e55c441a 505
1e150c97 506 // Create Prev & Next links
507 // Handle nested entities first (i.e. Mime Attach parts)
508 if (isset($passed_ent_id) && $passed_ent_id) {
509 // code for navigating through attached message/rfc822 messages
d9c1dccc 510 $url = set_url_var($PHP_SELF, 'passed_ent_id',0);
70bdc740 511 $entities = array();
512 $entity_count = array();
513 $c = 0;
f2f03410 514
70bdc740 515 foreach($message->parent->entities as $ent) {
9f42bfc8 516 if ($ent->type0 == 'message' && $ent->type1 == 'rfc822') {
517 $c++;
518 $entity_count[$c] = $ent->entity_id;
519 $entities[$ent->entity_id] = $c;
520 }
70bdc740 521 }
1e150c97 522
70bdc740 523 $prev_link = _("Previous");
91c27aee 524 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] > 1) {
70bdc740 525 $prev_ent_id = $entity_count[$entities[$passed_ent_id] - 1];
526 $prev_link = '<a href="'
527 . set_url_var($PHP_SELF, 'passed_ent_id', $prev_ent_id)
528 . '">' . $prev_link . '</a>';
529 }
1e150c97 530
531 $next_link = _("Next");
91c27aee 532 if(isset($entities[$passed_ent_id]) && $entities[$passed_ent_id] < $c) {
70bdc740 533 $next_ent_id = $entity_count[$entities[$passed_ent_id] + 1];
534 $next_link = '<a href="'
535 . set_url_var($PHP_SELF, 'passed_ent_id', $next_ent_id)
536 . '">' . $next_link . '</a>';
537 }
1e150c97 538
d9c1dccc 539 $par_ent_id = $message->parent->entity_id;
1e150c97 540 $up_link = '';
d9c1dccc 541 if ($par_ent_id) {
542 $par_ent_id = substr($par_ent_id,0,-2);
1e150c97 543 if ( $par_ent_id != 0 ) {
544 $up_link = $topbar_delimiter;
545 $url = set_url_var($PHP_SELF, 'passed_ent_id',$par_ent_id);
546 $up_link .= '<a href="'.$url.'">'._("Up").'</a>';
547 }
548 }
549
550 $nav_row .= $prev_link . $up_link . $topbar_delimiter . $next_link;
abafb676 551 $nav_row .= $double_delimiter . '[<a href="'.$url.'">'._("View Message").'</a>]';
1e150c97 552
553 // Prev/Next links for regular messages
324ac3c5 554 } else if ( true ) { //!(isset($where) && isset($what)) ) {
324ac3c5 555 $prev = findPreviousMessage($aMailbox['UIDSET'][$what], $passed_id);
556 $next = findNextMessage($aMailbox['UIDSET'][$what],$passed_id);
1e150c97 557
558 $prev_link = _("Previous");
559 if ($prev >= 0) {
560 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
561 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 562 "&amp;where=$where&amp;what=$what" .
1e150c97 563 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
564 $prev_link = '<a href="'.$uri.'">'.$prev_link.'</a>';
d9c1dccc 565 }
1e150c97 566
567 $next_link = _("Next");
568 if ($next >= 0) {
569 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
570 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
324ac3c5 571 "&amp;where=$where&amp;what=$what" .
1e150c97 572 '&amp;startMessage='.$startMessage.'&amp;show_more=0';
573 $next_link = '<a href="'.$uri.'">'.$next_link.'</a>';
574 }
575
1e150c97 576 // Only bother with Delete & Prev and Delete & Next IF
6201339c 577 // top display is enabled.
4669e892 578 if ( $delete_prev_next_display == 1 &&
324ac3c5 579 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
407e7032 580 $del_prev_link = _("Delete &amp; Prev");
1e150c97 581 if ($prev >= 0) {
582 $uri = $base_uri . 'src/read_body.php?passed_id='.$prev.
583 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
584 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 585 "&amp;where=$where&amp;what=$what" .
1e150c97 586 '&amp;delete_id='.$passed_id;
4669e892 587 $del_prev_link = '<a href="'.$uri.'">'.$del_prev_link.'</a>';
1e150c97 588 }
589
407e7032 590 $del_next_link = _("Delete &amp; Next");
1e150c97 591 if ($next >= 0) {
592 $uri = $base_uri . 'src/read_body.php?passed_id='.$next.
593 '&amp;mailbox='.$urlMailbox.'&amp;sort='.$sort.
594 '&amp;startMessage='.$startMessage.'&amp;show_more=0'.
324ac3c5 595 "&amp;where=$where&amp;what=$what" .
1e150c97 596 '&amp;delete_id='.$passed_id;
45c1ed84 597 $del_next_link = '<a href="'.$uri.'">'.$del_next_link.'</a>';
1e150c97 598 }
1e150c97 599 }
45c1ed84 600
abafb676 601 $nav_row .= '['.$prev_link.$topbar_delimiter.$next_link.']';
602 if ( isset($del_prev_link) && isset($del_next_link) )
603 $nav_row .= $double_delimiter.'['.$del_prev_link.$topbar_delimiter.$del_next_link.']';
1e150c97 604 }
605
606 // Start with Search Results or Message List link.
324ac3c5 607 $msgs_url .= "$where?where=read_body.php&amp;what=$what&amp;mailbox=" . $urlMailbox.
608 "&amp;startMessage=$startMessage";
609 if ($where == 'search.php') {
1e150c97 610 $msgs_str = _("Search Results");
611 } else {
1e150c97 612 $msgs_str = _("Message List");
613 }
614 $nav_row .= $double_delimiter .
abafb676 615 '[<a href="' . $msgs_url . '">' . $msgs_str . '</a>]';
1e150c97 616
617 $nav_row .= '</small></td></tr>';
618
619
620 // BEGIN MENU ROW - DELETE/REPLY/FORWARD/MOVE/etc.
ad2ee09d 621 $menu_row = '<tr bgcolor="'.$color[0].'"><td><small>';
98a9cc03 622 $comp_uri = $base_uri.'src/compose.php' .
623 '?passed_id=' . $passed_id .
624 '&amp;mailbox=' . $urlMailbox .
625 '&amp;startMessage=' . $startMessage .
626 (isset($passed_ent_id) ? '&amp;passed_ent_id='.$passed_ent_id : '');
4669e892 627
628 // Start form for reply/reply all/forward..
1a531551 629 $target = '';
630 $on_click='';
ee66175d 631 $method='method="post" ';
6190378c 632 $onsubmit='';
1a531551 633 if ($compose_new_win == '1') {
91c27aee 634 if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
635 $compose_width = '640';
636 }
637 if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
638 $compose_height = '550';
639 }
1a531551 640 if ( $javascript_on ) {
91c27aee 641 $on_click=' onclick="comp_in_new_form(\''.$comp_uri.'\', this, this.form,'. $compose_width .',' . $compose_height .')"';
1a531551 642 $comp_uri = 'javascript:void(0)';
ee66175d 643 $method='method="get" ';
6190378c 644 $onsubmit = 'onsubmit="return false" ';
1a531551 645 } else {
646 $target = 'target="_blank"';
1a531551 647 }
648 }
649
6190378c 650 $menu_row .= "\n".'<form name="composeForm" action="'.$comp_uri.'" '
651 . $method.$target.$onsubmit.' style="display: inline">'."\n";
98a9cc03 652
1e150c97 653 // If Draft folder - create Resume link
654 if (($mailbox == $draft_folder) && ($save_as_draft)) {
1a531551 655 $new_button = 'smaction_draft';
1e150c97 656 $comp_alt_string = _("Resume Draft");
657 } else if (handleAsSent($mailbox)) {
658 // If in Sent folder, edit as new
1a531551 659 $new_button = 'smaction_edit_new';
1e150c97 660 $comp_alt_string = _("Edit Message as New");
661 }
1e150c97 662 // Show Alt URI for Draft/Sent
98a9cc03 663 if (isset($comp_alt_string))
e1728a7a 664 $menu_row .= getButton('submit', $new_button, $comp_alt_string, $on_click) . "\n";
1e150c97 665
e1728a7a 666 $menu_row .= getButton('submit', 'smaction_reply', _("Reply"), $on_click) . "\n";
667 $menu_row .= getButton('submit', 'smaction_reply_all', _("Reply All"), $on_click) ."\n";
668 $menu_row .= getButton('submit', 'smaction_forward', _("Forward"), $on_click);
98a9cc03 669 if ($enable_forward_as_attachment)
ff0969a0 670 $menu_row .= '<input type="checkbox" name="smaction_attache" />' . _("As Attachment") .'&nbsp;&nbsp;'."\n";
1e150c97 671
51eb014b 672 $menu_row .= '</form>&nbsp;';
c615b1da 673
324ac3c5 674 if ( in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
675 // Form for deletion. Form is handled by the originating display in $where. This is right_main.php or search.php
676 $delete_url = $base_uri . "src/$where";
25e57ed2 677 $menu_row .= '<form name="deleteMessageForm" action="'.$delete_url.'" method="post" style="display: inline">';
a128c967 678
4669e892 679 if (!(isset($passed_ent_id) && $passed_ent_id)) {
324ac3c5 680 $menu_row .= addHidden('mailbox', $aMailbox['NAME']);
681 $menu_row .= addHidden('msg[0]', $passed_id);
7fcab811 682 $menu_row .= addHidden('startMessage', $startMessage);
e1728a7a 683 $menu_row .= getButton('submit', 'delete', _("Delete"));
ff0969a0 684 $menu_row .= '<input type="checkbox" name="bypass_trash" />' . _("Bypass Trash");
324ac3c5 685 } else {
e1728a7a 686 $menu_row .= getButton('submit', 'delete', _("Delete"), '', FALSE) . "\n"; // delete button is disabled
abafb676 687 }
abafb676 688
4669e892 689 $menu_row .= '</form>';
690 }
abafb676 691
1e150c97 692 // Add top move link
693 $menu_row .= '</small></td><td align="right">';
4669e892 694 if ( !(isset($passed_ent_id) && $passed_ent_id) &&
324ac3c5 695 in_array('\\deleted', $aMailbox['PERMANENTFLAGS'],true) ) {
b2811304 696
25e57ed2 697 $menu_row .= '<form name="moveMessageForm" action="'.$base_uri.'src/'.$where.'?'.'" method="post" style="display: inline">'.
64c9e87e 698 '<small>'.
324ac3c5 699
700 addHidden('mailbox',$aMailbox['NAME']) .
701 addHidden('msg[0]', $passed_id) . _("Move to:") .
1e150c97 702 '<select name="targetMailbox" style="padding: 0px; margin: 0px">';
b2811304 703
1e150c97 704 if (isset($lastTargetMailbox) && !empty($lastTargetMailbox)) {
705 $menu_row .= sqimap_mailbox_option_list($imapConnection, array(strtolower($lastTargetMailbox)));
706 } else {
707 $menu_row .= sqimap_mailbox_option_list($imapConnection);
708 }
b2811304 709 $menu_row .= '</select> ';
710
e1728a7a 711 $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n" . '</form>';
1e150c97 712 }
713 $menu_row .= '</td></tr>';
d9c1dccc 714
1e150c97 715 // echo rows, with hooks
764971df 716 $ret = do_hook_function('read_body_menu_top', array($nav_row, $menu_row));
988e24f6 717 if (is_array($ret)) {
718 if (isset($ret[0]) && !empty($ret[0])) {
719 $nav_row = $ret[0];
720 }
721 if (isset($ret[1]) && !empty($ret[1])) {
722 $menu_row = $ret[1];
723 }
764971df 724 }
1e150c97 725 echo '<table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
726 echo $nav_on_top ? $nav_row . $menu_row : $menu_row . $nav_row;
727 echo '</table>'."\n";
d62c4938 728 do_hook('read_body_menu_bottom');
c615b1da 729}
730
731function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
40a34e57 732 global $base_uri, $where, $what, $download_and_unsafe_link;
4669e892 733
d9c1dccc 734 $urlMailbox = urlencode($mailbox);
78909469 735 $urlPassed_id = urlencode($passed_id);
736 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 737
78909469 738 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
4669e892 739
78909469 740 if (!empty($where)) {
741 $query_string .= '&amp;where=' . urlencode($where);
742 }
743
744 if (!empty($what)) {
745 $query_string .= '&amp;what=' . urlencode($what);
746 }
747
e95c04ec 748 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 749
3c621ba1 750 $s = "<tr>\n" .
751 html_tag( 'td', '', 'right', '', 'valign="middle" width="20%"' ) . '<b>' . _("Options") . ":&nbsp;&nbsp;</b></td>\n" .
752 html_tag( 'td', '', 'left', '', 'valign="middle" width="80%"' ) . '<small>' .
d9c1dccc 753 '<a href="'.$url.'">'._("View Full Header").'</a>';
754
755 /* Output the printer friendly link if we are in subtle mode. */
756 $s .= '&nbsp;|&nbsp;' .
1e150c97 757 printer_friendly_link($mailbox, $passed_id, $passed_ent_id);
d9c1dccc 758 echo $s;
7277191e 759 echo view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message);
40a34e57 760
761 /* Output the download and/or unsafe images link/-s, if any. */
762 if ($download_and_unsafe_link) {
763 echo $download_and_unsafe_link;
764 }
765
d9c1dccc 766 do_hook("read_body_header_right");
3c621ba1 767 $s = "</small></td>\n" .
768 "</tr>\n";
d9c1dccc 769 echo $s;
a128c967 770
4d0cd98b 771}
772
91c27aee 773/**
774 * Creates button
775 *
776 * @deprecated see form functions available in 1.5.1 and 1.4.3.
777 * @param string $type
778 * @param string $name
779 * @param string $value
780 * @param string $js
781 * @param bool $enabled
782 */
783function getButton($type, $name, $value, $js = '', $enabled = TRUE) {
784 $disabled = ( $enabled ? '' : 'disabled ' );
785 $js = ( $js ? $js.' ' : '' );
786 return '<input '.$disabled.$js.
787 'type="'.$type.
788 '" name="'.$name.
789 '" value="'.$value .
790 '" style="padding: 0px; margin: 0px" />';
791}
792
793
6206f6c4 794/***************************/
2ffa3f57 795/* Main of read_body.php */
6206f6c4 796/***************************/
57257333 797
0b97a708 798/* get the globals we may need */
799
1e12d1ff 800sqgetGlobalVar('key', $key, SQ_COOKIE);
e95c04ec 801sqgetGlobalVar('username', $username, SQ_SESSION);
802sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
e95c04ec 803sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
1e12d1ff 804sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
e95c04ec 805sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 806if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
807 $messages = array();
ce274df9 808}
81de00c0 809sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
810if (is_array($delayed_errors)) {
811 $oErrorHandler->AssignDelayedErrors($delayed_errors);
812 sqsession_unregister("delayed_errors");
813}
e95c04ec 814/** GET VARS */
815sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 816if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
817 $where = 'right_main.php';
818}
d0b119a5 819/*
820 * Used as entry key to the list of uid's cached in the mailbox cache
821 * we use the cached uid's to get the next and prev message.
822 */
324ac3c5 823if (!sqgetGlobalVar('what', $what, SQ_GET) ){
824 $what = 0;
825}
e95c04ec 826if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
827 $show_more = (int) $temp;
1b9f3c04 828}
e95c04ec 829if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
830 $show_more_cc = (int) $temp;
0b97a708 831}
e95c04ec 832if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
833 $show_more_bcc = (int) $temp;
0b97a708 834}
e95c04ec 835if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
836 $view_hdr = (int) $temp;
0b97a708 837}
e95c04ec 838
91c27aee 839if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
840 $iAccount = (int) $temp;
841} else {
842 $iAccount = 0;
843}
844
e95c04ec 845/** GET/POST VARS */
846sqgetGlobalVar('passed_ent_id', $passed_ent_id);
847sqgetGlobalVar('mailbox', $mailbox);
848
849if ( sqgetGlobalVar('passed_id', $temp) ) {
850 $passed_id = (int) $temp;
0b97a708 851}
e95c04ec 852if ( sqgetGlobalVar('sort', $temp) ) {
853 $sort = (int) $temp;
0b97a708 854}
e95c04ec 855if ( sqgetGlobalVar('startMessage', $temp) ) {
856 $startMessage = (int) $temp;
324ac3c5 857} else {
858 $startMessage = 1;
ce274df9 859}
7277191e 860if(sqgetGlobalVar('show_html_default', $temp)) {
861 $show_html_default = (int) $temp;
862}
863
864if(sqgetGlobalVar('view_unsafe_images', $temp)) {
865 $view_unsafe_images = (int) $temp;
866 if($view_unsafe_images == 1) {
867 $show_html_default = 1;
868 }
869} else {
870 $view_unsafe_images = 0;
871}
324ac3c5 872/**
873 * Retrieve mailbox cache
874 */
875sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 876
ce274df9 877/* end of get globals */
6201339c 878global $sqimap_capabilities, $lastTargetMailbox;
38c944cc 879
6206f6c4 880$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
91c27aee 881$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
882
c3731db5 883
91c27aee 884/**
c3731db5 885 Start code to set the columns to fetch in case of hitting the next/prev link
886 The reason for this is the fact that the cache can be invalidated which means that the headers
887 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
888
889 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
890*/
891
892/**
893 * Replace From => To in case it concerns a draft or sent folder
894 */
199ff86a 895$aColumns = array();
c3731db5 896if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
897 !in_array(SQM_COL_TO,$index_order)) {
898 $aNewOrder = array(); // nice var name ;)
899 foreach($index_order as $iCol) {
900 if ($iCol == SQM_COL_FROM) {
901 $iCol = SQM_COL_TO;
902 }
199ff86a 903 $aColumns[$iCol] = array();
c3731db5 904 }
c3731db5 905} else {
199ff86a 906 foreach ($index_order as $iCol) {
907 $aColumns[$iCol] = array();
908 }
c3731db5 909}
910
911$aProps = array(
912 'columns' => $aColumns, // columns bound settings
913 'config' => array(
914 'highlight_list' => $message_highlight_list, // row highlighting rules
915 'trash_folder' => $trash_folder,
916 'sent_folder' => $sent_folder,
917 'draft_folder' => $draft_folder));
918
919calcFetchColumns($aMailbox,$aProps);
920
921/**
922 End code to set the columns to fetch in case of hitting the next/prev link
923*/
924
925
926
927/**
928 * Check if cache is still valid, $what contains the key
929 * which gives us acces to the array with uid's. At this moment
930 * 0 is used for a normal message list and search uses 1 as key. This can be
931 * changed / extended in the future.
932 * If on a select of a mailbox we detect that the cache should be invalidated due to
933 * the delete of messages or due to new messages we empty the list with uid's and
934 * that's what we detect below.
935 */
91c27aee 936if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 937 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 938}
38c944cc 939
d0b119a5 940$iSetIndex = $aMailbox['SETINDEX'];
941$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
942
324ac3c5 943/**
944 * Update the seen state
945 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
946 */
947if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
948 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 949}
e0e30169 950
1e150c97 951/**
952 * Process Delete from delete-move-next
953 * but only if delete_id was set
954 */
955if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 956 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 957}
958
38c944cc 959/**
960 * $message contains all information about the message
961 * including header and body
962 */
37d2a6ee 963
324ac3c5 964if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
965 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
966 $FirstTimeSee = !$message->is_seen;
38c944cc 967} else {
324ac3c5 968 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
969 $FirstTimeSee = !$message->is_seen;
970 $message->is_seen = true;
971 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 972}
dd628162 973if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 974 $message = $message->getEntity($passed_ent_id);
975 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
976 $message = $message->parent;
977 }
978 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
979 $rfc822_header = new Rfc822Header();
980 $rfc822_header->parseHeader($read);
981 $message->rfc822_header = $rfc822_header;
91c27aee 982} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
983 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
984 $rfc822_header = new Rfc822Header();
985 $rfc822_header->parseHeader($read);
986 $message->rfc822_header = $rfc822_header;
c615b1da 987} else {
324ac3c5 988 $passed_ent_id = 0;
38c944cc 989}
5200c026 990$header = $message->header;
57257333 991
57257333 992
6206f6c4 993/****************************************/
994/* Block for handling incoming url vars */
995/****************************************/
5200c026 996
5200c026 997if (isset($sendreceipt)) {
998 if ( !$message->is_mdnsent ) {
27a1d10a 999 $final_recipient = '';
134e4174 1000 if ((isset($identity)) && ($identity != 0)) //Main identity
27a1d10a 1001 $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' ));
1002 if ($final_recipient == '' )
1003 $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' ));
324ac3c5 1004 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
fc224f68 1005 if ( SendMDN( $mailbox, $passed_id, $final_recipient, $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
9f42bfc8 1016$messagebody = '';
c4ad259b 1017do_hook('read_body_top');
1018if ($show_html_default == 1) {
1019 $ent_ar = $message->findDisplayEntity(array());
1020} else {
1021 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1022}
a128c967 1023$cnt = count($ent_ar);
1024for ($i = 0; $i < $cnt; $i++) {
6a108031 1025 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1026 if ($i != $cnt-1) {
83ae18bc 1027 $messagebody .= '<hr style="height: 1px;" />';
a128c967 1028 }
38c944cc 1029}
e55c441a 1030
202bcbcc 1031/**
1032 * Write mailbox with updated seen flag information back to cache.
1033 */
1034$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1035sqsession_register($mailbox_cache,'mailbox_cache');
1036$_SESSION['mailbox_cache'] = $mailbox_cache;
1037$oTemplate->display('footer.tpl');
1038
b89ceca6 1039displayPageHeader($color, $mailbox,'','');
324ac3c5 1040formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
e0e30169 1041formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
a94c1db1 1042echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
6206f6c4 1043echo ' <tr><td>';
a94c1db1 1044echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">';
a128c967 1045echo ' <tr><td>';
a94c1db1 1046echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
6206f6c4 1047echo ' <tr bgcolor="'.$color[4].'"><td>';
98fb28fd 1048// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">';
605ce385 1049echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
3c621ba1 1050echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left')
6c7b5d8c 1051 . '</tr>';
6206f6c4 1052echo ' </table>';
4669e892 1053echo ' </td></tr>';
6206f6c4 1054echo ' </table></td></tr>';
2ffa3f57 1055echo ' </table>';
1056echo ' </td></tr>';
a128c967 1057
3c621ba1 1058echo '<tr><td height="5" colspan="2" bgcolor="'.
1059 $color[4].'"></td></tr>'."\n";
d0a2476a 1060
a128c967 1061$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id);
1062if ($attachmentsdisplay) {
8acd2fb5 1063 echo ' </table>';
6206f6c4 1064 echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
2ffa3f57 1065 echo ' <tr><td>';
d0a2476a 1066 echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">';
4669e892 1067 echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] );
6206f6c4 1068 echo ' <b>' . _("Attachments") . ':</b>';
1069 echo ' </td></tr>';
1070 echo ' <tr><td>';
1071 echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>';
1072 echo $attachmentsdisplay;
1073 echo ' </td></tr></table>';
6c7b5d8c 1074 echo ' </td></tr></table>';
6206f6c4 1075 echo ' </td></tr>';
3c621ba1 1076 echo '<tr><td height="5" colspan="2" bgcolor="'.
1077 $color[4].'"></td></tr>';
a128c967 1078}
c615b1da 1079echo '</table>';
a07cd1a4 1080
1081/* show attached images inline -- if pref'fed so */
5be9f195 1082if (($attachment_common_show_images) &&
a07cd1a4 1083 is_array($attachment_common_show_images_list)) {
1084 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1085 $imgurl = SM_PATH . 'src/download.php' .
57257333 1086 '?' .
cd7b8833 1087 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1088 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1089 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1090 '&amp;absolute_dl=true';
5be9f195 1091
b5058e9e 1092 echo html_tag( 'table', "\n" .
d9c1dccc 1093 html_tag( 'tr', "\n" .
3c621ba1 1094 html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left'
d9c1dccc 1095 )
1096 ) ,
3c621ba1 1097 'center', '', 'cellspacing="0" border="0" cellpadding="2"');
10f0ce72 1098 }
a07cd1a4 1099}
1100
324ac3c5 1101formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1102
c615b1da 1103do_hook('read_body_bottom');
a07cd1a4 1104sqimap_logout($imapConnection);
91c27aee 1105
7277191e 1106?>