checkDefType($def)) return;
$key = $this->generateKey($config);
if ($this->fetchFromDrupalCache($key)) {
// already cached
return false;
}
$this->storeInDrupalCache($def, $key);
return true;
}
/**
* Unconditionally add an object to the cache, overwrites any existing object.
*/
function set($def, $config) {
if (!$this->checkDefType($def)) return;
$key = $this->generateKey($config);
$this->storeInDrupalCache($def, $key);
return true;
}
/**
* Replace an object that already exists in the cache.
*/
function replace($def, $config) {
if (!$this->checkDefType($def)) return;
$key = $this->generateKey($config);
if (!$this->fetchFromDrupalCache($key)) {
// object does not exist in cache
return false;
}
$this->storeInDrupalCache($def, $key);
return true;
}
/**
* Retrieve an object from the cache
*/
function get($config) {
$key = $this->generateKey($config);
return $this->fetchFromDrupalCache($key);
}
/**
* Delete an object from the cache
*/
function remove($config) {
$key = $this->generateKey($config);
cache_clear_all("htmlpurifier:$key", 'cache');
return true;
}
function flush($config) {
cache_clear_all("htmlpurifier:*", 'cache', true);
return true;
}
function cleanup($config) {
// TODO: This does not work with the pluggable cache system in Drupal 7,
// since it assumes a database cache is being used.
$res = db_query("SELECT cid FROM {cache} WHERE cid LIKE :cid", array(':cid' => 'htmlpurifier:%'));
foreach ($res as $row) {
$key = substr($row->cid, 13); // 13 == strlen('htmlpurifier:')
if ($this->isOld($key, $config)) {
cache_clear_all($row->cid, 'cache');
}
}
}
function fetchFromDrupalCache($key) {
$cached = cache_get("htmlpurifier:$key");
if ($cached) return unserialize($cached->data);
return false;
}
function storeInDrupalCache($def, $key) {
cache_set("htmlpurifier:$key", serialize($def), 'cache', CACHE_PERMANENT);
}
}