]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Change the way to check for an existing entry
authorJeremy Benoist <jeremy.benoist@gmail.com>
Thu, 24 Dec 2015 14:19:50 +0000 (15:19 +0100)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Sat, 2 Jan 2016 22:27:41 +0000 (23:27 +0100)
The repository method return the entry found or false if nothing exists.

src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php
src/Wallabag/CoreBundle/Resources/config/services.yml
src/Wallabag/ImportBundle/Import/PocketImport.php

index 9097810c22ff4dd3a88f3e8edba3f95d67fda4bf..37f7ab60a6822df11733d6d5366ecde021b4d289 100644 (file)
@@ -41,7 +41,6 @@ class EntryController extends Controller
      */
     public function addEntryFormAction(Request $request)
     {
-        $em = $this->getDoctrine()->getManager();
         $entry = new Entry($this->getUser());
 
         $form = $this->createForm(new NewEntryType(), $entry);
@@ -49,17 +48,17 @@ class EntryController extends Controller
         $form->handleRequest($request);
 
         if ($form->isValid()) {
-            $existingEntry = $em
-                ->getRepository('WallabagCoreBundle:Entry')
-                ->findOneByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
+            // check for existing entry, if it exists, redirect to it with a message
+            $existingEntry = $this->get('wallabag_core.entry_repository')
+                ->existByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
 
-            if (count($existingEntry) > 0) {
+            if (false !== $existingEntry) {
                 $this->get('session')->getFlashBag()->add(
                     'notice',
-                    'Entry already saved on '.$existingEntry[0]->getCreatedAt()->format('d-m-Y')
+                    'Entry already saved on '.$existingEntry['createdAt']->format('d-m-Y')
                 );
 
-                return $this->redirect($this->generateUrl('view', array('id' => $existingEntry[0]->getId())));
+                return $this->redirect($this->generateUrl('view', array('id' => $existingEntry['id'])));
             }
 
             $this->updateEntry($entry);
index 502e9da05c0ee459dbe475630ff36bbdafeea7d1..b8e22eb833a4bea43150eb2c660cac900a4207ff 100644 (file)
@@ -226,18 +226,26 @@ class EntryRepository extends EntityRepository
 
     /**
      * Find an entry by its url and its owner.
+     * If it exists, return the entry otherwise return false.
      *
      * @param $url
      * @param $userId
      *
-     * @return array
+     * @return array|bool
      */
-    public function findOneByUrlAndUserId($url, $userId)
+    public function existByUrlAndUserId($url, $userId)
     {
-        return $this->createQueryBuilder('e')
+        $res = $this->createQueryBuilder('e')
+            ->select('e.id, e.createdAt')
             ->where('e.url = :url')->setParameter('url', $url)
             ->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
             ->getQuery()
             ->getResult();
+
+        if (count($res) > 1) {
+            return next($res);
+        }
+
+        return false;
     }
 }
index c92b4eb37c843d49ca5ec12b1b68d08dffd7cfc4..96b1c931339eb37760a6eb04cbd114c317d42f8d 100644 (file)
@@ -63,6 +63,7 @@ services:
             - @wallabag_core.tag_repository
             - @wallabag_core.entry_repository
 
+    # repository as a service
     wallabag_core.entry_repository:
         class: Wallabag\CoreBundle\Repository\EntryRepository
         factory: [ @doctrine.orm.default_entity_manager, getRepository ]
index dd1c34abcba9179486c5e55e811289df00a326a8..ef8f9eb57bd2ed35542eefa6c73d713330d000ec 100644 (file)
@@ -117,9 +117,9 @@ class PocketImport implements ImportInterface
 
             $existingEntry = $this->em
                 ->getRepository('WallabagCoreBundle:Entry')
-                ->findOneByUrlAndUserId($url, $this->user->getId());
+                ->existByUrlAndUserId($url, $this->user->getId());
 
-            if (count($existingEntry) > 0) {
+            if (false !== $existingEntry) {
                 ++$this->skippedEntries;
                 continue;
             }