X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fread_body.php;h=f0c2c6ae63abdf4cd43120d08d9115c050d9a678;hp=05462549a88987a26c702247754b207f4e615640;hb=e788294eb201e85116fb8cb9d79a09c1a856ecba;hpb=5c54e435cf4a3ee9ecdaf2305205a2fbc7af4662 diff --git a/src/read_body.php b/src/read_body.php index 05462549..f0c2c6ae 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -7,14 +7,16 @@ ** ** This file is used for reading the msgs array and displaying ** the resulting emails in the right frame. + ** + ** $Id$ **/ session_start(); - if (!isset($config_php)) - include("../config/config.php"); if (!isset($strings_php)) include("../functions/strings.php"); + if (!isset($config_php)) + include("../config/config.php"); if (!isset($page_header_php)) include("../functions/page_header.php"); if (!isset($imap_php)) @@ -23,6 +25,8 @@ include("../functions/mime.php"); if (!isset($date_php)) include("../functions/date.php"); + if (!isset($url_parser_php)) + include("../functions/url_parser.php"); include("../src/load_prefs.php"); $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); @@ -30,14 +34,14 @@ do_hook("html_top"); displayPageHeader($color, $mailbox); - if ($view_hdr) { + if (isset($view_hdr)) { fputs ($imapConnection, "a003 FETCH $passed_id BODY[HEADER]\r\n"); $read = sqimap_read_data ($imapConnection, "a003", true, $a, $b); echo "
"; echo "\n"; echo " \n"; echo " \n"; /** cc **/ - if ($message->header->cc) { + if (isset($cc_string)) { echo " \n"; echo " \n"; echo " \n"; } + do_hook("read_body_header"); echo "
" . _("Viewing full header") . " - "; - if ($where && $what) { + if (isset($where) && isset($what)) { // Got here from a search echo ""; } else { @@ -47,28 +51,40 @@ echo "\n"; echo "
"; - echo ""; + $cnum = 0; for ($i=1; $i < count($read)-1; $i++) { $line = htmlspecialchars($read[$i]); - if (eregi("^[ |\t]", $line)) { - $second = $line; - $first = ""; - } else if (eregi("^([^:|^\s]+):(.+)", $line, $regs)) { - $first = $regs[1]; - $second = $regs[2]; + if (eregi("^>", $line)) { + $second[$i] = $line; + $first[$i] = " "; + $cnum++; + } else if (eregi("^[ |\t]", $line)) { + $second[$i] = $line; + $first[$i] = ""; + } else if (eregi("^([^:]+):(.+)", $line, $regs)) { + $first[$i] = $regs[1] . ":"; + $second[$i] = $regs[2]; + $cnum++; } else { - $second = trim($line); - $first = ""; + $second[$i] = trim($line); + $first[$i] = ""; } - echo ""; + } + for ($i=0; $i < count($second); $i = $j) { + if (isset($first[$i])) + $f = $first[$i]; + if (isset($second[$i])) + $s = nl2br($second[$i]); + $j = $i + 1; + while ($first[$j] == "" && $j < count($first)) { + $s .= "    " . nl2br($second[$j]); + $j++; + } + parseEmail($s); + if (isset($f)) echo "$f$s"; } - echo "
"; - if ($first) echo "$first:"; - else echo " "; - echo "$second
"; echo "
\n"; echo ""; - sqimap_mailbox_close($imapConnection); sqimap_logout($imapConnection); exit; } @@ -140,26 +156,46 @@ // $message contains all information about the message // including header and body $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); - + /** translate the subject and mailbox into url-able text **/ - $url_subj = urlencode(trim(sqStripSlashes($message->header->subject))); + $url_subj = urlencode(trim($message->header->subject)); $urlMailbox = urlencode($mailbox); $url_replyto = urlencode($message->header->replyto); $url_replytoall = urlencode($message->header->replyto); - $url_replytoallcc = getLineOfAddrs($message->header->to); - $url_replytoallcc_cc = getLineOfAddrs($message->header->cc); - if ($url_replytoallcc) { - if ($url_replytoallcc_cc) { - $url_replytoallcc .= ", " . $url_replytoallcc_cc; - } - } else { - if ($url_replytoallcc_cc) { - $url_replytoallcc = $url_replytoallcc_cc; - } else { - $url_replytoallcc = ""; - } - } + + // If we are replying to all, then find all other addresses and + // add them to the list. Remove duplicates. + // This is somewhat messy, so I'll explain: + // 1) Take all addresses (from, to, cc) (avoid nasty join errors here) + $url_replytoall_extra_addrs = array_merge(array($message->header->from), + $message->header->to, $message->header->cc); + + // 2) Make one big string out of them + $url_replytoall_extra_addrs = join(';', $url_replytoall_extra_addrs); + + // 3) Parse that into an array of addresses + $url_replytoall_extra_addrs = parseAddrs($url_replytoall_extra_addrs); + + // 4) Make them unique -- weed out duplicates + // (Coded for PHP 4.0.0) + $url_replytoall_extra_addrs = + array_keys(array_flip($url_replytoall_extra_addrs)); + + // 5) Remove the addresses we'll be sending the message 'to' + $url_replytoall_avoid_addrs = parseAddrs($message->header->replyto); + foreach ($url_replytoall_avoid_addrs as $addr) + { + foreach (array_keys($url_replytoall_extra_addrs, $addr) as $key_to_delete) + { + unset($url_replytoall_extra_addrs[$key_to_delete]); + } + } + + // 6) Smoosh back into one nice line + $url_replytoallcc = getLineOfAddrs($url_replytoall_extra_addrs); + + // 7) urlencode() it $url_replytoallcc = urlencode($url_replytoallcc); $dateString = getLongDateString($message->header->date); @@ -169,6 +205,8 @@ $echo_more = _("more"); $echo_less = _("less"); + if (!isset($show_more_cc)) $show_more_cc = false; + /** FORMAT THE TO STRING **/ $i = 0; $to_string = ""; @@ -185,7 +223,7 @@ if (count($to_ary) > 1) { if ($show_more == false) { if ($i == 1) { - if ($where && $what) { + if (isset($where) && isset($what)) { // from a search $to_string = "$to_string (
$echo_more)"; } else { @@ -194,7 +232,7 @@ $i = count($to_ary); } } else if ($i == 1) { - if ($where && $what) { + if (isset($where) && isset($what)) { // from a search $to_string = "$to_string ($echo_less)"; } else { @@ -206,38 +244,39 @@ /** FORMAT THE CC STRING **/ $i = 0; - $cc_string = ""; - $cc_ary = $message->header->cc; - while ($i < count(decodeHeader($cc_ary))) { - $cc_ary[$i] = htmlspecialchars($cc_ary[$i]); - if ($cc_string) - $cc_string = "$cc_string
$cc_ary[$i]"; - else - $cc_string = "$cc_ary[$i]"; - - $i++; - if (count($cc_ary) > 1) { - if ($show_more_cc == false) { - if ($i == 1) { - if ($where && $what) { + if (isset ($message->header->cc[0]) && trim($message->header->cc[0])){ + $cc_string = ""; + $cc_ary = $message->header->cc; + while ($i < count(decodeHeader($cc_ary))) { + $cc_ary[$i] = htmlspecialchars($cc_ary[$i]); + if ($cc_string) + $cc_string = "$cc_string
$cc_ary[$i]"; + else + $cc_string = "$cc_ary[$i]"; + + $i++; + if (count($cc_ary) > 1) { + if ($show_more_cc == false) { + if ($i == 1) { + if (isset($where) && isset($what)) { + // from a search + $cc_string = "$cc_string ($echo_more)"; + } else { + $cc_string = "$cc_string ($echo_more)"; + } + $i = count($cc_ary); + } + } else if ($i == 1) { + if (isset($where) && isset($what)) { // from a search - $cc_string = "$cc_string ($echo_more)"; + $cc_string = "$cc_string ($echo_less)"; } else { - $cc_string = "$cc_string ($echo_more)"; + $cc_string = "$cc_string ($echo_less)"; } - $i = count($cc_ary); } - } else if ($i == 1) { - if ($where && $what) { - // from a search - $cc_string = "$cc_string ($echo_less)"; - } else { - $cc_string = "$cc_string ($echo_less)"; - } } } } - /** make sure everything will display in HTML format **/ $from_name = decodeHeader(htmlspecialchars($message->header->from)); $subject = decodeHeader(htmlspecialchars($message->header->subject)); @@ -343,7 +382,7 @@ echo "
\n"; echo " Cc:\n"; @@ -352,6 +391,7 @@ echo "
"; echo " "; echo "";