From 63c15e549005f5d49dfb4cc6ff3e0c6eb5b7f11d Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Mon, 18 Oct 2010 01:00:39 +0000 Subject: [PATCH] - Patch #943112 by ksenzee: file_file_download() should delegate header checks to a separate function. --- includes/file.inc | 29 +++++++++++++++++++++++++++++ modules/file/file.module | 20 ++------------------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/includes/file.inc b/includes/file.inc index 1dd34cbae4fb..588bea0867ad 100644 --- a/includes/file.inc +++ b/includes/file.inc @@ -2328,6 +2328,35 @@ function file_directory_temp() { return $temporary_directory; } +/** + * Examines a file object and returns appropriate content headers for download. + * + * @param $file + * A file object. + * @return + * An associative array of headers, as expected by file_transfer(). + */ +function file_get_content_headers($file) { + $name = mime_header_encode($file->filename); + $type = mime_header_encode($file->filemime); + // Serve images, text, and flash content for display rather than download. + $inline_types = variable_get('file_inline_types', array('^text/', '^image/', 'flash$')); + $disposition = 'attachment'; + foreach ($inline_types as $inline_type) { + // Exclamation marks are used as delimiters to avoid escaping slashes. + if (preg_match('!' . $inline_type . '!', $file->filemime)) { + $disposition = 'inline'; + } + } + + return array( + 'Content-Type' => $type . '; name="' . $name . '"', + 'Content-Length' => $file->filesize, + 'Content-Disposition' => $disposition . '; filename="' . $name . '"', + 'Cache-Control' => 'private', + ); +} + /** * @} End of "defgroup file". */ diff --git a/modules/file/file.module b/modules/file/file.module index 69130b2f86fc..08b383555db4 100644 --- a/modules/file/file.module +++ b/modules/file/file.module @@ -216,24 +216,8 @@ function file_file_download($uri, $field_type = 'file') { } // Access is granted. - $name = mime_header_encode($file->filename); - $type = mime_header_encode($file->filemime); - // Serve images, text, and flash content for display rather than download. - $inline_types = variable_get('file_inline_types', array('^text/', '^image/', 'flash$')); - $disposition = 'attachment'; - foreach ($inline_types as $inline_type) { - // Exclamation marks are used as delimiters to avoid escaping slashes. - if (preg_match('!' . $inline_type . '!', $file->filemime)) { - $disposition = 'inline'; - } - } - - return array( - 'Content-Type' => $type . '; name="' . $name . '"', - 'Content-Length' => $file->filesize, - 'Content-Disposition' => $disposition . '; filename="' . $name . '"', - 'Cache-Control' => 'private', - ); + $headers = file_get_content_headers($file); + return $headers; } /** -- GitLab