From 03690d138792dde6405e3d2eb3c53f6572eb3c43 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 15 Oct 2015 20:06:59 +0200 Subject: Start work on export For now: - ebook - mobi - pdf - csv --- .../CoreBundle/Controller/ExportController.php | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/Wallabag/CoreBundle/Controller/ExportController.php (limited to 'src/Wallabag/CoreBundle/Controller/ExportController.php') diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php new file mode 100644 index 00000000..123e491a --- /dev/null +++ b/src/Wallabag/CoreBundle/Controller/ExportController.php @@ -0,0 +1,65 @@ +getDoctrine()->getRepository('WallabagCoreBundle:Entry'); + switch ($category) { + case 'all': + $method = 'All'; + break; + + case 'unread': + $method = 'Unread'; + break; + + case 'starred': + $method = 'Starred'; + break; + + case 'archive': + $method = 'Archive'; + break; + + default: + break; + } + + $methodBuilder = 'getBuilderFor'.$method.'ByUser'; + $qb = $repository->$methodBuilder($this->getUser()->getId()); + $entries = $qb->getQuery()->getResult(); + + $export = new EntriesExport($entries); + $export->setMethod($method); + $export->exportAs($format); + } + + /** + * Gets one entry content. + * + * @param Entry $entry + * + * @Route("/export/id/{id}.{format}", requirements={"id" = "\d+"}, name="ebook_entry") + */ + public function getEntryAction(Entry $entry, $format) + { + $export = new EntriesExport(array($entry)); + $export->setMethod('entry'); + $export->exportAs($format); + } +} -- cgit v1.2.3 From add597bad95b30dbecab3aecc8362a1ccd427976 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 16 Oct 2015 10:51:53 +0200 Subject: Rework on export - all export now return a `HttpFoundation\Response` - return a 404 on unsupported format - add tests --- .../CoreBundle/Controller/ExportController.php | 77 ++++++++++------------ 1 file changed, 35 insertions(+), 42 deletions(-) (limited to 'src/Wallabag/CoreBundle/Controller/ExportController.php') 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; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Wallabag\CoreBundle\Entity\Entry; -use Wallabag\CoreBundle\Helper\EntriesExport; class ExportController extends Controller { /** - * Gets all entries for current user. + * Gets one entry content. * - * @Route("/export/{category}.{format}", name="ebook", requirements={ - * "_format": "epub|mobi|pdf|json|xml|txt|csv" - * }) + * @param Entry $entry + * + * @Route("/export/{id}.{format}", requirements={"id" = "\d+"}, name="export_entry") */ - public function getEntriesAction($format, $category) + public function downloadEntryAction(Entry $entry, $format) { - $repository = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry'); - switch ($category) { - case 'all': - $method = 'All'; - break; - - case 'unread': - $method = 'Unread'; - break; - - case 'starred': - $method = 'Starred'; - break; - - case 'archive': - $method = 'Archive'; - break; - - default: - break; + try { + return $this->get('wallabag_core.helper.entries_export') + ->setEntries($entry) + ->updateTitle('entry') + ->exportAs($format); + } catch (\InvalidArgumentException $e) { + throw new NotFoundHttpException($e->getMessage()); } - - $methodBuilder = 'getBuilderFor'.$method.'ByUser'; - $qb = $repository->$methodBuilder($this->getUser()->getId()); - $entries = $qb->getQuery()->getResult(); - - $export = new EntriesExport($entries); - $export->setMethod($method); - $export->exportAs($format); } /** - * Gets one entry content. - * - * @param Entry $entry + * Export all entries for current user. * - * @Route("/export/id/{id}.{format}", requirements={"id" = "\d+"}, name="ebook_entry") + * @Route("/export/{category}.{format}", name="export_entries", requirements={ + * "_format": "epub|mobi|pdf|json|xml|txt|csv", + * "category": "all|unread|starred|archive" + * }) */ - public function getEntryAction(Entry $entry, $format) + public function downloadEntriesAction($format, $category) { - $export = new EntriesExport(array($entry)); - $export->setMethod('entry'); - $export->exportAs($format); + $method = ucfirst($category); + $methodBuilder = 'getBuilderFor'.$method.'ByUser'; + $entries = $this->getDoctrine() + ->getRepository('WallabagCoreBundle:Entry') + ->$methodBuilder($this->getUser()->getId()) + ->getQuery() + ->getResult(); + + try { + return $this->get('wallabag_core.helper.entries_export') + ->setEntries($entries) + ->updateTitle($method) + ->exportAs($format); + } catch (\InvalidArgumentException $e) { + throw new NotFoundHttpException($e->getMessage()); + } } } -- cgit v1.2.3 From cceca9ea1d93ccf1420c2506330a16dc07f6433c Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 30 Oct 2015 20:57:10 +0100 Subject: Fix route parameters Improve export tests Improve CSV export --- src/Wallabag/CoreBundle/Controller/ExportController.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/Wallabag/CoreBundle/Controller/ExportController.php') diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php index dd3cb7ca..c8ef49a2 100644 --- a/src/Wallabag/CoreBundle/Controller/ExportController.php +++ b/src/Wallabag/CoreBundle/Controller/ExportController.php @@ -7,6 +7,10 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Wallabag\CoreBundle\Entity\Entry; +/** + * The try/catch can be removed once all formats will be implemented. + * Still need implementation: txt. + */ class ExportController extends Controller { /** @@ -14,7 +18,10 @@ class ExportController extends Controller * * @param Entry $entry * - * @Route("/export/{id}.{format}", requirements={"id" = "\d+"}, name="export_entry") + * @Route("/export/{id}.{format}", name="export_entry", requirements={ + * "format": "epub|mobi|pdf|json|xml|txt|csv", + * "id": "\d+" + * }) */ public function downloadEntryAction(Entry $entry, $format) { @@ -32,7 +39,7 @@ class ExportController extends Controller * Export all entries for current user. * * @Route("/export/{category}.{format}", name="export_entries", requirements={ - * "_format": "epub|mobi|pdf|json|xml|txt|csv", + * "format": "epub|mobi|pdf|json|xml|txt|csv", * "category": "all|unread|starred|archive" * }) */ -- cgit v1.2.3