From e5fb89e5d31c1c0645e8dd252bb4f970dc5f3226 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 25 Jun 2016 21:05:50 +0200 Subject: Add since parameter --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index af24e498..7d624812 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -34,6 +34,7 @@ class WallabagRestController extends FOSRestController * {"name"="page", "dataType"="integer", "required"=false, "format"="default '1'", "description"="what page you want."}, * {"name"="perPage", "dataType"="integer", "required"=false, "format"="default'30'", "description"="results per page."}, * {"name"="tags", "dataType"="string", "required"=false, "format"="api,rest", "description"="a list of tags url encoded. Will returns entries that matches ALL tags."}, + * {"name"="since", "dataType"="integer", "required"=false, "format"="default '0'", "description"="The timestamp since when you want entries updated."}, * } * ) * @@ -49,10 +50,11 @@ 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); $pager = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') - ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order); + ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order, $since); $pager->setCurrentPage($page); $pager->setMaxPerPage($perPage); -- cgit v1.2.3 From e43c78abd9193641d07ea27d0275fc19419b89ad Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 25 Jun 2016 23:19:21 +0200 Subject: CS --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 7d624812..4fae4b0a 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -50,7 +50,7 @@ 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); + $since = $request->query->get('since', 0); $pager = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') -- cgit v1.2.3 From 28803f106bd091b5a7540a134cba2545d12d25ea Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 25 Jun 2016 16:27:38 +0200 Subject: Add filter for tags on API --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 4fae4b0a..03eb9b08 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -51,10 +51,11 @@ class WallabagRestController extends FOSRestController $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', ''); $pager = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') - ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order, $since); + ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order, $since, $tags); $pager->setCurrentPage($page); $pager->setMaxPerPage($perPage); -- cgit v1.2.3 From 4da01f492b20312461d3f4f612a98e3b52c76fa9 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 25 Jun 2016 18:37:41 +0200 Subject: Delete tag or tags by label Tests not included --- .../Controller/WallabagRestController.php | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 03eb9b08..8eaff5f6 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -352,6 +352,67 @@ class WallabagRestController extends FOSRestController return $this->renderJsonResponse($json); } + + /** + * Permanently remove one tag from **every** entry. + * + * @ApiDoc( + * requirements={ + * {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag as a string"} + * } + * ) + * + * @return Response + */ + public function deleteTagLabelAction(Request $request) + { + $this->validateAuthentication(); + $label = $request->query->get('tag',''); + + $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); + $this->getDoctrine() + ->getRepository('WallabagCoreBundle:Entry') + ->removeTag($this->getUser()->getId(), $tag); + + $json = $this->get('serializer')->serialize($tag, 'json'); + + return $this->renderJsonResponse($json); + } + + /** + * Permanently remove some tags from **every** entry. + * + * @ApiDoc( + * requirements={ + * {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="The tags as strings"} + * } + * ) + * + * @return Response + */ + public function deleteTagsLabelAction(Request $request) + { + $this->validateAuthentication(); + + $tagsLabels = $request->query->get('tags', ''); + + $tags = array(); + + foreach (explode(',', $tagsLabels) as $tagLabel) { + $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel); + $tags[] = $tagEntity; + } + + $this->getDoctrine() + ->getRepository('WallabagCoreBundle:Entry') + ->removeTags($this->getUser()->getId(), $tags); + + $json = $this->get('serializer')->serialize($tags, 'json'); + + return $this->renderJsonResponse($json); + } + + /** * Retrieve version number. * -- cgit v1.2.3 From 9bf83f1fb8d588b871a5d12289179de087756d02 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 25 Jun 2016 19:25:50 +0200 Subject: CS --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 8eaff5f6..43225149 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -367,7 +367,7 @@ class WallabagRestController extends FOSRestController public function deleteTagLabelAction(Request $request) { $this->validateAuthentication(); - $label = $request->query->get('tag',''); + $label = $request->query->get('tag', ''); $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); $this->getDoctrine() @@ -412,7 +412,6 @@ class WallabagRestController extends FOSRestController return $this->renderJsonResponse($json); } - /** * Retrieve version number. * -- cgit v1.2.3 From a0e1eafc35e1007056555651ace7221d09cd8270 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sun, 24 Jul 2016 10:55:49 +0200 Subject: Add some tests Also, retrieve tag from the request instead of the query (which will be the same but it's more easy to test). Moved down `deleteTagAction` because it conflicted with the new action: api_delete_tag => /api/tags/{tag}.{_format} api_delete_tags_label => /api/tags/label.{_format} And finally, throw exception when a tag is not found before removing it. --- .../Controller/WallabagRestController.php | 58 +++++++++++++--------- 1 file changed, 35 insertions(+), 23 deletions(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 43225149..869fdc56 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -334,15 +334,22 @@ class WallabagRestController extends FOSRestController * * @ApiDoc( * requirements={ - * {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag"} + * {"name"="tag", "dataType"="string", "required"=true, "requirement"="\w+", "description"="Tag as a string"} * } * ) * * @return Response */ - public function deleteTagAction(Tag $tag) + public function deleteTagLabelAction(Request $request) { $this->validateAuthentication(); + $label = $request->request->get('tag', ''); + + $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); + + if (empty($tag)) { + throw $this->createNotFoundException('Tag not found'); + } $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') @@ -354,60 +361,65 @@ class WallabagRestController extends FOSRestController } /** - * Permanently remove one tag from **every** entry. + * Permanently remove some tags from **every** entry. * * @ApiDoc( * requirements={ - * {"name"="tag", "dataType"="string", "requirement"="\w+", "description"="The tag as a string"} + * {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="Tags as strings (comma splitted)"} * } * ) * * @return Response */ - public function deleteTagLabelAction(Request $request) + public function deleteTagsLabelAction(Request $request) { $this->validateAuthentication(); - $label = $request->query->get('tag', ''); - $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); + $tagsLabels = $request->request->get('tags', ''); + + $tags = []; + + foreach (explode(',', $tagsLabels) as $tagLabel) { + $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel); + + if (!empty($tagEntity)) { + $tags[] = $tagEntity; + } + } + + if (empty($tags)) { + throw $this->createNotFoundException('Tags not found'); + } + $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') - ->removeTag($this->getUser()->getId(), $tag); + ->removeTags($this->getUser()->getId(), $tags); - $json = $this->get('serializer')->serialize($tag, 'json'); + $json = $this->get('serializer')->serialize($tags, 'json'); return $this->renderJsonResponse($json); } /** - * Permanently remove some tags from **every** entry. + * Permanently remove one tag from **every** entry. * * @ApiDoc( * requirements={ - * {"name"="tags", "dataType"="string", "required"=true, "format"="tag1,tag2", "description"="The tags as strings"} + * {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag"} * } * ) * * @return Response */ - public function deleteTagsLabelAction(Request $request) + public function deleteTagAction(Tag $tag) { $this->validateAuthentication(); - $tagsLabels = $request->query->get('tags', ''); - - $tags = array(); - - foreach (explode(',', $tagsLabels) as $tagLabel) { - $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel); - $tags[] = $tagEntity; - } - $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') - ->removeTags($this->getUser()->getId(), $tags); + ->removeTag($this->getUser()->getId(), $tag); - $json = $this->get('serializer')->serialize($tags, 'json'); + $json = $this->get('serializer')->serialize($tag, 'json'); return $this->renderJsonResponse($json); } -- cgit v1.2.3 From 429d86f388da856c9d8d9a649147c5212bee4258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Sun, 4 Sep 2016 20:53:28 +0200 Subject: Added tags counter in sidebar (material theme) --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 869fdc56..07fedeb0 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -322,7 +322,9 @@ class WallabagRestController extends FOSRestController $tags = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Tag') - ->findAllTags($this->getUser()->getId()); + ->findAllTags($this->getUser()->getId()) + ->getQuery() + ->getResult(); $json = $this->get('serializer')->serialize($tags, 'json'); -- cgit v1.2.3 From 60faee002ceff1d6f77996fc32a0023a140a2fe9 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Thu, 8 Sep 2016 12:03:09 +0200 Subject: Re-user JsonResponse Since Symfony 3.1 we can define the json of a JsonResonse using `->setJson()` --- .../Controller/WallabagRestController.php | 67 +++++++++------------- 1 file changed, 27 insertions(+), 40 deletions(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 07fedeb0..fb7c6c1f 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -7,7 +7,7 @@ use Hateoas\Configuration\Route; 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; @@ -38,7 +38,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntriesAction(Request $request) { @@ -68,7 +68,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($paginatedCollection, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -80,7 +80,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntryAction(Entry $entry) { @@ -89,7 +89,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -105,7 +105,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function postEntriesAction(Request $request) { @@ -149,7 +149,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -167,7 +167,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function patchEntriesAction(Entry $entry, Request $request) { @@ -200,7 +200,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -212,7 +212,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteEntriesAction(Entry $entry) { @@ -225,7 +225,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -237,7 +237,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function getEntriesTagsAction(Entry $entry) { @@ -246,7 +246,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry->getTags(), 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -261,7 +261,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function postEntriesTagsAction(Request $request, Entry $entry) { @@ -279,7 +279,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -292,7 +292,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteEntriesTagsAction(Entry $entry, Tag $tag) { @@ -306,7 +306,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($entry, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -314,7 +314,7 @@ class WallabagRestController extends FOSRestController * * @ApiDoc() * - * @return Response + * @return JsonResponse */ public function getTagsAction() { @@ -328,7 +328,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tags, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -340,7 +340,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagLabelAction(Request $request) { @@ -359,7 +359,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tag, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -371,7 +371,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagsLabelAction(Request $request) { @@ -399,7 +399,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tags, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -411,7 +411,7 @@ class WallabagRestController extends FOSRestController * } * ) * - * @return Response + * @return JsonResponse */ public function deleteTagAction(Tag $tag) { @@ -423,7 +423,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($tag, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -431,7 +431,7 @@ class WallabagRestController extends FOSRestController * * @ApiDoc() * - * @return Response + * @return JsonResponse */ public function getVersionAction() { @@ -439,7 +439,7 @@ class WallabagRestController extends FOSRestController $json = $this->get('serializer')->serialize($version, 'json'); - return $this->renderJsonResponse($json); + return (new JsonResponse())->setJson($json); } /** @@ -455,17 +455,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']); - } } -- cgit v1.2.3 From faa86e06ba3032fdb98f3c0f79c72e8581d3c96f Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sun, 25 Sep 2016 11:21:13 +0200 Subject: Fix tags count in menu Move enable cache for Tag in the Entity because function `find*` should return result and not a Query --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index fb7c6c1f..dd17ef97 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -322,9 +322,7 @@ class WallabagRestController extends FOSRestController $tags = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Tag') - ->findAllTags($this->getUser()->getId()) - ->getQuery() - ->getResult(); + ->findAllTagsWithEntries($this->getUser()->getId()); $json = $this->get('serializer')->serialize($tags, 'json'); -- cgit v1.2.3 From 6273fefd5d945de1d871815a652f5a716e12e820 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 1 Oct 2016 17:15:28 +0200 Subject: Add an exists endpoint in API It should allow third party to check if an url was already saved by a user --- .../Controller/WallabagRestController.php | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index dd17ef97..b83e4266 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -22,6 +22,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: '.$user->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. * -- cgit v1.2.3 From 3583cadf6fc4e5d2b410a42c874bb9a94e505390 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sun, 2 Oct 2016 01:43:50 +0200 Subject: CS --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index b83e4266..104720a9 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -23,7 +23,7 @@ class WallabagRestController extends FOSRestController } /** - * Check if an entry exist by url + * Check if an entry exist by url. * * @ApiDoc( * parameters={ -- cgit v1.2.3 From c3f8b428dd50578a6eba5f4673ea1c9edabd2512 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sun, 2 Oct 2016 15:41:08 +0200 Subject: Fix parameters in API _links We forgot to pass them to the factory --- .../ApiBundle/Controller/WallabagRestController.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 104720a9..791bf80b 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -82,8 +82,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') @@ -95,7 +95,20 @@ class WallabagRestController extends FOSRestController $pagerfantaFactory = new PagerfantaFactory('page', 'perPage'); $paginatedCollection = $pagerfantaFactory->createRepresentation( $pager, - new Route('api_get_entries', [], UrlGeneratorInterface::ABSOLUTE_URL) + new Route( + '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'); -- cgit v1.2.3 From 5d39243068a3c1132f6e3020c6c9da1840f85fcf Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 5 Oct 2016 15:28:36 +0200 Subject: Fix exists API call Boo --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index 791bf80b..b2c73932 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -40,7 +40,7 @@ class WallabagRestController extends FOSRestController $url = $request->query->get('url', ''); if (empty($url)) { - throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$user->getId()); + throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$this->getUser->getId()); } $res = $this->getDoctrine() -- cgit v1.2.3 From 0b174d69d77770fab617661c284095bc61d30c10 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Wed, 5 Oct 2016 19:30:56 +0200 Subject: Fix typo & add test --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index b2c73932..a0d9d4f3 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -40,7 +40,7 @@ class WallabagRestController extends FOSRestController $url = $request->query->get('url', ''); if (empty($url)) { - throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$this->getUser->getId()); + throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$this->getUser()->getId()); } $res = $this->getDoctrine() -- cgit v1.2.3 From f0abc22d09d2e38d3dd408425821a89da3d21377 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 7 Oct 2016 20:37:01 +0200 Subject: Ability to check multiple urls in API --- .../Controller/WallabagRestController.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index a0d9d4f3..6dd03c1b 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -27,7 +27,8 @@ class WallabagRestController extends FOSRestController * * @ApiDoc( * parameters={ - * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"} + * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}, + * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="Urls (as an array) to check if it exists"} * } * ) * @@ -37,6 +38,25 @@ class WallabagRestController extends FOSRestController { $this->validateAuthentication(); + $urls = $request->query->get('urls', []); + + // handle multiple urls first + if (!empty($urls)) { + $results = []; + foreach ($urls as $url) { + $res = $this->getDoctrine() + ->getRepository('WallabagCoreBundle:Entry') + ->findByUrlAndUserId($url, $this->getUser()->getId()); + + $results[$url] = false === $res ? false : true; + } + + $json = $this->get('serializer')->serialize($results, 'json'); + + return (new JsonResponse())->setJson($json); + } + + // let's see if it is a simple url? $url = $request->query->get('url', ''); if (empty($url)) { -- cgit v1.2.3 From ac8cf632bb3a225c1b69d16e714ff60a2e988c89 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 7 Oct 2016 23:31:53 +0200 Subject: Ensure orphan tag are remove in API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the association between a tag and an entry is removed, if the tag doesn’t have other entries, we can remove it. Also add more tests for that part and ensure TagControllerTest is isolated from the rest of the test suite (finally!) --- .../Controller/WallabagRestController.php | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index a0d9d4f3..cc6923a0 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -400,6 +400,8 @@ class WallabagRestController extends FOSRestController ->getRepository('WallabagCoreBundle:Entry') ->removeTag($this->getUser()->getId(), $tag); + $this->cleanOrphanTag($tag); + $json = $this->get('serializer')->serialize($tag, 'json'); return (new JsonResponse())->setJson($json); @@ -440,6 +442,8 @@ class WallabagRestController extends FOSRestController ->getRepository('WallabagCoreBundle:Entry') ->removeTags($this->getUser()->getId(), $tags); + $this->cleanOrphanTag($tags); + $json = $this->get('serializer')->serialize($tags, 'json'); return (new JsonResponse())->setJson($json); @@ -464,6 +468,8 @@ class WallabagRestController extends FOSRestController ->getRepository('WallabagCoreBundle:Entry') ->removeTag($this->getUser()->getId(), $tag); + $this->cleanOrphanTag($tag); + $json = $this->get('serializer')->serialize($tag, 'json'); return (new JsonResponse())->setJson($json); @@ -485,6 +491,28 @@ class WallabagRestController extends FOSRestController return (new JsonResponse())->setJson($json); } + /** + * Remove orphan tag in case no entries are associated to it. + * + * @param Tag|array $tags + */ + private function cleanOrphanTag($tags) + { + if (!is_array($tags)) { + $tags = [$tags]; + } + + $em = $this->getDoctrine()->getManager(); + + foreach ($tags as $tag) { + if (count($tag->getEntries()) === 0) { + $em->remove($tag); + } + } + + $em->flush(); + } + /** * Validate that the first id is equal to the second one. * If not, throw exception. It means a user try to access information from an other user. -- cgit v1.2.3 From 28bb48905a2104adad65508f51737f987dc1ad4c Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sun, 9 Oct 2016 18:41:19 +0200 Subject: Optimize the way tag list is rendered MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of retrieve all informations about entries of a tag to just count them, we’ll count them before with a fastest query. Also change the layout of the tag list in material design --- src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php') diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php index ed31c536..9997913d 100644 --- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php @@ -387,7 +387,7 @@ class WallabagRestController extends FOSRestController $tags = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Tag') - ->findAllTagsWithEntries($this->getUser()->getId()); + ->findAllTags($this->getUser()->getId()); $json = $this->get('serializer')->serialize($tags, 'json'); -- cgit v1.2.3