mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 04:23:19 +00:00
Add cache busting via save method of collection repository
This commit is contained in:
@@ -16,4 +16,9 @@ interface CollectionRepository
|
||||
*/
|
||||
public function find($collectionId);
|
||||
|
||||
/**
|
||||
* @param \collection $collection
|
||||
* @return void
|
||||
*/
|
||||
public function save(\collection $collection);
|
||||
}
|
||||
|
@@ -47,4 +47,13 @@ class ArrayCacheCollectionRepository implements CollectionRepository
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function save(\collection $collection)
|
||||
{
|
||||
$this->collectionRepository->save($collection);
|
||||
|
||||
if ($this->collectionCache !== null) {
|
||||
$this->collectionCache[$collection->get_coll_id()] = $collection;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -55,7 +55,7 @@ final class CachedCollectionRepository implements CollectionRepository
|
||||
*/
|
||||
public function findAll()
|
||||
{
|
||||
$cacheKey = hash('sha256', $this->cacheKey . '.findAll');
|
||||
$cacheKey = hash('sha256', $this->cacheKey);
|
||||
/** @var \collection[] $collections */
|
||||
$collections = $this->cache->fetch($cacheKey);
|
||||
|
||||
@@ -86,6 +86,15 @@ final class CachedCollectionRepository implements CollectionRepository
|
||||
return null;
|
||||
}
|
||||
|
||||
public function save(\collection $collection)
|
||||
{
|
||||
$this->repository->save($collection);
|
||||
|
||||
$cacheKey = hash('sha256', $this->cacheKey);
|
||||
|
||||
$this->cache->delete($cacheKey);
|
||||
}
|
||||
|
||||
private function putInCache($key, $value)
|
||||
{
|
||||
$this->cache->save($key, $value);
|
||||
|
@@ -107,4 +107,9 @@ class DbalCollectionRepository implements CollectionRepository
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function save(\collection $collection)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
use Alchemy\Phrasea\Application;
|
||||
use Alchemy\Phrasea\Collection\CollectionRepository;
|
||||
use Alchemy\Phrasea\Collection\CollectionRepositoryRegistry;
|
||||
use Alchemy\Phrasea\Collection\Reference\CollectionReference;
|
||||
use Alchemy\Phrasea\Collection\Reference\CollectionReferenceRepository;
|
||||
@@ -49,6 +50,19 @@ class collection implements cache_cacheableInterface, ThumbnailedElement
|
||||
return $ord['ord'] ?: 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Application $app
|
||||
* @param $databoxId
|
||||
* @return CollectionRepository
|
||||
*/
|
||||
private static function getRepository(Application $app, $databoxId)
|
||||
{
|
||||
/** @var CollectionRepositoryRegistry $registry */
|
||||
$registry = $app['repo.collections-registry'];
|
||||
|
||||
return $registry->getRepositoryByDatabox($databoxId);
|
||||
}
|
||||
|
||||
public static function create(Application $app, databox $databox, appbox $appbox, $name, User $user = null)
|
||||
{
|
||||
$sbas_id = $databox->get_sbas_id();
|
||||
@@ -201,21 +215,28 @@ EOT;
|
||||
$referenceRepository = $app['repo.collection-references'];
|
||||
$reference = $referenceRepository->find($base_id);
|
||||
|
||||
if (! $reference) {
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf("Collection with base_id %s could not be found", $base_id));
|
||||
if (!$reference) {
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf(
|
||||
"Collection with base_id %s could not be found",
|
||||
$base_id
|
||||
));
|
||||
}
|
||||
|
||||
/** @var CollectionRepositoryRegistry $registry */
|
||||
$registry = $app['repo.collections-registry'];
|
||||
$repository = $registry->getRepositoryByDatabox($reference->getDataboxId());
|
||||
$repository = self::getRepository($app, $reference->getDataboxId());
|
||||
$collection = $repository->find($reference->getCollectionId());
|
||||
|
||||
if (! $collection) {
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf("Collection with base_id %s could not be found", $base_id));
|
||||
if (!$collection) {
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf(
|
||||
"Collection with base_id %s could not be found",
|
||||
$base_id
|
||||
));
|
||||
}
|
||||
|
||||
if (!$app['conf.restrictions']->isCollectionAvailable($collection)) {
|
||||
throw new Exception_Databox_CollectionNotFound('Collection `' . $collection->get_base_id() . '` is not available here.');
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf(
|
||||
'Collection `%d` is not available here.',
|
||||
$collection->get_base_id()
|
||||
));
|
||||
}
|
||||
|
||||
return $collection;
|
||||
@@ -231,9 +252,7 @@ EOT;
|
||||
{
|
||||
assert(is_int($coll_id));
|
||||
|
||||
/** @var CollectionRepositoryRegistry $registry */
|
||||
$registry = $app['repo.collections-registry'];
|
||||
$repository = $registry->getRepositoryByDatabox($databox->get_sbas_id());
|
||||
$repository = self::getRepository($app, $databox->get_sbas_id());
|
||||
$collection = $repository->find($coll_id);
|
||||
|
||||
if (!$collection) {
|
||||
@@ -246,8 +265,8 @@ EOT;
|
||||
if (!$app['conf.restrictions']->isCollectionAvailable($collection)) {
|
||||
throw new Exception_Databox_CollectionNotFound(sprintf(
|
||||
'Collection `%d` is not available here.',
|
||||
$collection->get_base_id())
|
||||
);
|
||||
$collection->get_base_id()
|
||||
));
|
||||
}
|
||||
|
||||
return $collection;
|
||||
@@ -814,6 +833,8 @@ EOT;
|
||||
|
||||
public function delete_data_from_cache($option = null)
|
||||
{
|
||||
self::getRepository($this->app, $this->reference->getDataboxId())->save($this);
|
||||
|
||||
return $this->databox->delete_data_from_cache($this->get_cache_key($option));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user