mirror of
https://github.com/wallabag/wallabag.git
synced 2025-01-31 07:47:28 +01:00
TagRestController: rewrite delete actions to only retrieve tags related to the user
Fixes #3815 Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
This commit is contained in:
parent
0ee9848231
commit
2a0e0a47d8
@ -46,12 +46,14 @@ class TagRestController extends WallabagRestController
|
||||
$this->validateAuthentication();
|
||||
$label = $request->get('tag', '');
|
||||
|
||||
$tag = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($label);
|
||||
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$label], $this->getUser()->getId());
|
||||
|
||||
if (empty($tag)) {
|
||||
if (empty($tags)) {
|
||||
throw $this->createNotFoundException('Tag not found');
|
||||
}
|
||||
|
||||
$tag = $tags[0];
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTag($this->getUser()->getId(), $tag);
|
||||
@ -80,15 +82,7 @@ class TagRestController extends WallabagRestController
|
||||
|
||||
$tagsLabels = $request->get('tags', '');
|
||||
|
||||
$tags = [];
|
||||
|
||||
foreach (explode(',', $tagsLabels) as $tagLabel) {
|
||||
$tagEntity = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
|
||||
|
||||
if (!empty($tagEntity)) {
|
||||
$tags[] = $tagEntity;
|
||||
}
|
||||
}
|
||||
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser(explode(',', $tagsLabels), $this->getUser()->getId());
|
||||
|
||||
if (empty($tags)) {
|
||||
throw $this->createNotFoundException('Tags not found');
|
||||
@ -120,6 +114,12 @@ class TagRestController extends WallabagRestController
|
||||
{
|
||||
$this->validateAuthentication();
|
||||
|
||||
$tagFromDb = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$tag->getLabel()], $this->getUser()->getId());
|
||||
|
||||
if (empty($tagFromDb)) {
|
||||
throw $this->createNotFoundException('Tag not found');
|
||||
}
|
||||
|
||||
$this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->removeTag($this->getUser()->getId(), $tag);
|
||||
|
@ -75,6 +75,23 @@ class TagRepository extends EntityRepository
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
public function findByLabelsAndUser($labels, $userId)
|
||||
{
|
||||
$qb = $this->getQueryBuilderByUser($userId)
|
||||
->select('t.id');
|
||||
|
||||
$ids = $qb->andWhere($qb->expr()->in('t.label', $labels))
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
|
||||
$tags = [];
|
||||
foreach ($ids as $id) {
|
||||
$tags[] = $this->find($id);
|
||||
}
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used only in test case to get a tag for our entry.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user