diff options
| author | 2020-06-13 19:36:24 +0200 | |
|---|---|---|
| committer | 2020-06-13 19:36:24 +0200 | |
| commit | 15505a03779326f9497644e9827477cdcc26c2d2 (patch) | |
| tree | 863250aaf3af42491bacd679d928a733fc132c16 /cli | |
| parent | 7a748e25ab7187bba53decd2f41bd7b6383440f3 (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')
| -rwxr-xr-x | cli/export-opml-for-user.php | 9 | ||||
| -rwxr-xr-x | cli/export-zip-for-user.php | 34 |
2 files changed, 29 insertions, 14 deletions
diff --git a/cli/export-opml-for-user.php b/cli/export-opml-for-user.php index 4634d47d6..c6977f0ef 100755 --- a/cli/export-opml-for-user.php +++ b/cli/export-opml-for-user.php @@ -16,11 +16,10 @@ $username = cliInitUser($options['user']); fwrite(STDERR, 'FreshRSS exporting OPML for user “' . $username . "”…\n"); -$importController = new FreshRSS_importExport_Controller(); - -$ok = false; -$ok = $importController->exportFile($username, true, false, false, array(), 0); +$export_service = new FreshRSS_Export_Service($username); +list($filename, $content) = $export_service->generateOpml(); +echo $content; invalidateHttpCache($username); -done($ok); +done(); 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(); |
