]> 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 a6ad131ff569a3dd431cbd226d60d0a90648bc83..16ded948eedc8db07f06355f34c96507f9888409 100644 (file)
@@ -151,7 +151,22 @@ class TagController extends Controller
         $form = $this->createForm(RenameTagType::class, new Tag());
         $form->handleRequest($request);
 
+        $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true);
+
         if ($form->isSubmitted() && $form->isValid()) {
+            $newTag = new Tag();
+            $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(),
                 $tag->getId()
@@ -159,21 +174,19 @@ class TagController extends Controller
             foreach ($entries as $entry) {
                 $this->get('wallabag_core.tags_assigner')->assignTagsToEntry(
                     $entry,
-                    $form->get('label')->getData()
+                    $newTag->getLabel(),
+                    [$newTag]
                 );
                 $entry->removeTag($tag);
             }
 
-            $em = $this->getDoctrine()->getManager();
-            $em->flush();
-        }
-
-        $this->get('session')->getFlashBag()->add(
-            'notice',
-            'flashes.tag.notice.tag_renamed'
-        );
+            $this->getDoctrine()->getManager()->flush();
 
-        $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true);
+            $this->get('session')->getFlashBag()->add(
+                'notice',
+                'flashes.tag.notice.tag_renamed'
+            );
+        }
 
         return $this->redirect($redirectUrl);
     }