aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Controller/ExportController.php
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2015-10-16 10:51:53 +0200
committerNicolas LÅ“uillet <nicolas.loeuillet@smile.fr>2015-11-09 16:32:48 +0100
commitadd597bad95b30dbecab3aecc8362a1ccd427976 (patch)
tree1e4976f41fb043bea41c4db4544b42458eee3500 /src/Wallabag/CoreBundle/Controller/ExportController.php
parent03690d138792dde6405e3d2eb3c53f6572eb3c43 (diff)
downloadwallabag-add597bad95b30dbecab3aecc8362a1ccd427976.tar.gz
wallabag-add597bad95b30dbecab3aecc8362a1ccd427976.tar.zst
wallabag-add597bad95b30dbecab3aecc8362a1ccd427976.zip
Rework on export
- all export now return a `HttpFoundation\Response` - return a 404 on unsupported format - add tests
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller/ExportController.php')
-rw-r--r--src/Wallabag/CoreBundle/Controller/ExportController.php77
1 files changed, 35 insertions, 42 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php
index 123e491a..dd3cb7ca 100644
--- a/src/Wallabag/CoreBundle/Controller/ExportController.php
+++ b/src/Wallabag/CoreBundle/Controller/ExportController.php
@@ -4,62 +4,55 @@ namespace Wallabag\CoreBundle\Controller;
4 4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
7use Wallabag\CoreBundle\Entity\Entry; 8use Wallabag\CoreBundle\Entity\Entry;
8use Wallabag\CoreBundle\Helper\EntriesExport;
9 9
10class ExportController extends Controller 10class ExportController extends Controller
11{ 11{
12 /** 12 /**
13 * Gets all entries for current user. 13 * Gets one entry content.
14 * 14 *
15 * @Route("/export/{category}.{format}", name="ebook", requirements={ 15 * @param Entry $entry
16 * "_format": "epub|mobi|pdf|json|xml|txt|csv" 16 *
17 * }) 17 * @Route("/export/{id}.{format}", requirements={"id" = "\d+"}, name="export_entry")
18 */ 18 */
19 public function getEntriesAction($format, $category) 19 public function downloadEntryAction(Entry $entry, $format)
20 { 20 {
21 $repository = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry'); 21 try {
22 switch ($category) { 22 return $this->get('wallabag_core.helper.entries_export')
23 case 'all': 23 ->setEntries($entry)
24 $method = 'All'; 24 ->updateTitle('entry')
25 break; 25 ->exportAs($format);
26 26 } catch (\InvalidArgumentException $e) {
27 case 'unread': 27 throw new NotFoundHttpException($e->getMessage());
28 $method = 'Unread';
29 break;
30
31 case 'starred':
32 $method = 'Starred';
33 break;
34
35 case 'archive':
36 $method = 'Archive';
37 break;
38
39 default:
40 break;
41 } 28 }
42
43 $methodBuilder = 'getBuilderFor'.$method.'ByUser';
44 $qb = $repository->$methodBuilder($this->getUser()->getId());
45 $entries = $qb->getQuery()->getResult();
46
47 $export = new EntriesExport($entries);
48 $export->setMethod($method);
49 $export->exportAs($format);
50 } 29 }
51 30
52 /** 31 /**
53 * Gets one entry content. 32 * Export all entries for current user.
54 *
55 * @param Entry $entry
56 * 33 *
57 * @Route("/export/id/{id}.{format}", requirements={"id" = "\d+"}, name="ebook_entry") 34 * @Route("/export/{category}.{format}", name="export_entries", requirements={
35 * "_format": "epub|mobi|pdf|json|xml|txt|csv",
36 * "category": "all|unread|starred|archive"
37 * })
58 */ 38 */
59 public function getEntryAction(Entry $entry, $format) 39 public function downloadEntriesAction($format, $category)
60 { 40 {
61 $export = new EntriesExport(array($entry)); 41 $method = ucfirst($category);
62 $export->setMethod('entry'); 42 $methodBuilder = 'getBuilderFor'.$method.'ByUser';
63 $export->exportAs($format); 43 $entries = $this->getDoctrine()
44 ->getRepository('WallabagCoreBundle:Entry')
45 ->$methodBuilder($this->getUser()->getId())
46 ->getQuery()
47 ->getResult();
48
49 try {
50 return $this->get('wallabag_core.helper.entries_export')
51 ->setEntries($entries)
52 ->updateTitle($method)
53 ->exportAs($format);
54 } catch (\InvalidArgumentException $e) {
55 throw new NotFoundHttpException($e->getMessage());
56 }
64 } 57 }
65} 58}