diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/DefinitionCache.php')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/DefinitionCache.php | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/DefinitionCache.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/DefinitionCache.php new file mode 100644 index 00000000..d7f0bb1c --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/DefinitionCache.php | |||
@@ -0,0 +1,129 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Abstract class representing Definition cache managers that implements | ||
5 | * useful common methods and is a factory. | ||
6 | * @todo Create a separate maintenance file advanced users can use to | ||
7 | * cache their custom HTMLDefinition, which can be loaded | ||
8 | * via a configuration directive | ||
9 | * @todo Implement memcached | ||
10 | */ | ||
11 | abstract class HTMLPurifier_DefinitionCache | ||
12 | { | ||
13 | /** | ||
14 | * @type string | ||
15 | */ | ||
16 | public $type; | ||
17 | |||
18 | /** | ||
19 | * @param string $type Type of definition objects this instance of the | ||
20 | * cache will handle. | ||
21 | */ | ||
22 | public function __construct($type) | ||
23 | { | ||
24 | $this->type = $type; | ||
25 | } | ||
26 | |||
27 | /** | ||
28 | * Generates a unique identifier for a particular configuration | ||
29 | * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config | ||
30 | * @return string | ||
31 | */ | ||
32 | public function generateKey($config) | ||
33 | { | ||
34 | return $config->version . ',' . // possibly replace with function calls | ||
35 | $config->getBatchSerial($this->type) . ',' . | ||
36 | $config->get($this->type . '.DefinitionRev'); | ||
37 | } | ||
38 | |||
39 | /** | ||
40 | * Tests whether or not a key is old with respect to the configuration's | ||
41 | * version and revision number. | ||
42 | * @param string $key Key to test | ||
43 | * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config to test against | ||
44 | * @return bool | ||
45 | */ | ||
46 | public function isOld($key, $config) | ||
47 | { | ||
48 | if (substr_count($key, ',') < 2) { | ||
49 | return true; | ||
50 | } | ||
51 | list($version, $hash, $revision) = explode(',', $key, 3); | ||
52 | $compare = version_compare($version, $config->version); | ||
53 | // version mismatch, is always old | ||
54 | if ($compare != 0) { | ||
55 | return true; | ||
56 | } | ||
57 | // versions match, ids match, check revision number | ||
58 | if ($hash == $config->getBatchSerial($this->type) && | ||
59 | $revision < $config->get($this->type . '.DefinitionRev')) { | ||
60 | return true; | ||
61 | } | ||
62 | return false; | ||
63 | } | ||
64 | |||
65 | /** | ||
66 | * Checks if a definition's type jives with the cache's type | ||
67 | * @note Throws an error on failure | ||
68 | * @param HTMLPurifier_Definition $def Definition object to check | ||
69 | * @return bool true if good, false if not | ||
70 | */ | ||
71 | public function checkDefType($def) | ||
72 | { | ||
73 | if ($def->type !== $this->type) { | ||
74 | trigger_error("Cannot use definition of type {$def->type} in cache for {$this->type}"); | ||
75 | return false; | ||
76 | } | ||
77 | return true; | ||
78 | } | ||
79 | |||
80 | /** | ||
81 | * Adds a definition object to the cache | ||
82 | * @param HTMLPurifier_Definition $def | ||
83 | * @param HTMLPurifier_Config $config | ||
84 | */ | ||
85 | abstract public function add($def, $config); | ||
86 | |||
87 | /** | ||
88 | * Unconditionally saves a definition object to the cache | ||
89 | * @param HTMLPurifier_Definition $def | ||
90 | * @param HTMLPurifier_Config $config | ||
91 | */ | ||
92 | abstract public function set($def, $config); | ||
93 | |||
94 | /** | ||
95 | * Replace an object in the cache | ||
96 | * @param HTMLPurifier_Definition $def | ||
97 | * @param HTMLPurifier_Config $config | ||
98 | */ | ||
99 | abstract public function replace($def, $config); | ||
100 | |||
101 | /** | ||
102 | * Retrieves a definition object from the cache | ||
103 | * @param HTMLPurifier_Config $config | ||
104 | */ | ||
105 | abstract public function get($config); | ||
106 | |||
107 | /** | ||
108 | * Removes a definition object to the cache | ||
109 | * @param HTMLPurifier_Config $config | ||
110 | */ | ||
111 | abstract public function remove($config); | ||
112 | |||
113 | /** | ||
114 | * Clears all objects from cache | ||
115 | * @param HTMLPurifier_Config $config | ||
116 | */ | ||
117 | abstract public function flush($config); | ||
118 | |||
119 | /** | ||
120 | * Clears all expired (older version or revision) objects from cache | ||
121 | * @note Be carefuly implementing this method as flush. Flush must | ||
122 | * not interfere with other Definition types, and cleanup() | ||
123 | * should not be repeatedly called by userland code. | ||
124 | * @param HTMLPurifier_Config $config | ||
125 | */ | ||
126 | abstract public function cleanup($config); | ||
127 | } | ||
128 | |||
129 | // vim: et sw=4 sts=4 | ||