Remove $app dependency on FeedItemRepository::isRecordInPublicFeed() method.

This commit is contained in:
Benoît Burnichon
2015-05-06 15:33:05 +02:00
parent a104ebd72c
commit 8f8030bb11
4 changed files with 18 additions and 13 deletions

View File

@@ -13,6 +13,8 @@ namespace Alchemy\Phrasea\Controller;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Authentication\ACLProvider; use Alchemy\Phrasea\Authentication\ACLProvider;
use Alchemy\Phrasea\Authentication\Authenticator; use Alchemy\Phrasea\Authentication\Authenticator;
use Alchemy\Phrasea\Model\Repositories\BasketElementRepository;
use Alchemy\Phrasea\Model\Repositories\FeedItemRepository;
use Alchemy\Phrasea\Model\Serializer\CaptionSerializer; use Alchemy\Phrasea\Model\Serializer\CaptionSerializer;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -85,15 +87,17 @@ class PermalinkController extends AbstractDelivery
/** /**
* @param \databox $databox * @param \databox $databox
* @param $token * @param string $token
* @param $record_id * @param int $record_id
* @param string $subdef * @param string $subdef
* @return \record_adapter * @return \record_adapter
*/ */
private function retrieveRecord(\databox $databox, $token, $record_id, $subdef) 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]) 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); 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'); $watermark = !$this->acl->get($this->authentication->getUser())->has_right_on_base($record->get_base_id(), 'nowatermark');
if ($watermark) { if ($watermark) {
/** @var BasketElementRepository $repository */
$repository = $this->app['repo.basket-elements']; $repository = $this->app['repo.basket-elements'];
if (count($repository->findReceivedValidationElementsByRecord($record, $this->authentication->getUser())) > 0) { if (count($repository->findReceivedValidationElementsByRecord($record, $this->authentication->getUser())) > 0) {

View File

@@ -12,6 +12,7 @@
namespace Alchemy\Phrasea\Model\Repositories; namespace Alchemy\Phrasea\Model\Repositories;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Model\Entities\FeedItem;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -26,15 +27,14 @@ class FeedItemRepository extends EntityRepository
/** /**
* Checks if a record is published in a public feed. * Checks if a record is published in a public feed.
* *
* @param Application $app * @param int $sbas_id
* @param integer $sbas_id * @param int $record_id
* @param integer $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 FROM Phraseanet:FeedItem i
JOIN i.entry e JOIN i.entry e
JOIN e.feed f JOIN e.feed f
@@ -45,7 +45,7 @@ class FeedItemRepository extends EntityRepository
$query = $this->_em->createQuery($dql); $query = $this->_em->createQuery($dql);
$query->setParameters(['sbas_id' => $sbas_id, 'record_id' => $record_id]); $query->setParameters(['sbas_id' => $sbas_id, 'record_id' => $record_id]);
return count($query->getResult()) > 0; return $query->getSingleScalarResult() > 0;
} }
/** /**

View File

@@ -246,7 +246,7 @@ class ACL implements cache_cacheableInterface
$granted = true; $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; $granted = true;
} }

View File

@@ -9,13 +9,13 @@ class FeedItemRepositoryTest extends \PhraseanetTestCase
public function testIs_record_in_public_feedInPublicFeed() public function testIs_record_in_public_feedInPublicFeed()
{ {
$record = self::$DI['record_7']; $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() public function testIs_record_in_public_feedInPrivateFeed()
{ {
$record = self::$DI['record_2']; $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() public function testLoadLatestItems()