forked from GNUsocial/gnu-social
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).
87 lines
2.1 KiB
PHP
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
|