From c867754cbb2260efeaa25ff9c339989807e8c713 Mon Sep 17 00:00:00 2001 From: George Petculescu Date: Mon, 31 Oct 2016 01:38:18 +0200 Subject: download helper should be able to offer a download by reading a local file and also a custom destination filename. --- system/helpers/download_helper.php | 28 +++++++++++++++++------ user_guide_src/source/helpers/download_helper.rst | 14 +++++++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index a6463dfd7..289ea199a 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -56,7 +56,7 @@ if ( ! function_exists('force_download')) * * Generates headers that force a download to happen * - * @param string filename + * @param mixed filename (or an array of local file path => destination filename) * @param mixed the data to be downloaded * @param bool whether to try and send the actual file MIME type * @return void @@ -69,14 +69,28 @@ if ( ! function_exists('force_download')) } elseif ($data === NULL) { - if ( ! @is_file($filename) OR ($filesize = @filesize($filename)) === FALSE) + // Is $filename an array as ['local source path' => 'destination filename']? + if(is_array($filename)) { - return; - } + $filepath = key($filename); + $filename = current($filename); - $filepath = $filename; - $filename = explode('/', str_replace(DIRECTORY_SEPARATOR, '/', $filename)); - $filename = end($filename); + if ( ! @is_file($filepath) OR ($filesize = @filesize($filepath)) === FALSE) + { + return; + } + } + else + { + if ( ! @is_file($filename) OR ($filesize = @filesize($filename)) === FALSE) + { + return; + } + + $filepath = $filename; + $filename = explode('/', str_replace(DIRECTORY_SEPARATOR, '/', $filename)); + $filename = end($filename); + } } else { diff --git a/user_guide_src/source/helpers/download_helper.rst b/user_guide_src/source/helpers/download_helper.rst index 1a4065073..83182a256 100644 --- a/user_guide_src/source/helpers/download_helper.rst +++ b/user_guide_src/source/helpers/download_helper.rst @@ -26,7 +26,7 @@ The following functions are available: .. php:function:: force_download([$filename = ''[, $data = ''[, $set_mime = FALSE]]]) - :param string $filename: Filename + :param mixed $filename: Filename :param mixed $data: File contents :param bool $set_mime: Whether to try to send the actual MIME type :rtype: void @@ -37,7 +37,9 @@ The following functions are available: file data. If you set the second parameter to NULL and ``$filename`` is an existing, readable - file path, then its content will be read instead. + file path, then its content will be read instead. You may also set ``$filename`` + as an array containing a single entry, the key being the existing, readable file path + and the value as the downloading file name. If you set the third parameter to boolean TRUE, then the actual file MIME type (based on the filename extension) will be sent, so that if your browser has a @@ -53,4 +55,10 @@ The following functions are available: do the following:: // Contents of photo.jpg will be automatically read - force_download('/path/to/photo.jpg', NULL); \ No newline at end of file + force_download('/path/to/photo.jpg', NULL); + + If you want to download an existing file from your server, but change the name + of the actual file sent to browser, you will need this:: + + // Contents of photo.jpg will be automatically read and sent as my-photo.jpg + force_download(array('/path/to/photo.jpg' => 'my-photo.jpg'), NULL); \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 214a537e4df19f3885943604c1b8a49c3f64993d Mon Sep 17 00:00:00 2001 From: George Petculescu Date: Mon, 31 Oct 2016 01:42:41 +0200 Subject: single entry restriction if $filename is an array --- system/helpers/download_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index 289ea199a..a1d149f91 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -70,7 +70,7 @@ if ( ! function_exists('force_download')) elseif ($data === NULL) { // Is $filename an array as ['local source path' => 'destination filename']? - if(is_array($filename)) + if(is_array($filename) && count($filename) === 1) { $filepath = key($filename); $filename = current($filename); -- cgit v1.2.3-24-g4f1b From c953c128649e06bb1a3594e56459cf14bdb6e048 Mon Sep 17 00:00:00 2001 From: George PETCULESCU Date: Mon, 31 Oct 2016 14:06:48 +0200 Subject: fixed coding style --- system/helpers/download_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index a1d149f91..32ee773bb 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -70,7 +70,7 @@ if ( ! function_exists('force_download')) elseif ($data === NULL) { // Is $filename an array as ['local source path' => 'destination filename']? - if(is_array($filename) && count($filename) === 1) + if(is_array($filename) && count($filename)) { $filepath = key($filename); $filename = current($filename); -- cgit v1.2.3-24-g4f1b From b907c8ad41dfb4a9394b3a73182f0abf7fe14f94 Mon Sep 17 00:00:00 2001 From: George PETCULESCU Date: Mon, 31 Oct 2016 14:08:36 +0200 Subject: fixed coding style (2) --- system/helpers/download_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index 32ee773bb..9158272ef 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -70,7 +70,7 @@ if ( ! function_exists('force_download')) elseif ($data === NULL) { // Is $filename an array as ['local source path' => 'destination filename']? - if(is_array($filename) && count($filename)) + if(is_array($filename) && count($filename) == 1) { $filepath = key($filename); $filename = current($filename); -- cgit v1.2.3-24-g4f1b From 5d1c2123fdc575d70e9db38ce30b34d4b291469c Mon Sep 17 00:00:00 2001 From: George PETCULESCU Date: Mon, 31 Oct 2016 14:16:35 +0200 Subject: refactorised Docs (parts) of Download helper. --- user_guide_src/source/helpers/download_helper.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/user_guide_src/source/helpers/download_helper.rst b/user_guide_src/source/helpers/download_helper.rst index 83182a256..e11d92a14 100644 --- a/user_guide_src/source/helpers/download_helper.rst +++ b/user_guide_src/source/helpers/download_helper.rst @@ -38,9 +38,10 @@ The following functions are available: If you set the second parameter to NULL and ``$filename`` is an existing, readable file path, then its content will be read instead. You may also set ``$filename`` - as an array containing a single entry, the key being the existing, readable file path - and the value as the downloading file name. - + as an associative array with a single element, where the key of that element would be + the local file you are trying to read and where the value is the name of the downloadable + file that will be sent to browser. An example of this is provided below. + If you set the third parameter to boolean TRUE, then the actual file MIME type (based on the filename extension) will be sent, so that if your browser has a handler for that type - it can use it. -- cgit v1.2.3-24-g4f1b From 627b050e89ea3e9794e7ad03c28aeb770417357a Mon Sep 17 00:00:00 2001 From: George Petculescu Date: Tue, 1 Nov 2016 08:16:47 +0200 Subject: if download helper receives a numeric array now it won't work --- system/helpers/download_helper.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index 9158272ef..4bab69005 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -75,6 +75,11 @@ if ( ! function_exists('force_download')) $filepath = key($filename); $filename = current($filename); + if(is_int($filepath)) + { + return; + } + if ( ! @is_file($filepath) OR ($filesize = @filesize($filepath)) === FALSE) { return; -- cgit v1.2.3-24-g4f1b From 54a1138a864a9d2d3ce7ef6d4b9d22df86440bb5 Mon Sep 17 00:00:00 2001 From: gxgpet Date: Tue, 1 Nov 2016 10:44:32 +0200 Subject: Fixed coding style (this time for real) --- system/helpers/download_helper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index 4bab69005..eb714c1ff 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -70,12 +70,12 @@ if ( ! function_exists('force_download')) elseif ($data === NULL) { // Is $filename an array as ['local source path' => 'destination filename']? - if(is_array($filename) && count($filename) == 1) + if (is_array($filename) && count($filename) == 1) { $filepath = key($filename); $filename = current($filename); - if(is_int($filepath)) + if (is_int($filepath)) { return; } -- cgit v1.2.3-24-g4f1b From 3e86cc27d531e15c7d7dc7c606f87e1694272f92 Mon Sep 17 00:00:00 2001 From: George PETCULESCU Date: Tue, 1 Nov 2016 14:02:46 +0200 Subject: fixed when $filename is an array with a different count than 1. --- system/helpers/download_helper.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index eb714c1ff..43c3924a3 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -70,8 +70,13 @@ if ( ! function_exists('force_download')) elseif ($data === NULL) { // Is $filename an array as ['local source path' => 'destination filename']? - if (is_array($filename) && count($filename) == 1) + if (is_array($filename)) { + if (count($filename) != 1) + { + return; + } + $filepath = key($filename); $filename = current($filename); -- cgit v1.2.3-24-g4f1b From 49407be71a80d67151a296be25fff2468c68ab55 Mon Sep 17 00:00:00 2001 From: George PETCULESCU Date: Tue, 1 Nov 2016 16:10:59 +0200 Subject: strict comparison of 1. --- system/helpers/download_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php index 43c3924a3..9619c61b1 100644 --- a/system/helpers/download_helper.php +++ b/system/helpers/download_helper.php @@ -72,7 +72,7 @@ if ( ! function_exists('force_download')) // Is $filename an array as ['local source path' => 'destination filename']? if (is_array($filename)) { - if (count($filename) != 1) + if (count($filename) !== 1) { return; } -- cgit v1.2.3-24-g4f1b