From 272ac7519214f1b75d4b71247438612af8c86643 Mon Sep 17 00:00:00 2001 From: cash Date: Sat, 5 Nov 2011 15:43:50 -0400 Subject: Fixes #4048 using page handler for file downloads --- mod/file/download.php | 29 +------------------------- mod/file/pages/file/download.php | 38 +++++++++++++++++++++++++++++++++++ mod/file/pages/file/view.php | 2 +- mod/file/start.php | 5 +++++ mod/file/views/rss/file/enclosure.php | 2 +- 5 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 mod/file/pages/file/download.php diff --git a/mod/file/download.php b/mod/file/download.php index 8e0287a1e..b2acdffec 100644 --- a/mod/file/download.php +++ b/mod/file/download.php @@ -9,31 +9,4 @@ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); // Get the guid $file_guid = get_input("file_guid"); -// Get the file -$file = get_entity($file_guid); -if (!$file) { - register_error(elgg_echo("file:downloadfailed")); - forward(); -} - -$mime = $file->getMimeType(); -if (!$mime) { - $mime = "application/octet-stream"; -} - -$filename = $file->originalfilename; - -// fix for IE https issue -header("Pragma: public"); - -header("Content-type: $mime"); -if (strpos($mime, "image/") !== false) { - header("Content-Disposition: inline; filename=\"$filename\""); -} else { - header("Content-Disposition: attachment; filename=\"$filename\""); -} - -ob_clean(); -flush(); -readfile($file->getFilenameOnFilestore()); -exit; +forward("file/download/$file_guid"); diff --git a/mod/file/pages/file/download.php b/mod/file/pages/file/download.php new file mode 100644 index 000000000..00e6d500e --- /dev/null +++ b/mod/file/pages/file/download.php @@ -0,0 +1,38 @@ +getMimeType(); +if (!$mime) { + $mime = "application/octet-stream"; +} + +$filename = $file->originalfilename; + +// fix for IE https issue +header("Pragma: public"); + +header("Content-type: $mime"); +if (strpos($mime, "image/") !== false) { + header("Content-Disposition: inline; filename=\"$filename\""); +} else { + header("Content-Disposition: attachment; filename=\"$filename\""); +} + +ob_clean(); +flush(); +readfile($file->getFilenameOnFilestore()); +exit; diff --git a/mod/file/pages/file/view.php b/mod/file/pages/file/view.php index 50c55a74f..a571c9d68 100644 --- a/mod/file/pages/file/view.php +++ b/mod/file/pages/file/view.php @@ -28,7 +28,7 @@ $content .= elgg_view_comments($file); elgg_register_menu_item('title', array( 'name' => 'download', 'text' => elgg_echo('file:download'), - 'href' => "mod/file/download.php?file_guid=$file->guid", + 'href' => "file/download/$file->guid", 'link_class' => 'elgg-button elgg-button-action', )); diff --git a/mod/file/start.php b/mod/file/start.php index f8b7fa423..7a0a05844 100644 --- a/mod/file/start.php +++ b/mod/file/start.php @@ -96,6 +96,7 @@ function file_init() { * New file: file/add/ * Edit file: file/edit/ * Group files: file/group//all + * Download: file/download/ * * Title is ignored * @@ -138,6 +139,10 @@ function file_page_handler($page) { case 'all': include "$file_dir/world.php"; break; + case 'download': + set_input('guid', $page[1]); + include "$file_dir/download.php"; + break; default: return false; } diff --git a/mod/file/views/rss/file/enclosure.php b/mod/file/views/rss/file/enclosure.php index 600d287ef..fb4a899d9 100644 --- a/mod/file/views/rss/file/enclosure.php +++ b/mod/file/views/rss/file/enclosure.php @@ -6,7 +6,7 @@ */ if (elgg_instanceof($vars['entity'], 'object', 'file')) { - $download_url = elgg_get_site_url() . 'mod/file/download.php?file_guid=' . $vars['entity']->getGUID(); + $download_url = elgg_get_site_url() . 'file/download/' . $vars['entity']->getGUID(); $size = $vars['entity']->size(); $mime_type = $vars['entity']->getMimeType(); echo <<