aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNicolas LÅ“uillet <nicolas@loeuillet.org>2016-10-08 13:31:08 +0200
committerGitHub <noreply@github.com>2016-10-08 13:31:08 +0200
commite07c25a1adb2f89c5f57656e24a054ddd3a45df7 (patch)
treece4e9757d816c5ecd5e7f1c2420b5301b7c8a137 /src
parentd9b0673dbb1138e805e039610cef893e49abe3d8 (diff)
parentac8cf632bb3a225c1b69d16e714ff60a2e988c89 (diff)
downloadwallabag-e07c25a1adb2f89c5f57656e24a054ddd3a45df7.tar.gz
wallabag-e07c25a1adb2f89c5f57656e24a054ddd3a45df7.tar.zst
wallabag-e07c25a1adb2f89c5f57656e24a054ddd3a45df7.zip
Merge pull request #2397 from wallabag/api-orphan-tags
Ensure orphan tag are remove in API
Diffstat (limited to 'src')
-rw-r--r--src/Wallabag/ApiBundle/Controller/WallabagRestController.php28
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php6
-rw-r--r--src/Wallabag/CoreBundle/Resources/config/services.yml2
3 files changed, 33 insertions, 3 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 *
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index 623a6146..c5746734 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -63,10 +63,12 @@ class TagController extends Controller
63 $entry->removeTag($tag); 63 $entry->removeTag($tag);
64 $em = $this->getDoctrine()->getManager(); 64 $em = $this->getDoctrine()->getManager();
65 $em->flush(); 65 $em->flush();
66 if (count($tag->getEntries()) == 0) { 66
67 // remove orphan tag in case no entries are associated to it
68 if (count($tag->getEntries()) === 0) {
67 $em->remove($tag); 69 $em->remove($tag);
70 $em->flush();
68 } 71 }
69 $em->flush();
70 72
71 $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer')); 73 $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
72 74
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml
index fb97454e..a4b727f4 100644
--- a/src/Wallabag/CoreBundle/Resources/config/services.yml
+++ b/src/Wallabag/CoreBundle/Resources/config/services.yml
@@ -29,7 +29,7 @@ services:
29 arguments: 29 arguments:
30 - "@doctrine" 30 - "@doctrine"
31 31
32 wallabag_core.table_prefix_subscriber: 32 wallabag_core.subscriber.table_prefix:
33 class: Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber 33 class: Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber
34 arguments: 34 arguments:
35 - "%database_table_prefix%" 35 - "%database_table_prefix%"