X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fdownload.php;h=9d6d25e5a1835fcbed30de9439db584dd2a27bd7;hp=b247350b1240ee829b50745c3a44d5188d2b6da4;hb=8d8ab69aaf81e9fdd15396c783f0e40e698e839f;hpb=2a32fc83f95eba42be0d1752ef685adf10e1edc9 diff --git a/src/download.php b/src/download.php index b247350b..9d6d25e5 100644 --- a/src/download.php +++ b/src/download.php @@ -1,4 +1,14 @@ -\n"; displayPageHeader($color, "None"); echo "
"; @@ -26,7 +35,7 @@ echo ""; echo "
"; $urlmailbox = urlencode($mailbox); - echo "
"; + echo "
"; echo _("Download this as a file"); echo "


"; if ($type1 == "html") @@ -44,42 +53,71 @@ // including header and body $message = sqimap_get_message($imapConnection, $passed_id, $mailbox); - $type0 = $message["ENTITIES"][$passed_ent_id]["TYPE0"]; - $type1 = $message["ENTITIES"][$passed_ent_id]["TYPE1"]; - $filename = $message["ENTITIES"][$passed_ent_id]["FILENAME"]; + // lets redefine message as this particular entity that we wish to display. + // it should hold only the header for this entity. We need to fetch the body + // yet before we can display anything. + $message = getEntity($message, $passed_ent_id); + + $header = $message->header; + $body = mime_fetch_body($imapConnection, $passed_id, $passed_ent_id); + + $type0 = $header->type0; + $type1 = $header->type1; + $filename = $header->filename; if (strlen($filename) < 1) { - $filename = "untitled$passed_ent_id"; + $filename = "untitled$passed_ent_id.$type1"; } + // Note: + // The following sections display the attachment in different + // ways depending on how they choose. The first way will download + // under any circumstance. This sets the Content-type to be + // applicatin/octet-stream, which should be interpreted by the + // browser as "download me". + // The second method (view) is used for images or other formats + // that should be able to be handled by the browser. It will + // most likely display the attachment inline inside the browser. + // And finally, the third one will be used by default. If it + // is displayable (text or html), it will load them up in a text + // viewer (built in to squirrelmail). Otherwise, it sets the + // content-type as application/octet-stream + if ($absolute_dl == "true") { switch($type0) { case "text": - $body = decodeBody($message["ENTITIES"][$passed_ent_id]["BODY"], $message["ENTITIES"][$passed_ent_id]["ENCODING"]); - header("Content-type: $type0/$type1; name=\"$filename\""); + $body = decodeBody($body, $header->encoding); + #header("Content-type: $type0/$type1; name=\"$filename\""); + header("Content-type: application/octet-stream; name=\"$filename\""); header("Content-Disposition: attachment; filename=\"$filename\""); echo trim($body); break; default: - $body = decodeBody($message["ENTITIES"][$passed_ent_id]["BODY"], $message["ENTITIES"][$passed_ent_id]["ENCODING"]); - header("Content-type: $type0/$type1; name=\"$filename\""); + $body = decodeBody($body, $header->encoding); + header("Content-type: application/octet-stream; name=\"$filename\""); + #header("Content-type: $type0/$type1; name=\"$filename\""); header("Content-Disposition: attachment; filename=\"$filename\""); echo $body; break; } + } else if ($view == "true") { + $body = decodeBody ($body, $header->encoding); + header("Content-type: $type0/$type1; name=\"$filename\""); + header("Content-disposition: attachment; filename=\"$filename\""); + echo $body; } else { switch ($type0) { case "text": - $body = decodeBody($message["ENTITIES"][$passed_ent_id]["BODY"], $message["ENTITIES"][$passed_ent_id]["ENCODING"]); + $body = decodeBody($body, $header->encoding); viewText($color, $body, $passed_id, $passed_ent_id, $mailbox, $type1, $wrap_at); break; case "message": - $body = decodeBody($message["ENTITIES"][$passed_ent_id]["BODY"], $message["ENTITIES"][$passed_ent_id]["ENCODING"]); + $body = decodeBody($body, $header->encoding); viewText($color, $body, $passed_id, $passed_ent_id, $mailbox, $type1, $wrap_at); break; default: - $body = decodeBody($message["ENTITIES"][$passed_ent_id]["BODY"], $message["ENTITIES"][$passed_ent_id]["ENCODING"]); - header("Content-type: $type0/$type1; name=\"$filename\""); + $body = decodeBody($body, $header->encoding); + header("Content-type: applicatin/octet-stream; name=\"$filename\""); header("Content-Disposition: attachment; filename=\"$filename\""); echo $body; break;