diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-07-03 14:18:45 -0700 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-07-03 14:18:45 -0700 |
commit | f6d847739a9149531d0649bf3d38f9e30078106a (patch) | |
tree | 7843c542a6ae5a7005504b1dfbc2689896acdafc /modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php | |
parent | 8d5900f63956d6746a78a4bd5ac0c4f8086752bc (diff) |
Update the source so the third party code passes the File Structure Test
Diffstat (limited to 'modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php')
-rw-r--r-- | modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php b/modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php new file mode 100644 index 00000000..bb03e72d --- /dev/null +++ b/modules/gallery/lib/HTMLPurifier/HTMLPurifier/DefinitionCache.php @@ -0,0 +1,108 @@ +<?php defined("SYSPATH") or die("No direct script access."); + +/** + * Abstract class representing Definition cache managers that implements + * useful common methods and is a factory. + * @todo Create a separate maintenance file advanced users can use to + * cache their custom HTMLDefinition, which can be loaded + * via a configuration directive + * @todo Implement memcached + */ +abstract class HTMLPurifier_DefinitionCache +{ + + public $type; + + /** + * @param $name Type of definition objects this instance of the + * cache will handle. + */ + public function __construct($type) { + $this->type = $type; + } + + /** + * Generates a unique identifier for a particular configuration + * @param Instance of HTMLPurifier_Config + */ + public function generateKey($config) { + return $config->version . ',' . // possibly replace with function calls + $config->getBatchSerial($this->type) . ',' . + $config->get($this->type . '.DefinitionRev'); + } + + /** + * Tests whether or not a key is old with respect to the configuration's + * version and revision number. + * @param $key Key to test + * @param $config Instance of HTMLPurifier_Config to test against + */ + public function isOld($key, $config) { + if (substr_count($key, ',') < 2) return true; + list($version, $hash, $revision) = explode(',', $key, 3); + $compare = version_compare($version, $config->version); + // version mismatch, is always old + if ($compare != 0) return true; + // versions match, ids match, check revision number + if ( + $hash == $config->getBatchSerial($this->type) && + $revision < $config->get($this->type . '.DefinitionRev') + ) return true; + return false; + } + + /** + * Checks if a definition's type jives with the cache's type + * @note Throws an error on failure + * @param $def Definition object to check + * @return Boolean true if good, false if not + */ + public function checkDefType($def) { + if ($def->type !== $this->type) { + trigger_error("Cannot use definition of type {$def->type} in cache for {$this->type}"); + return false; + } + return true; + } + + /** + * Adds a definition object to the cache + */ + abstract public function add($def, $config); + + /** + * Unconditionally saves a definition object to the cache + */ + abstract public function set($def, $config); + + /** + * Replace an object in the cache + */ + abstract public function replace($def, $config); + + /** + * Retrieves a definition object from the cache + */ + abstract public function get($config); + + /** + * Removes a definition object to the cache + */ + abstract public function remove($config); + + /** + * Clears all objects from cache + */ + abstract public function flush($config); + + /** + * Clears all expired (older version or revision) objects from cache + * @note Be carefuly implementing this method as flush. Flush must + * not interfere with other Definition types, and cleanup() + * should not be repeatedly called by userland code. + */ + abstract public function cleanup($config); + +} + +// vim: et sw=4 sts=4 |