aboutsummaryrefslogtreecommitdiff
path: root/cli/export-zip-for-user.php
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2020-06-13 19:36:24 +0200
committerGravatar GitHub <noreply@github.com> 2020-06-13 19:36:24 +0200
commit15505a03779326f9497644e9827477cdcc26c2d2 (patch)
tree863250aaf3af42491bacd679d928a733fc132c16 /cli/export-zip-for-user.php
parent7a748e25ab7187bba53decd2f41bd7b6383440f3 (diff)
tec: Refactor the export feature (#3045)
Even if the issue #3035 seemed pretty simple at a first glance, it was more complicated than I expected. Because we send CSP headers AFTER running the controller actions, it means we can't "echo" any content from the controller. It's in fact a good practice, but it was easier at the time we developed the feature. To fix that, the only thing I had to do was to move the `print()` and `readfile()` function into the view. The problem was that we needed to output the content from the CLI too. Then, things became more complicated. I decided to extract the export-related methods in a `FreshRSS_Export_Service` class, in order to use it from both the controller and the CLI. It was an opportunity to refactor the whole feature in order to make it a bit more linear and easy to read. Reference: https://github.com/FreshRSS/FreshRSS/issues/3035
Diffstat (limited to 'cli/export-zip-for-user.php')
-rwxr-xr-xcli/export-zip-for-user.php34
1 files changed, 25 insertions, 9 deletions
diff --git a/cli/export-zip-for-user.php b/cli/export-zip-for-user.php
index 67421ea29..15ab94e5f 100755
--- a/cli/export-zip-for-user.php
+++ b/cli/export-zip-for-user.php
@@ -13,19 +13,35 @@ if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username ( --max-feed-entries 100 ) > /path/to/file.zip");
}
+if (!extension_loaded('zip')) {
+ fail('FreshRSS error: Lacking php-zip extension!');
+}
+
$username = cliInitUser($options['user']);
fwrite(STDERR, 'FreshRSS exporting ZIP for user “' . $username . "”…\n");
-$importController = new FreshRSS_importExport_Controller();
-
-$ok = false;
+$export_service = new FreshRSS_Export_Service($username);
$number_entries = empty($options['max-feed-entries']) ? 100 : intval($options['max-feed-entries']);
-try {
- $ok = $importController->exportFile($username, true, true, true, true, $number_entries);
-} catch (FreshRSS_ZipMissing_Exception $zme) {
- fail('FreshRSS error: Lacking php-zip extension!');
-}
+$exported_files = [];
+
+// First, we generate the OPML file
+list($filename, $content) = $export_service->generateOpml();
+$exported_files[$filename] = $content;
+
+// Then, labelled and starred entries
+list($filename, $content) = $export_service->generateStarredEntries('ST');
+$exported_files[$filename] = $content;
+
+// And a list of entries based on the complete list of feeds
+$feeds_exported_files = $export_service->generateAllFeedEntries($number_entries);
+$exported_files = array_merge($exported_files, $feeds_exported_files);
+
+// Finally, we compress all these files into a single Zip archive and we output
+// the content
+list($filename, $content) = $export_service->zip($exported_files);
+echo $content;
+
invalidateHttpCache($username);
-done($ok);
+done();