From 8f8030bb11cc41c75d74b23817f0504098cbf903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Wed, 6 May 2015 15:33:05 +0200 Subject: [PATCH] Remove $app dependency on FeedItemRepository::isRecordInPublicFeed() method. --- .../Phrasea/Controller/PermalinkController.php | 11 ++++++++--- .../Model/Repositories/FeedItemRepository.php | 14 +++++++------- lib/classes/ACL.php | 2 +- .../Model/Repositories/FeedItemRepositoryTest.php | 4 ++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/PermalinkController.php b/lib/Alchemy/Phrasea/Controller/PermalinkController.php index 37fd8a5cd6..150fa84930 100644 --- a/lib/Alchemy/Phrasea/Controller/PermalinkController.php +++ b/lib/Alchemy/Phrasea/Controller/PermalinkController.php @@ -13,6 +13,8 @@ namespace Alchemy\Phrasea\Controller; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Authentication\ACLProvider; use Alchemy\Phrasea\Authentication\Authenticator; +use Alchemy\Phrasea\Model\Repositories\BasketElementRepository; +use Alchemy\Phrasea\Model\Repositories\FeedItemRepository; use Alchemy\Phrasea\Model\Serializer\CaptionSerializer; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -85,15 +87,17 @@ class PermalinkController extends AbstractDelivery /** * @param \databox $databox - * @param $token - * @param $record_id + * @param string $token + * @param int $record_id * @param string $subdef * @return \record_adapter */ private function retrieveRecord(\databox $databox, $token, $record_id, $subdef) { + /** @var FeedItemRepository $feedItemsRepository */ + $feedItemsRepository = $this->app['repo.feed-items']; if (in_array($subdef, [\databox_subdef::CLASS_PREVIEW, \databox_subdef::CLASS_THUMBNAIL]) - && $this->app['repo.feed-items']->isRecordInPublicFeed($this->app, $databox->get_sbas_id(), $record_id) + && $feedItemsRepository->isRecordInPublicFeed($databox->get_sbas_id(), $record_id) ) { return $databox->get_record($record_id); } @@ -132,6 +136,7 @@ class PermalinkController extends AbstractDelivery $watermark = !$this->acl->get($this->authentication->getUser())->has_right_on_base($record->get_base_id(), 'nowatermark'); if ($watermark) { + /** @var BasketElementRepository $repository */ $repository = $this->app['repo.basket-elements']; if (count($repository->findReceivedValidationElementsByRecord($record, $this->authentication->getUser())) > 0) { diff --git a/lib/Alchemy/Phrasea/Model/Repositories/FeedItemRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/FeedItemRepository.php index 0cc6a701c6..59345d2a6d 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/FeedItemRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/FeedItemRepository.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Model\Repositories; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Model\Entities\FeedItem; use Doctrine\ORM\EntityRepository; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -26,15 +27,14 @@ class FeedItemRepository extends EntityRepository /** * Checks if a record is published in a public feed. * - * @param Application $app - * @param integer $sbas_id - * @param integer $record_id + * @param int $sbas_id + * @param int $record_id * - * @return Boolean + * @return bool */ - public function isRecordInPublicFeed(Application $app, $sbas_id, $record_id) + public function isRecordInPublicFeed($sbas_id, $record_id) { - $dql = 'SELECT i + $dql = 'SELECT COUNT(i) FROM Phraseanet:FeedItem i JOIN i.entry e JOIN e.feed f @@ -45,7 +45,7 @@ class FeedItemRepository extends EntityRepository $query = $this->_em->createQuery($dql); $query->setParameters(['sbas_id' => $sbas_id, 'record_id' => $record_id]); - return count($query->getResult()) > 0; + return $query->getSingleScalarResult() > 0; } /** diff --git a/lib/classes/ACL.php b/lib/classes/ACL.php index 52a70740db..a41834240f 100644 --- a/lib/classes/ACL.php +++ b/lib/classes/ACL.php @@ -246,7 +246,7 @@ class ACL implements cache_cacheableInterface $granted = true; } - if (false === $granted && $this->app['repo.feed-items']->isRecordInPublicFeed($this->app, $record->getDataboxId(), $record->getRecordId())) { + if (false === $granted && $this->app['repo.feed-items']->isRecordInPublicFeed($record->getDataboxId(), $record->getRecordId())) { $granted = true; } diff --git a/tests/Alchemy/Tests/Phrasea/Model/Repositories/FeedItemRepositoryTest.php b/tests/Alchemy/Tests/Phrasea/Model/Repositories/FeedItemRepositoryTest.php index 1092e4d8c1..76dca17d13 100644 --- a/tests/Alchemy/Tests/Phrasea/Model/Repositories/FeedItemRepositoryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Model/Repositories/FeedItemRepositoryTest.php @@ -9,13 +9,13 @@ class FeedItemRepositoryTest extends \PhraseanetTestCase public function testIs_record_in_public_feedInPublicFeed() { $record = self::$DI['record_7']; - $this->assertTrue(self::$DI['app']['orm.em']->getRepository('Phraseanet:FeedItem')->isRecordInPublicFeed(self::$DI['app'], $record->get_sbas_id(), $record->get_record_id())); + $this->assertTrue(self::$DI['app']['orm.em']->getRepository('Phraseanet:FeedItem')->isRecordInPublicFeed($record->get_sbas_id(), $record->get_record_id())); } public function testIs_record_in_public_feedInPrivateFeed() { $record = self::$DI['record_2']; - $this->assertFalse(self::$DI['app']['orm.em']->getRepository('Phraseanet:FeedItem')->isRecordInPublicFeed(self::$DI['app'], $record->get_sbas_id(), $record->get_record_id())); + $this->assertFalse(self::$DI['app']['orm.em']->getRepository('Phraseanet:FeedItem')->isRecordInPublicFeed($record->get_sbas_id(), $record->get_record_id())); } public function testLoadLatestItems()