+/**
+ * function SendDownloadHeaders - send file to the browser
+ *
+ * Original Source: SM core src/download.php
+ * moved here to make it available to other code, and separate
+ * front end from back end functionality.
+ *
+ * @param string $type0 first half of mime type
+ * @param string $type1 second half of mime type
+ * @param string $filename filename to tell the browser for downloaded file
+ * @param boolean $force whether to force the download dialog to pop
+ * @param integer $filesize optional, send the Content-Header and length to the browser
+ * @return void
+ */
+ function SendDownloadHeaders($type0, $type1, $filename, $force, $filesize=0) {
+ global $languages, $squirrelmail_language;
+ $isIE = $isIE6 = 0;
+
+ sqgetGlobalVar('HTTP_USER_AGENT', $HTTP_USER_AGENT, SQ_SERVER);
+
+ if (strstr($HTTP_USER_AGENT, 'compatible; MSIE ') !== false &&
+ strstr($HTTP_USER_AGENT, 'Opera') === false) {
+ $isIE = 1;
+ }
+
+ if (strstr($HTTP_USER_AGENT, 'compatible; MSIE 6') !== false &&
+ strstr($HTTP_USER_AGENT, 'Opera') === false) {
+ $isIE6 = 1;
+ }
+
+ if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
+ function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
+ $filename =
+ $languages[$squirrelmail_language]['XTRA_CODE']('downloadfilename', $filename, $HTTP_USER_AGENT);
+ } else {
+ $filename = ereg_replace('[\\/:\*\?"<>\|;]', '_', str_replace(' ', ' ', $filename));
+ }
+
+ // A Pox on Microsoft and it's Office!
+ if (!$force) {
+ // Try to show in browser window
+ header("Content-Disposition: inline; filename=\"$filename\"");
+ header("Content-Type: $type0/$type1; name=\"$filename\"");
+ } else {
+ // Try to pop up the "save as" box
+ // IE makes this hard. It pops up 2 save boxes, or none.
+ // http://support.microsoft.com/support/kb/articles/Q238/5/88.ASP
+ // But, accordint to Microsoft, it is "RFC compliant but doesn't
+ // take into account some deviations that allowed within the
+ // specification." Doesn't that mean RFC non-compliant?
+ // http://support.microsoft.com/support/kb/articles/Q258/4/52.ASP
+ //
+ // The best thing you can do for IE is to upgrade to the latest
+ // version
+ if ($isIE && !$isIE6) {
+ // http://support.microsoft.com/support/kb/articles/Q182/3/15.asp
+ // Do not have quotes around filename, but that applied to
+ // "attachment"... does it apply to inline too?
+ //
+ // This combination seems to work mostly. IE 5.5 SP 1 has
+ // known issues (see the Microsoft Knowledge Base)
+ header("Content-Disposition: inline; filename=$filename");
+ // This works for most types, but doesn't work with Word files
+ header("Content-Type: application/download; name=\"$filename\"");
+
+ // These are spares, just in case. :-)
+ //header("Content-Type: $type0/$type1; name=\"$filename\"");
+ //header("Content-Type: application/x-msdownload; name=\"$filename\"");
+ //header("Content-Type: application/octet-stream; name=\"$filename\"");
+ } else {
+ header("Content-Disposition: attachment; filename=\"$filename\"");
+ // application/octet-stream forces download for Netscape
+ header("Content-Type: application/octet-stream; name=\"$filename\"");
+ }
+ }
+
+ //send the content-length header if the calling function provides it
+ if ($filesize > 0) {
+ header("Content-Length: $filesize");
+ }
+
+ } // end fn SendDownlaodHeaders
+