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 $selection = $request->getParam('selection');
38 if (empty($selection)) {
39 $this->saveErrorMessage(t('Please select an export mode.'));
41 return $this->redirect($response, '/admin/export');
44 $prependNoteUrl = filter_var($request->getParam('prepend_note_url') ?? false, FILTER_VALIDATE_BOOLEAN
);
47 $formatter = $this->container
->formatterFactory
->getFormatter('raw');
51 $this->container
->netscapeBookmarkUtils
->filterAndFormat(
55 index_url($this->container
->environment
)
58 } catch (\Exception
$exc) {
59 $this->saveErrorMessage($exc->getMessage());
61 return $this->redirect($response, '/admin/export');
64 $now = new DateTime();
65 $response = $response->withHeader('Content-Type', 'text/html; charset=utf-8');
66 $response = $response->withHeader(
67 'Content-disposition',
68 'attachment; filename=bookmarks_'.$selection.'_'.$now->format(Bookmark
::LINK_DATE_FORMAT
).'.html'
71 $this->assignView('date', $now->format(DateTime
::RFC822
));
72 $this->assignView('eol', PHP_EOL
);
73 $this->assignView('selection', $selection);
75 return $response->write($this->render('export.bookmarks'));
79 * @param mixed[] $data Variables passed to the template engine
81 * @return mixed[] Template data after active plugins render_picwall hook execution.
83 protected function executeHooks(array $data): array
85 $this->container
->pluginManager
->executeHooks(