From 5a4bbcc9a76fcdf54a6af25fcf7b26c9053a0ba3 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Thu, 24 Dec 2015 15:19:50 +0100 Subject: [PATCH] Change the way to check for an existing entry The repository method return the entry found or false if nothing exists. --- .../CoreBundle/Controller/EntryController.php | 13 ++++++------- .../CoreBundle/Repository/EntryRepository.php | 14 +++++++++++--- .../CoreBundle/Resources/config/services.yml | 1 + src/Wallabag/ImportBundle/Import/PocketImport.php | 4 ++-- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 9097810c..37f7ab60 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -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); diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index 502e9da0..b8e22eb8 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php @@ -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; } } diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index c92b4eb3..96b1c931 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml @@ -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 ] diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index dd1c34ab..ef8f9eb5 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php @@ -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; } -- 2.41.0