3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
8 use Shaarli\Bookmark\Bookmark
;
10 use Slim\Http\Response
;
13 * Class ExportController
15 * Slim controller used to display Shaarli data export page,
16 * and process the bookmarks export as a Netscape Bookmarks file.
18 class ExportController
extends ShaarliAdminController
21 * GET /admin/export - Display export page
23 public function index(Request
$request, Response
$response): Response
25 $this->assignView('pagetitle', t('Export') .' - '. $this->container
->conf
->get('general.title', 'Shaarli'));
27 return $response->write($this->render('export'));
31 * POST /admin/export - Process export, and serve download file named
32 * bookmarks_(all|private|public)_datetime.html
34 public function export(Request
$request, Response
$response): Response
36 $this->checkToken($request);
38 $selection = $request->getParam('selection');
40 if (empty($selection)) {
41 $this->saveErrorMessage(t('Please select an export mode.'));
43 return $this->redirect($response, '/admin/export');
46 $prependNoteUrl = filter_var($request->getParam('prepend_note_url') ?? false, FILTER_VALIDATE_BOOLEAN
);
49 $formatter = $this->container
->formatterFactory
->getFormatter('raw');
53 $this->container
->netscapeBookmarkUtils
->filterAndFormat(
57 index_url($this->container
->environment
)
60 } catch (\Exception
$exc) {
61 $this->saveErrorMessage($exc->getMessage());
63 return $this->redirect($response, '/admin/export');
66 $now = new DateTime();
67 $response = $response->withHeader('Content-Type', 'text/html; charset=utf-8');
68 $response = $response->withHeader(
69 'Content-disposition',
70 'attachment; filename=bookmarks_'.$selection.'_'.$now->format(Bookmark
::LINK_DATE_FORMAT
).'.html'
73 $this->assignView('date', $now->format(DateTime
::RFC822
));
74 $this->assignView('eol', PHP_EOL
);
75 $this->assignView('selection', $selection);
77 return $response->write($this->render('export.bookmarks'));