aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-08-09 00:12:37 +0200
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-08-09 00:12:37 +0200
commitfda8eba4d147a7624f64c03001df1d317804c0d4 (patch)
tree78a1f167d61b6091f8edece2f6457ec0c38fb9ff
parent84826491a3fac3bde21c07ad69b114e5b56ed297 (diff)
Add a test to check presence of Zip archive.
A notification is shown if we cannot use ZipArchive. See https://github.com/marienfressinaud/FreshRSS/issues/494
-rw-r--r--app/Controllers/importExportController.php22
-rw-r--r--app/i18n/en.php1
-rw-r--r--app/i18n/fr.php1
3 files changed, 23 insertions, 1 deletions
diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php
index 67c6eb867..ba4ca4eb0 100644
--- a/app/Controllers/importExportController.php
+++ b/app/Controllers/importExportController.php
@@ -339,7 +339,17 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
$nb_files = count($export_files);
if ($nb_files > 1) {
// If there are more than 1 file to export, we need an .zip
- $this->exportZip($export_files);
+ try {
+ $this->exportZip($export_files);
+ } catch (Exception $e) {
+ # Oops, there is no Zip extension!
+ $notif = array(
+ 'type' => 'bad',
+ 'content' => _t('export_no_zip_extension')
+ );
+ Minz_Session::_param('notification', $notif);
+ Minz_Request::forward(array('c' => 'importExport'), true);
+ }
} elseif ($nb_files === 1) {
// Only one file? Guess its type and export it.
$filename = key($export_files);
@@ -351,6 +361,8 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
}
$this->exportFile($filename, $export_files[$filename], $type);
+ } else {
+ Minz_Request::forward(array('c' => 'importExport'), true);
}
}
}
@@ -393,6 +405,10 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
}
private function exportZip($files) {
+ if (!extension_loaded('zip')) {
+ throw new Exception();
+ }
+
// From https://stackoverflow.com/questions/1061710/php-zip-files-on-the-fly
$zip_file = tempnam('tmp', 'zip');
$zip = new ZipArchive();
@@ -412,6 +428,10 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
}
private function exportFile($filename, $content, $type) {
+ if (is_null($type)) {
+ return;
+ }
+
header('Content-Type: ' . $type . '; charset=utf-8');
header('Content-disposition: attachment; filename=' . $filename);
print($content);
diff --git a/app/i18n/en.php b/app/i18n/en.php
index 9e5bfb223..532327e4a 100644
--- a/app/i18n/en.php
+++ b/app/i18n/en.php
@@ -185,6 +185,7 @@ return array (
'export' => 'Export',
'export_opml' => 'Export list of feeds (OPML)',
'export_starred' => 'Export your favourites',
+ 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.',
'starred_list' => 'List of favourite articles',
'feed_list' => 'List of %s articles',
'or' => 'or',
diff --git a/app/i18n/fr.php b/app/i18n/fr.php
index 94d2e5f06..1f2844d47 100644
--- a/app/i18n/fr.php
+++ b/app/i18n/fr.php
@@ -185,6 +185,7 @@ return array (
'export' => 'Exporter',
'export_opml' => 'Exporter la liste des flux (OPML)',
'export_starred' => 'Exporter les favoris',
+ 'export_no_zip_extension' => 'L’extension Zip n’est pas présente sur votre serveur. Veuillez essayer d’exporter les fichiers un par un.',
'starred_list' => 'Liste des articles favoris',
'feed_list' => 'Liste des articles de %s',
'or' => 'ou',