2017-12-20 22:24:39 +01:00
|
|
|
<?php
|
|
|
|
|
2018-07-03 01:23:27 +02:00
|
|
|
namespace SilverStripe\TextExtraction\Cache\FileTextCache;
|
2017-12-20 22:24:39 +01:00
|
|
|
|
2018-07-03 01:23:27 +02:00
|
|
|
use Psr\SimpleCache\CacheInterface;
|
|
|
|
use SilverStripe\Assets\File;
|
|
|
|
use SilverStripe\Core\Config\Configurable;
|
|
|
|
use SilverStripe\Core\Flushable;
|
|
|
|
use SilverStripe\Core\Injector\Injector;
|
|
|
|
use SilverStripe\TextExtraction\Cache\FileTextCache;
|
2017-12-20 22:24:39 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Uses SS_Cache with a lifetime to cache extracted content
|
|
|
|
*/
|
2018-07-03 01:23:27 +02:00
|
|
|
class Cache implements FileTextCache, Flushable
|
2017-12-20 22:24:39 +01:00
|
|
|
{
|
2018-07-03 01:23:27 +02:00
|
|
|
use Configurable;
|
|
|
|
|
2017-12-20 22:24:39 +01:00
|
|
|
/**
|
|
|
|
* Lifetime of cache in seconds
|
|
|
|
* Null is indefinite
|
|
|
|
*
|
|
|
|
* @var int|null
|
|
|
|
* @config
|
|
|
|
*/
|
|
|
|
private static $lifetime = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return CacheInterface
|
|
|
|
*/
|
|
|
|
protected static function get_cache()
|
|
|
|
{
|
|
|
|
$for = sprintf('%s.%s', CacheInterface::class, 'FileTextCache_Cache');
|
|
|
|
|
|
|
|
return Injector::inst()->get($for);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param File $file
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
protected function getKey(File $file)
|
|
|
|
{
|
|
|
|
return md5($file->getFilename());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param File $file
|
2018-07-03 01:23:27 +02:00
|
|
|
* @return mixed
|
2017-12-20 22:24:39 +01:00
|
|
|
*/
|
|
|
|
public function load(File $file)
|
|
|
|
{
|
|
|
|
$key = $this->getKey($file);
|
|
|
|
$cache = self::get_cache();
|
|
|
|
|
|
|
|
return $cache->get($key);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param File $file
|
|
|
|
* @param string $content
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function save(File $file, $content)
|
|
|
|
{
|
2018-07-03 01:23:27 +02:00
|
|
|
$lifetime = $this->config()->get('lifetime') ?: 3600;
|
2017-12-20 22:24:39 +01:00
|
|
|
$key = $this->getKey($file);
|
|
|
|
$cache = self::get_cache();
|
|
|
|
|
|
|
|
return $cache->set($key, $content, $lifetime);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public static function flush()
|
|
|
|
{
|
|
|
|
$cache = self::get_cache();
|
|
|
|
$cache->clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Alias for $this->flush()
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public static function clear()
|
|
|
|
{
|
|
|
|
$cache = self::get_cache();
|
|
|
|
$cache->clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param File $file
|
2018-07-03 01:23:27 +02:00
|
|
|
* @return bool
|
2017-12-20 22:24:39 +01:00
|
|
|
*/
|
|
|
|
public function invalidate(File $file)
|
|
|
|
{
|
|
|
|
$key = $this->getKey($file);
|
|
|
|
$cache = self::get_cache();
|
|
|
|
|
|
|
|
return $cache->delete($key);
|
|
|
|
}
|
|
|
|
}
|