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