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') 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') 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') 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