summaryrefslogtreecommitdiff
path: root/lib/htmlpurifier/library/HTMLPurifier/Context.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/library/HTMLPurifier/Context.php')
-rw-r--r--lib/htmlpurifier/library/HTMLPurifier/Context.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/lib/htmlpurifier/library/HTMLPurifier/Context.php b/lib/htmlpurifier/library/HTMLPurifier/Context.php
new file mode 100644
index 000000000..9ddf0c547
--- /dev/null
+++ b/lib/htmlpurifier/library/HTMLPurifier/Context.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * Registry object that contains information about the current context.
+ * @warning Is a bit buggy when variables are set to null: it thinks
+ * they don't exist! So use false instead, please.
+ * @note Since the variables Context deals with may not be objects,
+ * references are very important here! Do not remove!
+ */
+class HTMLPurifier_Context
+{
+
+ /**
+ * Private array that stores the references.
+ */
+ private $_storage = array();
+
+ /**
+ * Registers a variable into the context.
+ * @param $name String name
+ * @param $ref Reference to variable to be registered
+ */
+ public function register($name, &$ref) {
+ if (isset($this->_storage[$name])) {
+ trigger_error("Name $name produces collision, cannot re-register",
+ E_USER_ERROR);
+ return;
+ }
+ $this->_storage[$name] =& $ref;
+ }
+
+ /**
+ * Retrieves a variable reference from the context.
+ * @param $name String name
+ * @param $ignore_error Boolean whether or not to ignore error
+ */
+ public function &get($name, $ignore_error = false) {
+ if (!isset($this->_storage[$name])) {
+ if (!$ignore_error) {
+ trigger_error("Attempted to retrieve non-existent variable $name",
+ E_USER_ERROR);
+ }
+ $var = null; // so we can return by reference
+ return $var;
+ }
+ return $this->_storage[$name];
+ }
+
+ /**
+ * Destorys a variable in the context.
+ * @param $name String name
+ */
+ public function destroy($name) {
+ if (!isset($this->_storage[$name])) {
+ trigger_error("Attempted to destroy non-existent variable $name",
+ E_USER_ERROR);
+ return;
+ }
+ unset($this->_storage[$name]);
+ }
+
+ /**
+ * Checks whether or not the variable exists.
+ * @param $name String name
+ */
+ public function exists($name) {
+ return isset($this->_storage[$name]);
+ }
+
+ /**
+ * Loads a series of variables from an associative array
+ * @param $context_array Assoc array of variables to load
+ */
+ public function loadArray($context_array) {
+ foreach ($context_array as $key => $discard) {
+ $this->register($key, $context_array[$key]);
+ }
+ }
+
+}
+
+// vim: et sw=4 sts=4