X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FController%2FExportController.php;h=c8ef49a2ffcbf59d05054fbda25ec705d150f839;hb=0a0c600887dde4cc755de0862a3301830c415882;hp=123e491abeac7b577b4ae006672bbe99cdaeb46e;hpb=03690d138792dde6405e3d2eb3c53f6572eb3c43;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Controller/ExportController.php b/src/Wallabag/CoreBundle/Controller/ExportController.php index 123e491a..c8ef49a2 100644 --- a/src/Wallabag/CoreBundle/Controller/ExportController.php +++ b/src/Wallabag/CoreBundle/Controller/ExportController.php @@ -4,62 +4,62 @@ 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; +/** + * The try/catch can be removed once all formats will be implemented. + * Still need implementation: txt. + */ class ExportController extends Controller { /** - * Gets all entries for current user. + * Gets one entry content. + * + * @param Entry $entry * - * @Route("/export/{category}.{format}", name="ebook", requirements={ - * "_format": "epub|mobi|pdf|json|xml|txt|csv" + * @Route("/export/{id}.{format}", name="export_entry", requirements={ + * "format": "epub|mobi|pdf|json|xml|txt|csv", + * "id": "\d+" * }) */ - 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()); + } } }