Evan Prodromou 81ea0f8117 Add HTMLPurifier to extlib
HTMLPurifier defangs arbitrary submitted HTML. We're using it in the
OStatus plugin, but it may be valuable for other parts of the codebase
(I think OEmbed might benefit, for example).
2010-02-20 11:35:01 -05:00

87 lines
2.1 KiB
PHP

<?php
/**
* Generic property list implementation
*/
class HTMLPurifier_PropertyList
{
/**
* Internal data-structure for properties
*/
protected $data = array();
/**
* Parent plist
*/
protected $parent;
protected $cache;
public function __construct($parent = null) {
$this->parent = $parent;
}
/**
* Recursively retrieves the value for a key
*/
public function get($name) {
if ($this->has($name)) return $this->data[$name];
// possible performance bottleneck, convert to iterative if necessary
if ($this->parent) return $this->parent->get($name);
throw new HTMLPurifier_Exception("Key '$name' not found");
}
/**
* Sets the value of a key, for this plist
*/
public function set($name, $value) {
$this->data[$name] = $value;
}
/**
* Returns true if a given key exists
*/
public function has($name) {
return array_key_exists($name, $this->data);
}
/**
* Resets a value to the value of it's parent, usually the default. If
* no value is specified, the entire plist is reset.
*/
public function reset($name = null) {
if ($name == null) $this->data = array();
else unset($this->data[$name]);
}
/**
* Squashes this property list and all of its property lists into a single
* array, and returns the array. This value is cached by default.
* @param $force If true, ignores the cache and regenerates the array.
*/
public function squash($force = false) {
if ($this->cache !== null && !$force) return $this->cache;
if ($this->parent) {
return $this->cache = array_merge($this->parent->squash($force), $this->data);
} else {
return $this->cache = $this->data;
}
}
/**
* Returns the parent plist.
*/
public function getParent() {
return $this->parent;
}
/**
* Sets the parent plist.
*/
public function setParent($plist) {
$this->parent = $plist;
}
}
// vim: et sw=4 sts=4