]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/front/controller/admin/ExportController.php
Process bookmarks import through Slim controller
[github/shaarli/Shaarli.git] / application / front / controller / admin / ExportController.php
CommitLineData
c70ff64a
A
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli\Front\Controller\Admin;
6
7use DateTime;
8use Shaarli\Bookmark\Bookmark;
9use Slim\Http\Request;
10use Slim\Http\Response;
11
12/**
13 * Class ExportController
14 *
15 * Slim controller used to display Shaarli data export page,
16 * and process the bookmarks export as a Netscape Bookmarks file.
17 */
18class ExportController extends ShaarliAdminController
19{
20 /**
21 * GET /admin/export - Display export page
22 */
23 public function index(Request $request, Response $response): Response
24 {
25 $this->assignView('pagetitle', t('Export') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
26
27 return $response->write($this->render('export'));
28 }
29
30 /**
31 * POST /admin/export - Process export, and serve download file named
32 * bookmarks_(all|private|public)_datetime.html
33 */
34 public function export(Request $request, Response $response): Response
35 {
78657347
A
36 $this->checkToken($request);
37
c70ff64a
A
38 $selection = $request->getParam('selection');
39
40 if (empty($selection)) {
41 $this->saveErrorMessage(t('Please select an export mode.'));
42
43 return $this->redirect($response, '/admin/export');
44 }
45
46 $prependNoteUrl = filter_var($request->getParam('prepend_note_url') ?? false, FILTER_VALIDATE_BOOLEAN);
47
48 try {
49 $formatter = $this->container->formatterFactory->getFormatter('raw');
50
51 $this->assignView(
52 'links',
53 $this->container->netscapeBookmarkUtils->filterAndFormat(
54 $formatter,
55 $selection,
56 $prependNoteUrl,
57 index_url($this->container->environment)
58 )
59 );
60 } catch (\Exception $exc) {
61 $this->saveErrorMessage($exc->getMessage());
62
63 return $this->redirect($response, '/admin/export');
64 }
65
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'
71 );
72
73 $this->assignView('date', $now->format(DateTime::RFC822));
74 $this->assignView('eol', PHP_EOL);
75 $this->assignView('selection', $selection);
76
77 return $response->write($this->render('export.bookmarks'));
78 }
c70ff64a 79}