ZwiiCMS/core/class/filebase/Cache.php
2022-03-25 14:10:46 +01:00

146 lines
2.4 KiB
PHP

<?php namespace Filebase;
class Cache
{
/**
* $database
*
* \Filebase\Database
*/
protected $database;
/**
* $cache_database
*
* \Filebase\Database
*/
protected $cache_database;
/**
* $key
*
*/
protected $key;
/**
* __construct()
*
*/
public function __construct(Database $database)
{
$this->database = $database;
$this->cache_database = new \Filebase\Database([
'dir' => $this->database->getConfig()->dir.'/__cache',
'cache' => false,
'pretty' => false
]);
}
/**
* setKey()
*
* This key is used to identify the cache
* and know how to call the cache again
*
*/
public function setKey($key)
{
$this->key = md5($key);
}
/**
* getKey()
*
*/
public function getKey()
{
return $this->key;
}
/**
* flush()
*
*/
public function flush()
{
$this->cache_database->flush(true);
}
/**
* expired()
*
* @param $time (date format)
* @return bool (true/false)
*/
public function expired($time)
{
if ( (strtotime($time)+$this->database->getConfig()->cache_expires) > time() )
{
return false;
}
return true;
}
/**
* getDocuments()
*
*/
public function getDocuments($documents)
{
$d = [];
foreach($documents as $document)
{
$d[] = $this->database->get($document)->setFromCache(true);
}
return $d;
}
/**
* get()
*
*/
public function get()
{
if (!$this->getKey())
{
throw new \Exception('You must supply a cache key using setKey to get cache data.');
}
$cache_doc = $this->cache_database->get( $this->getKey() );
if (!$cache_doc->toArray())
{
return false;
}
if ( $this->expired( $cache_doc->updatedAt() ) )
{
return false;
}
return $this->getDocuments($cache_doc->toArray());
}
/**
* store()
*
*/
public function store($data)
{
if (!$this->getKey())
{
throw new \Exception('You must supply a cache key using setKey to store cache data.');
}
return $this->cache_database->get( $this->getKey() )->set($data)->save();
}
}