diff options
Diffstat (limited to 'src/Wallabag/ApiBundle/Controller/WallabagRestController.php')
-rw-r--r-- | src/Wallabag/ApiBundle/Controller/WallabagRestController.php | 28 |
1 files changed, 28 insertions, 0 deletions
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 | |||
400 | ->getRepository('WallabagCoreBundle:Entry') | 400 | ->getRepository('WallabagCoreBundle:Entry') |
401 | ->removeTag($this->getUser()->getId(), $tag); | 401 | ->removeTag($this->getUser()->getId(), $tag); |
402 | 402 | ||
403 | $this->cleanOrphanTag($tag); | ||
404 | |||
403 | $json = $this->get('serializer')->serialize($tag, 'json'); | 405 | $json = $this->get('serializer')->serialize($tag, 'json'); |
404 | 406 | ||
405 | return (new JsonResponse())->setJson($json); | 407 | return (new JsonResponse())->setJson($json); |
@@ -440,6 +442,8 @@ class WallabagRestController extends FOSRestController | |||
440 | ->getRepository('WallabagCoreBundle:Entry') | 442 | ->getRepository('WallabagCoreBundle:Entry') |
441 | ->removeTags($this->getUser()->getId(), $tags); | 443 | ->removeTags($this->getUser()->getId(), $tags); |
442 | 444 | ||
445 | $this->cleanOrphanTag($tags); | ||
446 | |||
443 | $json = $this->get('serializer')->serialize($tags, 'json'); | 447 | $json = $this->get('serializer')->serialize($tags, 'json'); |
444 | 448 | ||
445 | return (new JsonResponse())->setJson($json); | 449 | return (new JsonResponse())->setJson($json); |
@@ -464,6 +468,8 @@ class WallabagRestController extends FOSRestController | |||
464 | ->getRepository('WallabagCoreBundle:Entry') | 468 | ->getRepository('WallabagCoreBundle:Entry') |
465 | ->removeTag($this->getUser()->getId(), $tag); | 469 | ->removeTag($this->getUser()->getId(), $tag); |
466 | 470 | ||
471 | $this->cleanOrphanTag($tag); | ||
472 | |||
467 | $json = $this->get('serializer')->serialize($tag, 'json'); | 473 | $json = $this->get('serializer')->serialize($tag, 'json'); |
468 | 474 | ||
469 | return (new JsonResponse())->setJson($json); | 475 | return (new JsonResponse())->setJson($json); |
@@ -486,6 +492,28 @@ class WallabagRestController extends FOSRestController | |||
486 | } | 492 | } |
487 | 493 | ||
488 | /** | 494 | /** |
495 | * Remove orphan tag in case no entries are associated to it. | ||
496 | * | ||
497 | * @param Tag|array $tags | ||
498 | */ | ||
499 | private function cleanOrphanTag($tags) | ||
500 | { | ||
501 | if (!is_array($tags)) { | ||
502 | $tags = [$tags]; | ||
503 | } | ||
504 | |||
505 | $em = $this->getDoctrine()->getManager(); | ||
506 | |||
507 | foreach ($tags as $tag) { | ||
508 | if (count($tag->getEntries()) === 0) { | ||
509 | $em->remove($tag); | ||
510 | } | ||
511 | } | ||
512 | |||
513 | $em->flush(); | ||
514 | } | ||
515 | |||
516 | /** | ||
489 | * Validate that the first id is equal to the second one. | 517 | * Validate that the first id is equal to the second one. |
490 | * If not, throw exception. It means a user try to access information from an other user. | 518 | * If not, throw exception. It means a user try to access information from an other user. |
491 | * | 519 | * |