]> git.immae.eu Git - github/wallabag/wallabag.git/blob - src/Wallabag/CoreBundle/Controller/ExportController.php
b9e5a974acede4fc9d5f8cbcce36e3f1561b10c4
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Controller / ExportController.php
1 <?php
2
3 namespace Wallabag\CoreBundle\Controller;
4
5 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7 use Symfony\Component\HttpFoundation\Request;
8 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
9 use Wallabag\CoreBundle\Entity\Entry;
10 use Wallabag\CoreBundle\Entity\Tag;
11
12 /**
13 * The try/catch can be removed once all formats will be implemented.
14 * Still need implementation: txt.
15 */
16 class ExportController extends Controller
17 {
18 /**
19 * Gets one entry content.
20 *
21 * @param Entry $entry
22 * @param string $format
23 *
24 * @Route("/export/{id}.{format}", name="export_entry", requirements={
25 * "format": "epub|mobi|pdf|json|xml|txt|csv",
26 * "id": "\d+"
27 * })
28 *
29 * @return \Symfony\Component\HttpFoundation\Response
30 */
31 public function downloadEntryAction(Entry $entry, $format)
32 {
33 try {
34 return $this->get('wallabag_core.helper.entries_export')
35 ->setEntries($entry)
36 ->updateTitle('entry')
37 ->exportAs($format);
38 } catch (\InvalidArgumentException $e) {
39 throw new NotFoundHttpException($e->getMessage());
40 }
41 }
42
43 /**
44 * Export all entries for current user.
45 *
46 * @param string $format
47 * @param string $category
48 *
49 * @Route("/export/{category}.{format}", name="export_entries", requirements={
50 * "format": "epub|mobi|pdf|json|xml|txt|csv",
51 * "category": "all|unread|starred|archive|tag_entries|untagged|search"
52 * })
53 *
54 * @return \Symfony\Component\HttpFoundation\Response
55 */
56 public function downloadEntriesAction(Request $request, $format, $category)
57 {
58 $method = ucfirst($category);
59 $methodBuilder = 'getBuilderFor'.$method.'ByUser';
60 $epository = $this->get('wallabag_core.entry_repository');
61
62 if ($category == 'tag_entries') {
63 $tag = $this->get('wallabag_core.tag_repository')->findOneBySlug($request->query->get('tag'));
64
65 $entries = $epository->findAllByTagId(
66 $this->getUser()->getId(),
67 $tag->getId()
68 );
69 } else {
70 $entries = $epository
71 ->$methodBuilder($this->getUser()->getId())
72 ->getQuery()
73 ->getResult();
74 }
75
76 try {
77 return $this->get('wallabag_core.helper.entries_export')
78 ->setEntries($entries)
79 ->updateTitle($method)
80 ->exportAs($format);
81 } catch (\InvalidArgumentException $e) {
82 throw new NotFoundHttpException($e->getMessage());
83 }
84 }
85 }