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