]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Controller/TagController.php
TagController: support merging labels when renaming one with label of another
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Controller / TagController.php
index f7b78f5d3bea3354726ccc5ad3fc491f7dd764db..16ded948eedc8db07f06355f34c96507f9888409 100644 (file)
@@ -151,13 +151,21 @@ class TagController extends Controller
         $form = $this->createForm(RenameTagType::class, new Tag());
         $form->handleRequest($request);
 
-        if ($form->isSubmitted()
-            && $form->isValid()
-            && $form->get('label')->getData() !== $tag->getLabel()
-           ) {
-            $newTagLabel = $form->get('label')->getData();
+        $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true);
+
+        if ($form->isSubmitted() && $form->isValid()) {
             $newTag = new Tag();
-            $newTag->setLabel($newTagLabel);
+            $newTag->setLabel($form->get('label')->getData());
+
+            if ($newTag->getLabel() === $tag->getLabel()) {
+                return $this->redirect($redirectUrl);
+            }
+
+            $tagFromRepo = $this->get('wallabag_core.tag_repository')->findOneByLabel($newTag->getLabel());
+
+            if (null !== $tagFromRepo) {
+                $newTag = $tagFromRepo;
+            }
 
             $entries = $this->get('wallabag_core.entry_repository')->findAllByTagId(
                 $this->getUser()->getId(),
@@ -166,14 +174,13 @@ class TagController extends Controller
             foreach ($entries as $entry) {
                 $this->get('wallabag_core.tags_assigner')->assignTagsToEntry(
                     $entry,
-                    $newTagLabel,
+                    $newTag->getLabel(),
                     [$newTag]
                 );
                 $entry->removeTag($tag);
             }
 
-            $em = $this->getDoctrine()->getManager();
-            $em->flush();
+            $this->getDoctrine()->getManager()->flush();
 
             $this->get('session')->getFlashBag()->add(
                 'notice',
@@ -181,8 +188,6 @@ class TagController extends Controller
             );
         }
 
-        $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true);
-
         return $this->redirect($redirectUrl);
     }
 }