X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FApiBundle%2FController%2FWallabagRestController.php;h=8587558921bfc172d0c28c7571aeb9919e1180f8;hb=3f3a60879e168f4a8040c441e295fa63e024961d;hp=869fdc56ab1ba54dbf787d3f281fc357a180fa44;hpb=1bee9e0760c89756ebab0b67f9ab7efc5c6a709b;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 869fdc56..85875589 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -3,15 +3,16 @@ namespace Wallabag\ApiBundle\Controller; use FOS\RestBundle\Controller\FOSRestController; -use Hateoas\Configuration\Route; +use Hateoas\Configuration\Route as HateoasRoute; use Hateoas\Representation\Factory\PagerfantaFactory; use Nelmio\ApiDocBundle\Annotation\ApiDoc; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Tag; +use FOS\RestBundle\Controller\Annotations\Route; class WallabagRestController extends FOSRestController { @@ -22,6 +23,38 @@ class WallabagRestController extends FOSRestController } } + /** + * Check if an entry exist by url. + * + * @ApiDoc( + * parameters={ + * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"} + * } + * ) + * + * @return JsonResponse + */ + public function getEntriesExistsAction(Request $request) + { + $this->validateAuthentication(); + + $url = $request->query->get('url', ''); + + if (empty($url)) { + throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$this->getUser()->getId()); + } + + $res = $this->getDoctrine() + ->getRepository('WallabagCoreBundle:Entry') + ->findByUrlAndUserId($url, $this->getUser()->getId()); + + $exists = false === $res ? false : true; + + $json = $this->get('serializer')->serialize(['exists' => $exists], 'json'); + + return (new JsonResponse())->setJson($json); + } + /** * Retrieve all entries. It could be filtered by many options. * @@ -38,7 +71,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntriesAction(Request $request) { @@ -50,8 +83,8 @@ class WallabagRestController extends FOSRestController $order = $request->query->get('order', 'desc'); $page = (int) $request->query->get('page', 1); $perPage = (int) $request->query->get('perPage', 30); - $since = $request->query->get('since', 0); $tags = $request->query->get('tags', ''); + $since = $request->query->get('since', 0); $pager = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') @@ -63,12 +96,25 @@ class WallabagRestController extends FOSRestController $pagerfantaFactory = new PagerfantaFactory('page', 'perPage'); $paginatedCollection = $pagerfantaFactory->createRepresentation( $pager, - new Route('api_get_entries', [], UrlGeneratorInterface::ABSOLUTE_URL) + new HateoasRoute( + 'api_get_entries', + [ + 'archive' => $isArchived, + 'starred' => $isStarred, + 'sort' => $sort, + 'order' => $order, + 'page' => $page, + 'perPage' => $perPage, + 'tags' => $tags, + 'since' => $since, + ], + UrlGeneratorInterface::ABSOLUTE_URL + ) ); $json = $this->get('serializer')->serialize($paginatedCollection, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -80,7 +126,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntryAction(Entry $entry) { @@ -89,7 +135,31 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); + } + + /** + * Retrieve a single entry as a predefined format. + * + * @ApiDoc( + * requirements={ + * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"} + * } + * ) + * + * @Route(requirements={"_format"="epub|mobi|pdf|txt|csv"}) + * + * @return Response + */ + public function getEntryExportAction(Entry $entry, Request $request) + { + $this->validateAuthentication(); + $this->validateUserAccess($entry->getUser()->getId()); + + return $this->get('wallabag_core.helper.entries_export') + ->setEntries($entry) + ->updateTitle('entry') + ->exportAs($request->attributes->get('_format')); } /** @@ -105,7 +175,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function postEntriesAction(Request $request) { @@ -149,7 +219,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -167,7 +237,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function patchEntriesAction(Entry $entry, Request $request) { @@ -200,7 +270,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -212,7 +282,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteEntriesAction(Entry $entry) { @@ -225,7 +295,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -237,7 +307,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntriesTagsAction(Entry $entry) { @@ -246,7 +316,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry->getTags(), 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -261,7 +331,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function postEntriesTagsAction(Request $request, Entry $entry) { @@ -279,7 +349,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -292,7 +362,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteEntriesTagsAction(Entry $entry, Tag $tag) { @@ -306,7 +376,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -314,7 +384,7 @@ class WallabagRestController extends FOSRestController * * @ApiDoc() * - * @return Response + * @return JsonResponse */ public function getTagsAction() { @@ -322,11 +392,11 @@ class WallabagRestController extends FOSRestController $tags = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Tag') - ->findAllTags($this->getUser()->getId()); + ->findAllTagsWithEntries($this->getUser()->getId()); $json = $this->get('serializer')->serialize($tags, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -338,7 +408,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagLabelAction(Request $request) { @@ -357,7 +427,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tag, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -369,7 +439,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagsLabelAction(Request $request) { @@ -397,7 +467,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tags, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -409,7 +479,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagAction(Tag $tag) { @@ -421,7 +491,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tag, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -429,7 +499,7 @@ class WallabagRestController extends FOSRestController * * @ApiDoc() * - * @return Response + * @return JsonResponse */ public function getVersionAction() { @@ -437,7 +507,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($version, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -453,17 +523,4 @@ class WallabagRestController extends FOSRestController throw $this->createAccessDeniedException('Access forbidden. Entry user id: '.$requestUserId.', logged user id: '.$user->getId()); } } - - /** - * Send a JSON Response. - * We don't use the Symfony JsonRespone, because it takes an array as parameter instead of a JSON string. - * - * @param string $json - * - * @return Response - */ - private function renderJsonResponse($json) - { - return new Response($json, 200, ['application/json']); - } }