diff options
author | Kevin Decherf <kevin@kdecherf.com> | 2018-12-29 20:42:41 +0100 |
---|---|---|
committer | Kevin Decherf <kevin@kdecherf.com> | 2018-12-30 01:34:49 +0100 |
commit | 2a0e0a47d853937702d235bdb91df0ca0e3116b6 (patch) | |
tree | 74581804eab61b64733af6083f5e6c0d201a41cb | |
parent | 0ee9848231d0a7a02fdc8e915d830ebaf6cc09c0 (diff) | |
download | wallabag-2a0e0a47d853937702d235bdb91df0ca0e3116b6.tar.gz wallabag-2a0e0a47d853937702d235bdb91df0ca0e3116b6.tar.zst wallabag-2a0e0a47d853937702d235bdb91df0ca0e3116b6.zip |
TagRestController: rewrite delete actions to only retrieve tags related to the user
Fixes #3815
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
-rw-r--r-- | src/Wallabag/ApiBundle/Controller/TagRestController.php | 22 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Repository/TagRepository.php | 17 |
2 files changed, 28 insertions, 11 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/TagRestController.php b/src/Wallabag/ApiBundle/Controller/TagRestController.php index c6d6df6a..f3498f55 100644 --- a/src/Wallabag/ApiBundle/Controller/TagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/TagRestController.php | |||
@@ -46,12 +46,14 @@ class TagRestController extends WallabagRestController | |||
46 | $this->validateAuthentication(); | 46 | $this->validateAuthentication(); |
47 | $label = $request->get('tag', ''); | 47 | $label = $request->get('tag', ''); |
48 | 48 | ||
49 | $tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label); | 49 | $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$label], $this->getUser()->getId()); |
50 | 50 | ||
51 | if (empty($tag)) { | 51 | if (empty($tags)) { |
52 | throw $this->createNotFoundException('Tag not found'); | 52 | throw $this->createNotFoundException('Tag not found'); |
53 | } | 53 | } |
54 | 54 | ||
55 | $tag = $tags[0]; | ||
56 | |||
55 | $this->getDoctrine() | 57 | $this->getDoctrine() |
56 | ->getRepository('WallabagCoreBundle:Entry') | 58 | ->getRepository('WallabagCoreBundle:Entry') |
57 | ->removeTag($this->getUser()->getId(), $tag); | 59 | ->removeTag($this->getUser()->getId(), $tag); |
@@ -80,15 +82,7 @@ class TagRestController extends WallabagRestController | |||
80 | 82 | ||
81 | $tagsLabels = $request->get('tags', ''); | 83 | $tagsLabels = $request->get('tags', ''); |
82 | 84 | ||
83 | $tags = []; | 85 | $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser(explode(',', $tagsLabels), $this->getUser()->getId()); |
84 | |||
85 | foreach (explode(',', $tagsLabels) as $tagLabel) { | ||
86 | $tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel); | ||
87 | |||
88 | if (!empty($tagEntity)) { | ||
89 | $tags[] = $tagEntity; | ||
90 | } | ||
91 | } | ||
92 | 86 | ||
93 | if (empty($tags)) { | 87 | if (empty($tags)) { |
94 | throw $this->createNotFoundException('Tags not found'); | 88 | throw $this->createNotFoundException('Tags not found'); |
@@ -120,6 +114,12 @@ class TagRestController extends WallabagRestController | |||
120 | { | 114 | { |
121 | $this->validateAuthentication(); | 115 | $this->validateAuthentication(); |
122 | 116 | ||
117 | $tagFromDb = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$tag->getLabel()], $this->getUser()->getId()); | ||
118 | |||
119 | if (empty($tagFromDb)) { | ||
120 | throw $this->createNotFoundException('Tag not found'); | ||
121 | } | ||
122 | |||
123 | $this->getDoctrine() | 123 | $this->getDoctrine() |
124 | ->getRepository('WallabagCoreBundle:Entry') | 124 | ->getRepository('WallabagCoreBundle:Entry') |
125 | ->removeTag($this->getUser()->getId(), $tag); | 125 | ->removeTag($this->getUser()->getId(), $tag); |
diff --git a/src/Wallabag/CoreBundle/Repository/TagRepository.php b/src/Wallabag/CoreBundle/Repository/TagRepository.php index bd2d9f97..8464a6a5 100644 --- a/src/Wallabag/CoreBundle/Repository/TagRepository.php +++ b/src/Wallabag/CoreBundle/Repository/TagRepository.php | |||
@@ -75,6 +75,23 @@ class TagRepository extends EntityRepository | |||
75 | ->getArrayResult(); | 75 | ->getArrayResult(); |
76 | } | 76 | } |
77 | 77 | ||
78 | public function findByLabelsAndUser($labels, $userId) | ||
79 | { | ||
80 | $qb = $this->getQueryBuilderByUser($userId) | ||
81 | ->select('t.id'); | ||
82 | |||
83 | $ids = $qb->andWhere($qb->expr()->in('t.label', $labels)) | ||
84 | ->getQuery() | ||
85 | ->getArrayResult(); | ||
86 | |||
87 | $tags = []; | ||
88 | foreach ($ids as $id) { | ||
89 | $tags[] = $this->find($id); | ||
90 | } | ||
91 | |||
92 | return $tags; | ||
93 | } | ||
94 | |||
78 | /** | 95 | /** |
79 | * Used only in test case to get a tag for our entry. | 96 | * Used only in test case to get a tag for our entry. |
80 | * | 97 | * |