forked from ZwiiCMS-Team/ZwiiCMS
129 lines
2.6 KiB
PHP
129 lines
2.6 KiB
PHP
|
<?php
|
||
|
|
||
|
|
||
|
namespace SleekDB\Classes;
|
||
|
|
||
|
|
||
|
use SleekDB\Cache;
|
||
|
use SleekDB\Exceptions\IOException;
|
||
|
use SleekDB\QueryBuilder;
|
||
|
|
||
|
/**
|
||
|
* Class CacheHandler
|
||
|
* Bridge between Query and Cache
|
||
|
*/
|
||
|
class CacheHandler
|
||
|
{
|
||
|
/**
|
||
|
* @var Cache
|
||
|
*/
|
||
|
protected $cache;
|
||
|
|
||
|
protected $cacheTokenArray;
|
||
|
protected $regenerateCache;
|
||
|
protected $useCache;
|
||
|
|
||
|
/**
|
||
|
* CacheHandler constructor.
|
||
|
* @param string $storePath
|
||
|
* @param QueryBuilder $queryBuilder
|
||
|
*/
|
||
|
public function __construct(string $storePath, QueryBuilder $queryBuilder)
|
||
|
{
|
||
|
$this->cacheTokenArray = $queryBuilder->_getCacheTokenArray();
|
||
|
|
||
|
$queryBuilderProperties = $queryBuilder->_getConditionProperties();
|
||
|
$this->useCache = $queryBuilderProperties["useCache"];
|
||
|
$this->regenerateCache = $queryBuilderProperties["regenerateCache"];
|
||
|
|
||
|
$this->cache = new Cache($storePath, $this->_getCacheTokenArray(), $queryBuilderProperties["cacheLifetime"]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return Cache
|
||
|
*/
|
||
|
public function getCache(): Cache
|
||
|
{
|
||
|
return $this->cache;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get results from cache
|
||
|
* @return array|null
|
||
|
* @throws IOException
|
||
|
*/
|
||
|
public function getCacheContent($getOneDocument)
|
||
|
{
|
||
|
if($this->getUseCache() !== true){
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
$this->updateCacheTokenArray(['oneDocument' => $getOneDocument]);
|
||
|
|
||
|
if($this->regenerateCache === true) {
|
||
|
$this->getCache()->delete();
|
||
|
}
|
||
|
|
||
|
$cacheResults = $this->getCache()->get();
|
||
|
if(is_array($cacheResults)) {
|
||
|
return $cacheResults;
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add content to cache
|
||
|
* @param array $results
|
||
|
* @throws IOException
|
||
|
*/
|
||
|
public function setCacheContent(array $results)
|
||
|
{
|
||
|
if($this->getUseCache() === true){
|
||
|
$this->getCache()->set($results);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete all cache files that have no lifetime.
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function deleteAllWithNoLifetime(): bool
|
||
|
{
|
||
|
return $this->getCache()->deleteAllWithNoLifetime();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns a reference to the array used for cache token generation
|
||
|
* @return array
|
||
|
*/
|
||
|
public function &_getCacheTokenArray(): array
|
||
|
{
|
||
|
return $this->cacheTokenArray;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $tokenUpdate
|
||
|
*/
|
||
|
private function updateCacheTokenArray(array $tokenUpdate)
|
||
|
{
|
||
|
if(empty($tokenUpdate)) {
|
||
|
return;
|
||
|
}
|
||
|
$cacheTokenArray = $this->_getCacheTokenArray();
|
||
|
foreach ($tokenUpdate as $key => $value){
|
||
|
$cacheTokenArray[$key] = $value;
|
||
|
}
|
||
|
$this->cacheTokenArray = $cacheTokenArray;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Status if cache is used or not
|
||
|
* @return bool
|
||
|
*/
|
||
|
private function getUseCache(): bool
|
||
|
{
|
||
|
return $this->useCache;
|
||
|
}
|
||
|
|
||
|
}
|