db scheme for postgres is different from that for mysql, document that
[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,
24bb7e49 491 $username, $delete_prev_next_display, $show_copy_buttons,
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
24bb7e49 711 $menu_row .= getButton('submit', 'moveButton',_("Move")) . "\n";
712
713 // Add msg copy button
714 if ($show_copy_buttons) {
715 $menu_row .= getButton('submit', 'copyButton', _("Copy"));
716 }
717
718 $menu_row .= '</form>';
1e150c97 719 }
720 $menu_row .= '</td></tr>';
d9c1dccc 721
1e150c97 722 // echo rows, with hooks
764971df 723 $ret = do_hook_function('read_body_menu_top', array($nav_row, $menu_row));
988e24f6 724 if (is_array($ret)) {
725 if (isset($ret[0]) && !empty($ret[0])) {
726 $nav_row = $ret[0];
727 }
728 if (isset($ret[1]) && !empty($ret[1])) {
729 $menu_row = $ret[1];
730 }
764971df 731 }
1e150c97 732 echo '<table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
733 echo $nav_on_top ? $nav_row . $menu_row : $menu_row . $nav_row;
734 echo '</table>'."\n";
d62c4938 735 do_hook('read_body_menu_bottom');
c615b1da 736}
737
738function formatToolbar($mailbox, $passed_id, $passed_ent_id, $message, $color) {
40a34e57 739 global $base_uri, $where, $what, $download_and_unsafe_link;
4669e892 740
d9c1dccc 741 $urlMailbox = urlencode($mailbox);
78909469 742 $urlPassed_id = urlencode($passed_id);
743 $urlPassed_ent_id = urlencode($passed_ent_id);
4669e892 744
78909469 745 $query_string = 'mailbox=' . $urlMailbox . '&amp;passed_id=' . $urlPassed_id . '&amp;passed_ent_id=' . $urlPassed_ent_id;
4669e892 746
78909469 747 if (!empty($where)) {
748 $query_string .= '&amp;where=' . urlencode($where);
749 }
750
751 if (!empty($what)) {
752 $query_string .= '&amp;what=' . urlencode($what);
753 }
754
e95c04ec 755 $url = $base_uri.'src/view_header.php?'.$query_string;
d9c1dccc 756
3c621ba1 757 $s = "<tr>\n" .
758 html_tag( 'td', '', 'right', '', 'valign="middle" width="20%"' ) . '<b>' . _("Options") . ":&nbsp;&nbsp;</b></td>\n" .
759 html_tag( 'td', '', 'left', '', 'valign="middle" width="80%"' ) . '<small>' .
d9c1dccc 760 '<a href="'.$url.'">'._("View Full Header").'</a>';
761
762 /* Output the printer friendly link if we are in subtle mode. */
763 $s .= '&nbsp;|&nbsp;' .
1e150c97 764 printer_friendly_link($mailbox, $passed_id, $passed_ent_id);
d9c1dccc 765 echo $s;
7277191e 766 echo view_as_html_link($mailbox, $passed_id, $passed_ent_id, $message);
40a34e57 767
768 /* Output the download and/or unsafe images link/-s, if any. */
769 if ($download_and_unsafe_link) {
770 echo $download_and_unsafe_link;
771 }
772
d9c1dccc 773 do_hook("read_body_header_right");
3c621ba1 774 $s = "</small></td>\n" .
775 "</tr>\n";
d9c1dccc 776 echo $s;
a128c967 777
4d0cd98b 778}
779
91c27aee 780/**
781 * Creates button
782 *
783 * @deprecated see form functions available in 1.5.1 and 1.4.3.
784 * @param string $type
785 * @param string $name
786 * @param string $value
787 * @param string $js
788 * @param bool $enabled
789 */
790function getButton($type, $name, $value, $js = '', $enabled = TRUE) {
791 $disabled = ( $enabled ? '' : 'disabled ' );
792 $js = ( $js ? $js.' ' : '' );
793 return '<input '.$disabled.$js.
794 'type="'.$type.
795 '" name="'.$name.
796 '" value="'.$value .
797 '" style="padding: 0px; margin: 0px" />';
798}
799
800
6206f6c4 801/***************************/
2ffa3f57 802/* Main of read_body.php */
6206f6c4 803/***************************/
57257333 804
0b97a708 805/* get the globals we may need */
806
1e12d1ff 807sqgetGlobalVar('key', $key, SQ_COOKIE);
e95c04ec 808sqgetGlobalVar('username', $username, SQ_SESSION);
809sqgetGlobalVar('onetimepad',$onetimepad, SQ_SESSION);
e95c04ec 810sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
1e12d1ff 811sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
e95c04ec 812sqgetGlobalVar('lastTargetMailbox', $lastTargetMailbox, SQ_SESSION);
e95c04ec 813if (!sqgetGlobalVar('messages', $messages, SQ_SESSION) ) {
814 $messages = array();
ce274df9 815}
81de00c0 816sqgetGlobalVar('delayed_errors', $delayed_errors, SQ_SESSION);
817if (is_array($delayed_errors)) {
818 $oErrorHandler->AssignDelayedErrors($delayed_errors);
819 sqsession_unregister("delayed_errors");
820}
e95c04ec 821/** GET VARS */
822sqgetGlobalVar('sendreceipt', $sendreceipt, SQ_GET);
324ac3c5 823if (!sqgetGlobalVar('where', $where, SQ_GET) ) {
824 $where = 'right_main.php';
825}
d0b119a5 826/*
827 * Used as entry key to the list of uid's cached in the mailbox cache
828 * we use the cached uid's to get the next and prev message.
829 */
324ac3c5 830if (!sqgetGlobalVar('what', $what, SQ_GET) ){
831 $what = 0;
832}
e95c04ec 833if ( sqgetGlobalVar('show_more', $temp, SQ_GET) ) {
834 $show_more = (int) $temp;
1b9f3c04 835}
e95c04ec 836if ( sqgetGlobalVar('show_more_cc', $temp, SQ_GET) ) {
837 $show_more_cc = (int) $temp;
0b97a708 838}
e95c04ec 839if ( sqgetGlobalVar('show_more_bcc', $temp, SQ_GET) ) {
840 $show_more_bcc = (int) $temp;
0b97a708 841}
e95c04ec 842if ( sqgetGlobalVar('view_hdr', $temp, SQ_GET) ) {
843 $view_hdr = (int) $temp;
0b97a708 844}
e95c04ec 845
91c27aee 846if ( sqgetGlobalVar('account', $temp, SQ_GET) ) {
847 $iAccount = (int) $temp;
848} else {
849 $iAccount = 0;
850}
851
e95c04ec 852/** GET/POST VARS */
853sqgetGlobalVar('passed_ent_id', $passed_ent_id);
854sqgetGlobalVar('mailbox', $mailbox);
855
856if ( sqgetGlobalVar('passed_id', $temp) ) {
857 $passed_id = (int) $temp;
0b97a708 858}
e95c04ec 859if ( sqgetGlobalVar('sort', $temp) ) {
860 $sort = (int) $temp;
0b97a708 861}
e95c04ec 862if ( sqgetGlobalVar('startMessage', $temp) ) {
863 $startMessage = (int) $temp;
324ac3c5 864} else {
865 $startMessage = 1;
ce274df9 866}
7277191e 867if(sqgetGlobalVar('show_html_default', $temp)) {
868 $show_html_default = (int) $temp;
869}
870
871if(sqgetGlobalVar('view_unsafe_images', $temp)) {
872 $view_unsafe_images = (int) $temp;
873 if($view_unsafe_images == 1) {
874 $show_html_default = 1;
875 }
876} else {
877 $view_unsafe_images = 0;
878}
324ac3c5 879/**
880 * Retrieve mailbox cache
881 */
882sqgetGlobalVar('mailbox_cache',$mailbox_cache,SQ_SESSION);
0b97a708 883
ce274df9 884/* end of get globals */
6201339c 885global $sqimap_capabilities, $lastTargetMailbox;
38c944cc 886
6206f6c4 887$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
91c27aee 888$aMailbox = sqm_api_mailbox_select($imapConnection, $iAccount, $mailbox,array('setindex' => $what, 'offset' => $startMessage),array());
889
c3731db5 890
91c27aee 891/**
c3731db5 892 Start code to set the columns to fetch in case of hitting the next/prev link
893 The reason for this is the fact that the cache can be invalidated which means that the headers
894 to fetch aren't there anymore. Before they got calculated when the messagelist was shown.
895
896 Todo, better central handling of setting the mailbox options so we do not need to do the stuff below
897*/
898
899/**
900 * Replace From => To in case it concerns a draft or sent folder
901 */
199ff86a 902$aColumns = array();
c3731db5 903if (($mailbox == $sent_folder || $mailbox == $draft_folder) &&
904 !in_array(SQM_COL_TO,$index_order)) {
905 $aNewOrder = array(); // nice var name ;)
906 foreach($index_order as $iCol) {
907 if ($iCol == SQM_COL_FROM) {
908 $iCol = SQM_COL_TO;
909 }
199ff86a 910 $aColumns[$iCol] = array();
c3731db5 911 }
c3731db5 912} else {
199ff86a 913 foreach ($index_order as $iCol) {
914 $aColumns[$iCol] = array();
915 }
c3731db5 916}
917
918$aProps = array(
919 'columns' => $aColumns, // columns bound settings
920 'config' => array(
921 'highlight_list' => $message_highlight_list, // row highlighting rules
922 'trash_folder' => $trash_folder,
923 'sent_folder' => $sent_folder,
924 'draft_folder' => $draft_folder));
925
926calcFetchColumns($aMailbox,$aProps);
927
928/**
929 End code to set the columns to fetch in case of hitting the next/prev link
930*/
931
932
933
934/**
935 * Check if cache is still valid, $what contains the key
936 * which gives us acces to the array with uid's. At this moment
937 * 0 is used for a normal message list and search uses 1 as key. This can be
938 * changed / extended in the future.
939 * If on a select of a mailbox we detect that the cache should be invalidated due to
940 * the delete of messages or due to new messages we empty the list with uid's and
941 * that's what we detect below.
942 */
91c27aee 943if (!is_array($aMailbox['UIDSET'][$what])) {
d0b119a5 944 fetchMessageHeaders($imapConnection, $aMailbox);
91c27aee 945}
38c944cc 946
d0b119a5 947$iSetIndex = $aMailbox['SETINDEX'];
948$aMailbox['CURRENT_MSG'][$iSetIndex] = $passed_id;
949
324ac3c5 950/**
951 * Update the seen state
952 * and ignore in_array('\\seen',$aMailbox['PERMANENTFLAGS'],true)
953 */
954if (isset($aMailbox['MSG_HEADERS'][$passed_id]['FLAGS'])) {
955 $aMailbox['MSG_HEADERS'][$passed_id]['FLAGS']['\\seen'] = true;
e0e30169 956}
e0e30169 957
1e150c97 958/**
959 * Process Delete from delete-move-next
960 * but only if delete_id was set
961 */
962if ( sqgetGlobalVar('delete_id', $delete_id, SQ_GET) ) {
324ac3c5 963 handleMessageListForm($imapConnection,$aMailbox,$sButton='setDeleted', array($delete_id));
1e150c97 964}
965
38c944cc 966/**
967 * $message contains all information about the message
968 * including header and body
969 */
37d2a6ee 970
324ac3c5 971if (isset($aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'])) {
972 $message = $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'];
973 $FirstTimeSee = !$message->is_seen;
38c944cc 974} else {
324ac3c5 975 $message = sqimap_get_message($imapConnection, $passed_id, $mailbox);
976 $FirstTimeSee = !$message->is_seen;
977 $message->is_seen = true;
978 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 979}
dd628162 980if (isset($passed_ent_id) && $passed_ent_id) {
324ac3c5 981 $message = $message->getEntity($passed_ent_id);
982 if ($message->type0 != 'message' && $message->type1 != 'rfc822') {
983 $message = $message->parent;
984 }
985 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[$passed_ent_id.HEADER]", true, $response, $msg, TRUE);
986 $rfc822_header = new Rfc822Header();
987 $rfc822_header->parseHeader($read);
988 $message->rfc822_header = $rfc822_header;
91c27aee 989} else if ($message->type0 == 'message' && $message->type1 == 'rfc822' && isset($message->entities[0])) {
990 $read = sqimap_run_command ($imapConnection, "FETCH $passed_id BODY[1.HEADER]", true, $response, $msg, TRUE);
991 $rfc822_header = new Rfc822Header();
992 $rfc822_header->parseHeader($read);
993 $message->rfc822_header = $rfc822_header;
c615b1da 994} else {
324ac3c5 995 $passed_ent_id = 0;
38c944cc 996}
5200c026 997$header = $message->header;
57257333 998
57257333 999
6206f6c4 1000/****************************************/
1001/* Block for handling incoming url vars */
1002/****************************************/
5200c026 1003
5200c026 1004if (isset($sendreceipt)) {
1005 if ( !$message->is_mdnsent ) {
27a1d10a 1006 $final_recipient = '';
134e4174 1007 if ((isset($identity)) && ($identity != 0)) //Main identity
27a1d10a 1008 $final_recipient = trim(getPref($data_dir, $username, 'email_address' . $identity, '' ));
1009 if ($final_recipient == '' )
1010 $final_recipient = trim(getPref($data_dir, $username, 'email_address', '' ));
324ac3c5 1011 $supportMDN = ServerMDNSupport($aMailbox["PERMANENTFLAGS"]);
fc224f68 1012 if ( SendMDN( $mailbox, $passed_id, $final_recipient, $message, $imapConnection ) > 0 && $supportMDN ) {
6201339c 1013 ToggleMDNflag( true, $imapConnection, $mailbox, $passed_id);
5200c026 1014 $message->is_mdnsent = true;
1012f961 1015 $aMailbox['MSG_HEADERS'][$passed_id]['MESSAGE_OBJECT'] = $message;
5200c026 1016 }
5200c026 1017 }
1018}
6206f6c4 1019/***********************************************/
1020/* End of block for handling incoming url vars */
1021/***********************************************/
1022
9f42bfc8 1023$messagebody = '';
c4ad259b 1024do_hook('read_body_top');
1025if ($show_html_default == 1) {
1026 $ent_ar = $message->findDisplayEntity(array());
1027} else {
1028 $ent_ar = $message->findDisplayEntity(array(), array('text/plain'));
1029}
a128c967 1030$cnt = count($ent_ar);
1031for ($i = 0; $i < $cnt; $i++) {
6a108031 1032 $messagebody .= formatBody($imapConnection, $message, $color, $wrap_at, $ent_ar[$i], $passed_id, $mailbox);
a128c967 1033 if ($i != $cnt-1) {
83ae18bc 1034 $messagebody .= '<hr style="height: 1px;" />';
a128c967 1035 }
38c944cc 1036}
e55c441a 1037
202bcbcc 1038/**
1039 * Write mailbox with updated seen flag information back to cache.
1040 */
1041$mailbox_cache[$iAccount.'_'.$aMailbox['NAME']] = $aMailbox;
1042sqsession_register($mailbox_cache,'mailbox_cache');
1043$_SESSION['mailbox_cache'] = $mailbox_cache;
1044$oTemplate->display('footer.tpl');
1045
b89ceca6 1046displayPageHeader($color, $mailbox,'','');
324ac3c5 1047formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message,false);
e0e30169 1048formatEnvheader($aMailbox, $passed_id, $passed_ent_id, $message, $color, $FirstTimeSee);
a94c1db1 1049echo '<table width="100%" cellpadding="0" cellspacing="0" align="center" border="0">';
6206f6c4 1050echo ' <tr><td>';
a94c1db1 1051echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[9].'">';
a128c967 1052echo ' <tr><td>';
a94c1db1 1053echo ' <table width="100%" cellpadding="3" cellspacing="0" align="center" border="0">';
6206f6c4 1054echo ' <tr bgcolor="'.$color[4].'"><td>';
98fb28fd 1055// echo ' <table cellpadding="1" cellspacing="5" align="left" border="0">';
605ce385 1056echo html_tag( 'table' ,'' , 'left', '', 'width="100%" cellpadding="1" cellspacing="5" border="0"' );
3c621ba1 1057echo ' <tr>' . html_tag( 'td', '<br />'. $messagebody."\n", 'left')
6c7b5d8c 1058 . '</tr>';
6206f6c4 1059echo ' </table>';
4669e892 1060echo ' </td></tr>';
6206f6c4 1061echo ' </table></td></tr>';
2ffa3f57 1062echo ' </table>';
1063echo ' </td></tr>';
a128c967 1064
3c621ba1 1065echo '<tr><td height="5" colspan="2" bgcolor="'.
1066 $color[4].'"></td></tr>'."\n";
d0a2476a 1067
a128c967 1068$attachmentsdisplay = formatAttachments($message,$ent_ar,$mailbox, $passed_id);
1069if ($attachmentsdisplay) {
8acd2fb5 1070 echo ' </table>';
6206f6c4 1071 echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
2ffa3f57 1072 echo ' <tr><td>';
d0a2476a 1073 echo ' <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="'.$color[4].'">';
4669e892 1074 echo ' <tr>' . html_tag( 'td', '', 'left', $color[9] );
6206f6c4 1075 echo ' <b>' . _("Attachments") . ':</b>';
1076 echo ' </td></tr>';
1077 echo ' <tr><td>';
1078 echo ' <table width="100%" cellpadding="2" cellspacing="2" align="center"'.' border="0" bgcolor="'.$color[0].'"><tr><td>';
1079 echo $attachmentsdisplay;
1080 echo ' </td></tr></table>';
6c7b5d8c 1081 echo ' </td></tr></table>';
6206f6c4 1082 echo ' </td></tr>';
3c621ba1 1083 echo '<tr><td height="5" colspan="2" bgcolor="'.
1084 $color[4].'"></td></tr>';
a128c967 1085}
c615b1da 1086echo '</table>';
a07cd1a4 1087
1088/* show attached images inline -- if pref'fed so */
5be9f195 1089if (($attachment_common_show_images) &&
a07cd1a4 1090 is_array($attachment_common_show_images_list)) {
1091 foreach ($attachment_common_show_images_list as $img) {
ce274df9 1092 $imgurl = SM_PATH . 'src/download.php' .
57257333 1093 '?' .
cd7b8833 1094 'passed_id=' . urlencode($img['passed_id']) .
3d570ba0 1095 '&amp;mailbox=' . urlencode($mailbox) .
ff9d4297 1096 '&amp;ent_id=' . urlencode($img['ent_id']) .
3d570ba0 1097 '&amp;absolute_dl=true';
5be9f195 1098
b5058e9e 1099 echo html_tag( 'table', "\n" .
d9c1dccc 1100 html_tag( 'tr', "\n" .
3c621ba1 1101 html_tag( 'td', '<img src="' . $imgurl . '" />' ."\n", 'left'
d9c1dccc 1102 )
1103 ) ,
3c621ba1 1104 'center', '', 'cellspacing="0" border="0" cellpadding="2"');
10f0ce72 1105 }
a07cd1a4 1106}
1107
324ac3c5 1108formatMenuBar($aMailbox, $passed_id, $passed_ent_id, $message, false, FALSE);
1e150c97 1109
c615b1da 1110do_hook('read_body_bottom');
a07cd1a4 1111sqimap_logout($imapConnection);
91c27aee 1112
7277191e 1113?>