97 lines
2.0 KiB
PHP
97 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Kanboard\Decorator;
|
|
|
|
use Kanboard\Core\Cache\CacheInterface;
|
|
use Kanboard\Model\MetadataModel;
|
|
|
|
/**
|
|
* Class MetadataCacheDecorator
|
|
*
|
|
* @package Kanboard\Decorator
|
|
* @author Frederic Guillot
|
|
*/
|
|
class MetadataCacheDecorator
|
|
{
|
|
/**
|
|
* @var CacheInterface
|
|
*/
|
|
protected $cache;
|
|
|
|
/**
|
|
* @var MetadataModel
|
|
*/
|
|
protected $metadataModel;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $cachePrefix;
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $entityId;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param CacheInterface $cache
|
|
* @param MetadataModel $metadataModel
|
|
* @param string $cachePrefix
|
|
* @param integer $entityId
|
|
*/
|
|
public function __construct(CacheInterface $cache, MetadataModel $metadataModel, $cachePrefix, $entityId)
|
|
{
|
|
$this->cache = $cache;
|
|
$this->metadataModel = $metadataModel;
|
|
$this->cachePrefix = $cachePrefix;
|
|
$this->entityId = $entityId;
|
|
}
|
|
|
|
/**
|
|
* Get metadata value by key
|
|
*
|
|
* @param string $key
|
|
* @param mixed $default
|
|
* @return mixed
|
|
*/
|
|
public function get($key, $default)
|
|
{
|
|
$metadata = $this->cache->get($this->getCacheKey());
|
|
|
|
if ($metadata === null) {
|
|
$metadata = $this->metadataModel->getAll($this->entityId);
|
|
$this->cache->set($this->getCacheKey(), $metadata);
|
|
}
|
|
|
|
return isset($metadata[$key]) ? $metadata[$key] : $default;
|
|
}
|
|
|
|
/**
|
|
* Set new metadata value
|
|
*
|
|
* @param $key
|
|
* @param $value
|
|
*/
|
|
public function set($key, $value)
|
|
{
|
|
$this->metadataModel->save($this->entityId, array(
|
|
$key => $value,
|
|
));
|
|
|
|
$metadata = $this->metadataModel->getAll($this->entityId);
|
|
$this->cache->set($this->getCacheKey(), $metadata);
|
|
}
|
|
|
|
/**
|
|
* Get cache key
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function getCacheKey()
|
|
{
|
|
return $this->cachePrefix.$this->entityId;
|
|
}
|
|
}
|