Просмотр исходного кода

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
Marien Fressinaud 11 лет назад
Родитель
Сommit
fda8eba4d1
3 измененных файлов с 23 добавлено и 1 удалено
  1. 21 1
      app/Controllers/importExportController.php
  2. 1 0
      app/i18n/en.php
  3. 1 0
      app/i18n/fr.php

+ 21 - 1
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);

+ 1 - 0
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',

+ 1 - 0
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',