From 39a64fd5f2d5c3fe9929e6c519618c840d5b9e03 Mon Sep 17 00:00:00 2001
From: robocoder <anthon.pang@gmail.com>
Date: Mon, 5 Sep 2011 03:08:31 +0000
Subject: [PATCH] remove Inspekt; sorry...last commit was not from my usual
 workspace

git-svn-id: http://dev.piwik.org/svn/trunk@5127 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 LEGALNOTICE                       |    4 -
 libs/Inspekt.php                  | 1244 -----------------------------
 libs/Inspekt/AccessorAbstract.php |  104 ---
 libs/Inspekt/Cage.php             | 1086 -------------------------
 libs/Inspekt/Cage/Session.php     |   66 --
 libs/Inspekt/CageTest.php         |  742 -----------------
 libs/Inspekt/Error.php            |   38 -
 libs/Inspekt/Supercage.php        |  130 ---
 8 files changed, 3414 deletions(-)
 delete mode 100644 libs/Inspekt.php
 delete mode 100644 libs/Inspekt/AccessorAbstract.php
 delete mode 100644 libs/Inspekt/Cage.php
 delete mode 100644 libs/Inspekt/Cage/Session.php
 delete mode 100644 libs/Inspekt/CageTest.php
 delete mode 100644 libs/Inspekt/Error.php
 delete mode 100644 libs/Inspekt/Supercage.php

diff --git a/LEGALNOTICE b/LEGALNOTICE
index 2173121f04..a0f275b753 100644
--- a/LEGALNOTICE
+++ b/LEGALNOTICE
@@ -186,10 +186,6 @@ THIRD-PARTY COMPONENTS AND LIBRARIES
 	Link:  http://www.phcomp.co.uk/tmp/Smarty.phps
 	License:  New BSD
 
-	Name:  Inspekt
-	Link:  http://inspekt.org/
-	License:  New BSD
-
 	Name:  PclZip
 	Link:  http://www.phpconcept.net/pclzip/
 	License:  LGPL
diff --git a/libs/Inspekt.php b/libs/Inspekt.php
deleted file mode 100644
index d76ef9d85b..0000000000
--- a/libs/Inspekt.php
+++ /dev/null
@@ -1,1244 +0,0 @@
-<?php
-/**
- * Inspekt - main source file
- *
- * @author Chris Shiflett <chris@shiflett.org>
- * @author Ed Finkler <coj@funkatron.com>
- *
- * @package Inspekt
- */
-
-/**
- * Inspekt_Error
- */
-require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Inspekt/Error.php');
-
-/**
- * Inspekt_Cage
- */
-require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Inspekt/Cage.php');
-
-/**
- * Inspekt_Cage_Session
- */
-//require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Inspekt/Cage/Session.php');
-
-/**
- * Inspekt_Supercage
- */
-require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Inspekt/Supercage.php');
-
-
-/**
- * Options for isHostname() that specify which types of hostnames
- * to allow.
- *
- * HOST_ALLOW_DNS:   Allows Internet domain names (e.g.,
- *                   example.com).
- */
-define('ISPK_HOST_ALLOW_DNS', 1);
-
-/**
- * Options for isHostname() that specify which types of hostnames
- * to allow.
- *
- * HOST_ALLOW_IP:    Allows IP addresses.
- */
-define('ISPK_HOST_ALLOW_IP', 2);
-
-/**
- * Options for isHostname() that specify which types of hostnames
- * to allow.
- *
- * HOST_ALLOW_LOCAL: Allows local network names (e.g., localhost,
- *                   www.localdomain) and Internet domain names.
- */
-define('ISPK_HOST_ALLOW_LOCAL', 4);
-
-/**
- * Options for isHostname() that specify which types of hostnames
- * to allow.
- *
- * HOST_ALLOW_ALL:   Allows all of the above types of hostnames.
- */
-define('ISPK_HOST_ALLOW_ALL', 7);
-
-/**
- * Options for isUri that specify which types of URIs to allow.
- *
- * URI_ALLOW_COMMON: Allow only "common" hostnames: http, https, ftp
- */
-define('ISPK_URI_ALLOW_COMMON', 1);
-
-/**
- * @package    Inspekt
- */
-class Inspekt
-{
-    protected static $useFilterExtension = true;
-
-    /**
-     * regex used to define what we're calling a valid domain name
-     */
-    const VALID_DNS_REGEX = '/^(?:[^\W_]((?:[^\W_]|-){0,61}[^\W_])?\.)+[a-zA-Z]{2,6}\.?$/';
-    /**
-     * regex used to define what we're calling a valid email
-     *
-     * we're taking a "match 99%" approach here, rather than a strict
-     * interpretation of the RFC.
-     *
-     * @see http://www.regular-expressions.info/email.html
-     */
-    const VALID_EMAIL_REGEX = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/';
-    /**
-     * regex used to validate a US postal (zip) code, ZIP or ZIP+4 allowed
-     */
-    const VALID_POSTAL_CODE_REGEX = '/(^\d{5}$)|(^\d{5}-\d{4}$)/';
-    /**
-     * Returns the $_SERVER data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     *
-     * @assert()
-     */
-    static public function makeServerCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_SERVER, $config_file, '_SERVER', $strict);
-        }
-        $GLOBALS['HTTP_SERVER_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_GET data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     */
-    static public function makeGetCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_GET, $config_file, '_GET', $strict);
-        }
-        $GLOBALS['HTTP_GET_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_POST data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     */
-    static public function makePostCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_POST, $config_file, '_POST', $strict);
-        }
-        $GLOBALS['HTTP_POST_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_COOKIE data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     */
-    static public function makeCookieCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_COOKIE, $config_file, '_COOKIE', $strict);
-        }
-        $GLOBALS['HTTP_COOKIE_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_ENV data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     */
-    static public function makeEnvCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_ENV, $config_file, '_ENV', $strict);
-        }
-        $GLOBALS['HTTP_ENV_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_FILES data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     */
-    static public function makeFilesCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage::Factory($_FILES, $config_file, '_FILES', $strict);
-        }
-        $GLOBALS['HTTP_POST_FILES'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns the $_SESSION data wrapped in an Inspekt_Cage object
-     *
-     * This utilizes a singleton pattern to get around scoping issues
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal array
-     * @return Inspekt_Cage
-     * @deprecated
-     */
-    static public function makeSessionCage($config_file = null, $strict = true)
-    {
-        Inspekt_Error::raiseError('makeSessionCage is disabled in this version', E_USER_ERROR);
-
-        /**
-         * @staticvar $_instance
-         */
-        static $_instance;
-
-        if (!isset($_SESSION)) {
-            return null;
-        }
-
-        if (!isset($_instance)) {
-            $_instance = Inspekt_Cage_Session::Factory($_SESSION, $config_file, '_SESSION', $strict);
-        }
-        $GLOBALS['HTTP_SESSION_VARS'] = null;
-        return $_instance;
-    }
-
-    /**
-     * Returns a Supercage object, which wraps ALL input superglobals
-     *
-     * @param string  $config_file
-     * @param boolean $strict whether or not to nullify the superglobal
-     * @return Inspekt_Supercage
-     */
-    static public function makeSuperCage($config_file = null, $strict = true)
-    {
-        /**
-         * @staticvar $_instance
-         */
-        static $_scinstance;
-
-        if (!isset($_scinstance)) {
-            $_scinstance = Inspekt_Supercage::Factory($config_file, $strict);
-        }
-        return $_scinstance;
-    }
-
-    /**
-     * Sets and/or retrieves whether we should use the PHP filter extensions where possible
-     * If a param is passed, it will set the state in addition to returning it
-     *
-     * We use this method of storing in a static class property so that we can access the value outside of class instances
-     *
-     * @param boolean $state optional
-     * @return boolean
-     */
-    static public function useFilterExt($state = null)
-    {
-        if (isset($state)) {
-            Inspekt::$useFilterExtension = (bool) $state;
-        }
-        return Inspekt::$useFilterExtension;
-    }
-
-    /**
-     * Recursively walks an array and applies a given filter method to
-     * every value in the array.
-     *
-     * This should be considered a "protected" method, and not be called
-     * outside of the class
-     *
-     * @param array|ArrayObject $input
-     * @param string $inspektor  The name of a static filtering method, like get* or no*
-     * @return array
-     */
-    static protected function _walkArray($input, $method, $classname = null)
-    {
-        if (!isset($classname)) {
-            $classname = __CLASS__;
-        }
-
-        if (!self::isArrayOrArrayObject($input) ) {
-            Inspekt_Error::raiseError('$input must be an array or ArrayObject', E_USER_ERROR);
-            return false;
-        }
-
-        if (!is_callable(array($classname, $method))) {
-            Inspekt_Error::raiseError('Inspektor ' . $classname . '::' . $method . ' is invalid', E_USER_ERROR);
-            return false;
-        }
-
-        foreach ($input as $key => $val) {
-            if (is_array($val)) {
-                $input[$key]=self::_walkArray($val, $method, $classname);
-            } else {
-                $val = call_user_func(array($classname, $method), $val);
-                $input[$key] = $val;
-            }
-        }
-        return $input;
-    }
-
-    /**
-     * Checks to see if this is an ArrayObject
-     * @param mixed
-     * @return boolean
-     * @deprecated
-     * @link http://php.net/arrayobject
-     */
-    static public function isArrayObject($obj)
-    {
-        $is = false;
-        //$is = (is_object($obj) && get_class($obj) === 'ArrayObject');
-        $is = $obj instanceof ArrayObject;
-        return $is;
-    }
-
-    /**
-     * Checks to see if this is an array or an ArrayObject
-     * @param mixed
-     * @return boolean
-     * @link http://php.net/arrayobject
-     * @link http://php.net/array
-     */
-    static public function isArrayOrArrayObject($arr)
-    {
-        $is = false;
-        $is = $arr instanceof ArrayObject || is_array($arr);
-        return $is;
-    }
-
-    /**
-     * Converts an array into an ArrayObject. We use ArrayObjects when walking arrays in Inspekt
-     * @param array
-     * @return ArrayObject
-     */
-    static public function convertArrayToArrayObject(&$arr)
-    {
-        foreach ($arr as $key => $value) {
-            if (is_array($value)) {
-                $value = new ArrayObject($value);
-                $arr[$key] = $value;
-                //echo $key." is an array\n";
-                Inspekt::convertArrayToArrayObject($arr[$key]);
-            }
-        }
-
-        return new ArrayObject($arr);
-    }
-
-    /**
-     * Returns only the alphabetic characters in value.
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     */
-    static public function getAlpha($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getAlpha');
-        } else {
-            return preg_replace('/[^[:alpha:]]/', '', $value);
-        }
-    }
-
-    /**
-     * Returns only the alphabetic characters and digits in value.
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     *
-     * @assert('1)@*(&UR)HQ)W(*(HG))') === '1URHQWHG'
-     */
-    static public function getAlnum($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getAlnum');
-        } else {
-            return preg_replace('/[^[:alnum:]]/', '', $value);
-        }
-    }
-
-    /**
-     * Returns only the digits in value.
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     *
-     * @assert('1)@*(&UR)HQ)56W(*(HG))') === '156'
-     */
-    static public function getDigits($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getDigits');
-        } else {
-            return preg_replace('/[^[:digit:]]/', '', $value);
-        }
-    }
-
-    /**
-     * Returns dirname(value).
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     *
-     * @assert('/usr/lib/php/Pear.php') === '/usr/lib/php'
-     */
-    static public function getDir($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getDir');
-        } else {
-            return dirname($value);
-        }
-    }
-
-    /**
-     * Returns (int) value.
-     *
-     * @param mixed $value
-     * @return int
-     *
-     * @tag filter
-     *
-     * @assert('1)45@*(&UR)HQ)W.0000(*(HG))') === 1
-     * @assert('A1)45@*(&UR)HQ)W.0000(*(HG))') === 0
-     */
-    static public function getInt($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getInt');
-        } else {
-            return (int) $value;
-        }
-    }
-
-    /**
-     * Returns realpath(value).
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     */
-    static public function getPath($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getPath');
-        } else {
-            return realpath($value);
-        }
-    }
-
-    /**
-     * Returns the value encoded as ROT13 (or decoded, if already was ROT13)
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @link http://php.net/manual/en/function.str-rot13.php
-     */
-    static public function getROT13($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'getROT13');
-        } else {
-            return str_rot13($value);
-        }
-    }
-
-    /**
-     * Returns true if every character is alphabetic or a digit,
-     * false otherwise.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert('NCOFWIERNVOWIEBHV12047057y0650ytg0314') === true
-     * @assert('NCOFWIERNVOWIEBHV2@12047057y0650ytg0314') === false
-     * @assert('funkatron') === true
-     * @assert('funkatron_user') === false
-     * @assert('funkatron-user') === false
-     * @assert('_funkatronuser') === false
-     */
-    static public function isAlnum($value)
-    {
-        return ctype_alnum($value);
-    }
-
-    /**
-     * Returns true if every character is alphabetic, false
-     * otherwise.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert('NCOFWIERNVOWIEBHV12047057y0650ytg0314') === false
-     * @assert('NCOFWIERNVOWIEBHV2@12047057y0650ytg0314') === false
-     * @assert('funkatron') === true
-     * @assert('funkatron_user') === false
-     * @assert('funkatron-user') === false
-     * @assert('_funkatronuser') === false
-     */
-    static public function isAlpha($value)
-    {
-        return ctype_alpha($value);
-    }
-
-    /**
-     * Returns true if value is greater than or equal to $min and less
-     * than or equal to $max, false otherwise. If $inc is set to
-     * false, then the value must be strictly greater than $min and
-     * strictly less than $max.
-     *
-     * @param mixed $value
-     * @param mixed $min
-     * @param mixed $max
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert(12, 0, 12) === true
-     * @assert(12, 0, 12, false) === false
-     * @assert('f', 'a', 'm', false) === true
-     * @assert('p', 'a', 'm', false) === false
-     */
-    static public function isBetween($value, $min, $max, $inc = true)
-    {
-        if ($value > $min &&
-            $value < $max) {
-            return true;
-        }
-
-        if ($inc &&
-            $value >= $min &&
-            $value <= $max) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns true if it is a valid credit card number format. The
-     * optional second argument allows developers to indicate the
-     * type.
-     *
-     * @param mixed $value
-     * @param mixed $type
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isCcnum($value, $type = null)
-    {
-        /**
-         * @todo Type-specific checks
-         */
-        if (isset($type)) {
-            Inspekt_Error::raiseError('Type-specific cc checks are not yet supported');
-        }
-
-        $value = self::getDigits($value);
-        $length = strlen($value);
-
-        if ($length < 13 || $length > 19) {
-            return false;
-        }
-
-        $sum = 0;
-        $weight = 2;
-
-        for ($i = $length - 2; $i >= 0; $i--) {
-            $digit = $weight * $value[$i];
-            $sum += floor($digit / 10) + $digit % 10;
-            $weight = $weight % 2 + 1;
-        }
-
-        $mod = (10 - $sum % 10) % 10;
-
-        return ($mod == $value[$length - 1]);
-    }
-
-    /**
-     * Returns true if value is a valid date, false otherwise. The
-     * date is required to be in ISO 8601 format.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert('2009-06-30') === true
-     * @assert('2009-06-31') === false
-     * @assert('2009-6-30') === true
-     * @assert('2-6-30') === true
-     */
-    static public function isDate($value)
-    {
-        list($year, $month, $day) = sscanf($value, '%d-%d-%d');
-
-        return checkdate($month, $day, $year);
-    }
-
-    /**
-     * Returns true if every character is a digit, false otherwise.
-     * This is just like isInt(), except there is no upper limit.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert('1029438750192730t91740987023948') === false
-     * @assert('102943875019273091740987023948') === true
-     * @assert(102943875019273091740987023948) === false
-     */
-    static public function isDigits($value)
-    {
-        return ctype_digit((string) $value);
-    }
-
-    /**
-     * Returns true if value is a valid email format, false otherwise.
-     *
-     * @param string $value
-     * @return boolean
-     * @see http://www.regular-expressions.info/email.html
-     * @see Inspekt::VALID_EMAIL_REGEX
-     *
-     * @tag validator
-     *
-     * @assert('coj@poop.com') === true
-     * @assert('coj+booboo@poop.com') === true
-     * @assert('coj!booboo@poop.com') === false
-     * @assert('@poop.com') === false
-     * @assert('a@b') === false
-     * @assert('webmaster') === false
-     */
-    static public function isEmail($value)
-    {
-        return (bool) preg_match(self::VALID_EMAIL_REGEX, $value);
-    }
-
-    /**
-     * Returns true if value is a valid float value, false otherwise.
-     *
-     * @param string $value
-     * @return boolean
-     *
-     * @assert(10244578109.234451) === true
-     * @assert('10244578109.234451') === false
-     * @assert('10,244,578,109.234451') === false
-     *
-     * @tag validator
-     */
-    static public function isFloat($value)
-    {
-        $locale = localeconv();
-        $value = str_replace($locale['decimal_point'], '.', $value);
-        $value = str_replace($locale['thousands_sep'], '', $value);
-
-        return (strval(floatval($value)) == $value);
-    }
-
-    /**
-     * Returns true if value is greater than $min, false otherwise. Note that
-     * comparisons with NULL do not work the same way as SQL, ex. "1 > null" is
-     * true
-     *
-     * @param mixed $value
-     * @param mixed $min
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert(5, 0) === true
-     * @assert(2, 10) === false
-     * @assert('b', 'a') === true
-     * @assert('a', 'b') === false
-     *
-     * @todo missing $min is a really bad idea considering the odd null behavior. should that throw an error?
-     */
-    static public function isGreaterThan($value, $min)
-    {
-        return ($value > $min);
-    }
-
-    /**
-     * Returns true if value is a valid hexadecimal format, false
-     * otherwise.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @assert('6F') === true
-     * @assert('F6') === true
-     *
-     */
-    static public function isHex($value)
-    {
-        return ctype_xdigit($value);
-    }
-
-    /**
-     * Returns true if value is a valid hostname, false otherwise.
-     * Depending upon the value of $allow, Internet domain names, IP
-     * addresses, and/or local network names are considered valid.
-     * The default is HOST_ALLOW_ALL, which considers all of the
-     * above to be valid.
-     *
-     * @param mixed $value
-     * @param integer $allow bitfield for ISPK_HOST_ALLOW_DNS, ISPK_HOST_ALLOW_IP, ISPK_HOST_ALLOW_LOCAL
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isHostname($value, $allow = ISPK_HOST_ALLOW_ALL)
-    {
-        if (!is_numeric($allow) || !is_int($allow)) {
-            Inspekt_Error::raiseError('Illegal value for $allow; expected an integer', E_USER_WARNING);
-        }
-
-        if ($allow < ISPK_HOST_ALLOW_DNS || ISPK_HOST_ALLOW_ALL < $allow) {
-            Inspekt_Error::raiseError('Illegal value for $allow; expected integer between ' . ISPK_HOST_ALLOW_DNS . ' and ' . ISPK_HOST_ALLOW_ALL, E_USER_WARNING);
-        }
-
-        // determine whether the input is formed as an IP address
-        $status = self::isIp($value);
-
-        // if the input looks like an IP address
-        if ($status) {
-            // if IP addresses are not allowed, then fail validation
-            if (($allow & ISPK_HOST_ALLOW_IP) == 0) {
-                return false;
-            }
-
-            // IP passed validation
-            return true;
-        }
-
-        // check input against domain name schema
-        $status = @preg_match(ISPK_DNS_VALID, $value);
-        if ($status === false) {
-            Inspekt_Error::raiseError('Internal error: DNS validation failed', E_USER_WARNING);
-        }
-
-        // if the input passes as an Internet domain name, and domain names are allowed, then the hostname
-        // passes validation
-        if ($status == 1 && ($allow & ISPK_HOST_ALLOW_DNS) != 0) {
-            return true;
-        }
-
-        // if local network names are not allowed, then fail validation
-        if (($allow & ISPK_HOST_ALLOW_LOCAL) == 0) {
-            return false;
-        }
-
-        // check input against local network name schema; last chance to pass validation
-        $status = @preg_match('/^(?:[^\W_](?:[^\W_]|-){0,61}[^\W_]\.)*(?:[^\W_](?:[^\W_]|-){0,61}[^\W_])\.?$/',
-            $value);
-        if ($status === false) {
-            Inspekt_Error::raiseError('Internal error: local network name validation failed', E_USER_WARNING);
-        }
-
-        if ($status == 0) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Returns true if value is a valid integer value, false otherwise.
-     *
-     * @param string|array $value
-     * @return boolean
-     *
-     * @tag validator
-     *
-     * @todo better handling of diffs b/t 32-bit and 64-bit
-     */
-    static public function isInt($value)
-    {
-        $locale = localeconv();
-
-        $value = str_replace($locale['decimal_point'], '.', $value);
-        $value = str_replace($locale['thousands_sep'], '', $value);
-
-        $is_valid = (
-            is_numeric($value)  // Must be able to be converted to a number
-                && preg_replace("/^-?([0-9]+)$/", "", $value) == ""  // Must be an integer (no floats or e-powers)
-                && bccomp($value, "-9223372036854775807") >= 0  // Must be greater than than min of 64-bit
-                && bccomp($value, "9223372036854775807") <= 0  // Must be less than max of 64-bit
-        );
-        if (!$is_valid) {
-            return false;
-        } else {
-            return true;
-        }
-        // return (strval(intval($value)) === $value);
-    }
-
-    /**
-     * Returns true if value is a valid IP format, false otherwise.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isIp($value)
-    {
-        return (bool) ip2long($value);
-    }
-
-    /**
-     * Returns true if value is less than $max, false otherwise.
-     *
-     * @param mixed $value
-     * @param mixed $max
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isLessThan($value, $max)
-    {
-        return ($value < $max);
-    }
-
-    /**
-     * Returns true if value is one of $allowed, false otherwise.
-     *
-     * @param mixed $value
-     * @param array|string $allowed
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isOneOf($value, $allowed)
-    {
-        /**
-         * @todo: Consider allowing a string for $allowed, where each
-         * character in the string is an allowed character in the
-         * value.
-         */
-
-        if (is_string($allowed)) {
-            $allowed = str_split($allowed);
-        }
-
-        return in_array($value, $allowed);
-    }
-
-    /**
-     * Returns true if value is a valid phone number format, false
-     * otherwise. The optional second argument indicates the country.
-     * This method requires that the value consist of only digits.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isPhone($value, $country = 'US')
-    {
-        if (!ctype_digit($value)) {
-            return false;
-        }
-
-        switch ($country) {
-            case 'US':
-                if (strlen($value) != 10) {
-                    return false;
-                }
-
-                $areaCode = substr($value, 0, 3);
-
-                $areaCodes = array(201, 202, 203, 204, 205, 206, 207, 208,
-                    209, 210, 212, 213, 214, 215, 216, 217,
-                    218, 219, 224, 225, 226, 228, 229, 231,
-                    234, 239, 240, 242, 246, 248, 250, 251,
-                    252, 253, 254, 256, 260, 262, 264, 267,
-                    268, 269, 270, 276, 281, 284, 289, 301,
-                    302, 303, 304, 305, 306, 307, 308, 309,
-                    310, 312, 313, 314, 315, 316, 317, 318,
-                    319, 320, 321, 323, 325, 330, 334, 336,
-                    337, 339, 340, 345, 347, 351, 352, 360,
-                    361, 386, 401, 402, 403, 404, 405, 406,
-                    407, 408, 409, 410, 412, 413, 414, 415,
-                    416, 417, 418, 419, 423, 424, 425, 430,
-                    432, 434, 435, 438, 440, 441, 443, 445,
-                    450, 469, 470, 473, 475, 478, 479, 480,
-                    484, 501, 502, 503, 504, 505, 506, 507,
-                    508, 509, 510, 512, 513, 514, 515, 516,
-                    517, 518, 519, 520, 530, 540, 541, 555,
-                    559, 561, 562, 563, 564, 567, 570, 571,
-                    573, 574, 580, 585, 586, 600, 601, 602,
-                    603, 604, 605, 606, 607, 608, 609, 610,
-                    612, 613, 614, 615, 616, 617, 618, 619,
-                    620, 623, 626, 630, 631, 636, 641, 646,
-                    647, 649, 650, 651, 660, 661, 662, 664,
-                    670, 671, 678, 682, 684, 700, 701, 702,
-                    703, 704, 705, 706, 707, 708, 709, 710,
-                    712, 713, 714, 715, 716, 717, 718, 719,
-                    720, 724, 727, 731, 732, 734, 740, 754,
-                    757, 758, 760, 763, 765, 767, 769, 770,
-                    772, 773, 774, 775, 778, 780, 781, 784,
-                    785, 786, 787, 800, 801, 802, 803, 804,
-                    805, 806, 807, 808, 809, 810, 812, 813,
-                    814, 815, 816, 817, 818, 819, 822, 828,
-                    829, 830, 831, 832, 833, 835, 843, 844,
-                    845, 847, 848, 850, 855, 856, 857, 858,
-                    859, 860, 863, 864, 865, 866, 867, 868,
-                    869, 870, 876, 877, 878, 888, 900, 901,
-                    902, 903, 904, 905, 906, 907, 908, 909,
-                    910, 912, 913, 914, 915, 916, 917, 918,
-                    919, 920, 925, 928, 931, 936, 937, 939,
-                    940, 941, 947, 949, 951, 952, 954, 956,
-                    959, 970, 971, 972, 973, 978, 979, 980,
-                    985, 989);
-
-                return in_array($areaCode, $areaCodes);
-                break;
-            default:
-                Inspekt_Error::raiseError('isPhone() does not yet support this country.', E_USER_WARNING);
-                return false;
-                break;
-        }
-    }
-
-    /**
-     * Returns true if value matches $pattern, false otherwise. Uses
-     * preg_match() for the matching.
-     *
-     * @param mixed $value
-     * @param mixed $pattern
-     * @return mixed
-     *
-     * @tag validator
-     */
-    static public function isRegex($value, $pattern)
-    {
-        return (bool) preg_match($pattern, $value);
-    }
-
-    /**
-     * Enter description here...
-     *
-     * @param string $value
-     * @param integer $mode
-     * @return boolean
-     *
-     * @link http://www.ietf.org/rfc/rfc2396.txt
-     *
-     * @tag validator
-     */
-    static public function isUri($value, $mode = ISPK_URI_ALLOW_COMMON)
-    {
-        /**
-         * @todo
-         */
-        $regex = '';
-        switch ($mode) {
-
-            // a common absolute URI: ftp, http or https
-            case ISPK_URI_ALLOW_COMMON:
-
-                $regex .= '&';
-                $regex .= '^(ftp|http|https):';					// protocol
-                $regex .= '(//)';								// authority-start
-                $regex .= '([-a-z0-9/~;:@=+$,.!*()\']+@)?';		// userinfo
-                $regex .= '(';
-                $regex .= '((?:[^\W_]((?:[^\W_]|-){0,61}[^\W_])?\.)+[a-zA-Z]{2,6}\.?)';		// domain name
-                $regex .= '|';
-                $regex .= '([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?(\.[0-9]{1,3})?)';	// OR ipv4
-                $regex .= ')';
-                $regex .= '(:([0-9]*))?';						// port
-                $regex .= '(/((%[0-9a-f]{2}|[-_a-z0-9/~;:@=+$,.!*()\'\&]*)*)/?)?';	// path
-                $regex .= '(\?[^#]*)?';							// query
-                $regex .= '(#([-a-z0-9_]*))?';					// anchor (fragment)
-                $regex .= '$&i';
-                //echo "<pre>"; echo print_r($regex, true); echo "</pre>\n";
-
-                break;
-
-            case ISPK_URI_ALLOW_ABSOLUTE:
-
-                Inspekt_Error::raiseError('isUri() for ISPK_URI_ALLOW_ABSOLUTE has not been implemented.', E_USER_WARNING);
-                return false;
-
-//				$regex .= '&';
-//				$regex .= '^(ftp|http|https):';					// protocol
-//				$regex .= '(//)';								// authority-start
-//				$regex .= '([-a-z0-9/~;:@=+$,.!*()\']+@)?';		// userinfo
-//				$regex .= '(';
-//					$regex .= '((?:[^\W_]((?:[^\W_]|-){0,61}[^\W_])?\.)+[a-zA-Z]{2,6}\.?)';		// domain name
-//				$regex .= '|';
-//					$regex .= '([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?(\.[0-9]{1,3})?)';	// OR ipv4
-//				$regex .= ')';
-//				$regex .= '(:([0-9]*))?';						// port
-//				$regex .= '(/((%[0-9a-f]{2}|[-a-z0-9/~;:@=+$,.!*()\'\&]*)*)/?)?';	// path
-//				$regex .= '(\?[^#]*)?';							// query
-//				$regex .= '(#([-a-z0-9_]*))?';					// anchor (fragment)
-//				$regex .= '$&i';
-                //echo "<pre>"; echo print_r($regex, true); echo "</pre>\n";
-
-                break;
-
-        }
-        $result = preg_match($regex, $value);
-
-        if ($result === 1) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns true if value is a valid US postal (zip) code, false otherwise.
-     *
-     * @param mixed $value
-     * @return boolean
-     *
-     * @tag validator
-     */
-    static public function isZip($value)
-    {
-        return (bool) preg_match(self::VALID_POSTAL_CODE_REGEX, $value);
-    }
-
-    /**
-     * Returns value with all tags removed.
-     *
-     * This will utilize the PHP Filter extension if available
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     */
-    static public function noTags($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'noTags');
-        } else {
-            if (Inspekt::useFilterExt()) {
-                return filter_var($value, FILTER_SANITIZE_STRING);
-            } else {
-                return strip_tags($value);
-            }
-        }
-    }
-
-    /**
-     * returns value with tags stripped and the chars '"&<> and all ascii chars 
-     * under 32 encoded as html entities
-     *
-     * This will utilize the PHP Filter extension if available
-     *
-     * @param mixed $value
-     * @return @mixed
-     *
-     * @tag filter
-     *
-     */
-    static public function noTagsOrSpecial($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'noTagsOrSpecial');
-        } else {
-            if (Inspekt::useFilterExt()) {
-                $newval = filter_var($value, FILTER_SANITIZE_STRING);
-                $newval = filter_var($newval, FILTER_SANITIZE_SPECIAL_CHARS);
-                return $newval;
-            } else {
-                $newval = strip_tags($value);
-                //for sake of simplicity and safety we assume UTF-8
-                $newval = htmlspecialchars($newval, ENT_QUOTES, 'UTF-8'); 
-
-                /*
-				 *	convert low ascii chars to entities
-                 */
-                $newval = str_split($newval);
-                for ($i=0; $i < count($newval); $i++) {
-                    $ascii_code = ord($newval[$i]);
-                    if ($ascii_code < 32) {
-                        $newval[$i] = "&#{$ascii_code};";
-                    }
-                }
-                $newval = implode($newval);
-
-                return $newval;
-            }
-        }
-    }
-
-    /**
-     * Returns basename(value).
-     *
-     * @param mixed $value
-     * @return mixed
-     *
-     * @tag filter
-     */
-    static public function noPath($value)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'noPath');
-        } else {
-            return basename($value);
-        }
-    }
-
-    /**
-     * Escapes the value given with mysql_real_escape_string
-     *
-     * @param mixed $value
-     * @param resource $conn the mysql connection. If none is given, it will use
-     *                       the last link opened, per behavior of mysql_real_escape_string
-     * @return mixed
-     *
-     * @link http://php.net/manual/en/function.mysql-real-escape-string.php
-     *
-     * @tag filter
-     */
-    static public function escMySQL($value, $conn = null)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'escMySQL');
-        } else {
-            //no explicit func to check if the connection is live, but if it's not $conn would be false
-            if (isset($conn) && is_resource($conn)) {
-                return mysql_real_escape_string($value, $conn);
-            } else {
-                return mysql_real_escape_string($value);
-            }
-        }
-    }
-
-    /**
-     * Escapes the value given with pg_escape_string
-     *
-     * If the data is for a column of the type bytea, use Inspekt::escPgSQLBytea()
-     *
-     * @param mixed $value
-     * @param resource $conn the postgresql connection. If none is given, it 
-     *                       will use the last link opened, per behavior of pg_escape_string
-     * @return mixed
-     *
-     * @link http://php.net/manual/en/function.pg-escape-string.php
-     */
-    static public function escPgSQL($value, $conn = null)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'escPgSQL');
-        } else {
-            //might also check is_resource if pg_connection_status is too much
-            if (isset($conn) && pg_connection_status($conn) === PGSQL_CONNECTION_OK) {
-                return pg_escape_string($conn, $value);
-            } else {
-                return pg_escape_string($value);
-            }
-        }
-    }
-
-    /**
-     * Escapes the value given with pg_escape_bytea
-     *
-     * @param mixed $value
-     * @param resource $conn the postgresql connection. If none is given, it 
-     *                       will use the last link opened, per behavior of pg_escape_bytea
-     * @return mixed
-     *
-     * @link http://php.net/manual/en/function.pg-escape-bytea.php
-     */
-    static public function escPgSQLBytea($value, $conn = null)
-    {
-        if (Inspekt::isArrayOrArrayObject($value)) {
-            return Inspekt::_walkArray($value, 'escPgSQL');
-        } else {
-            //might also check is_resource if pg_connection_status is too much
-            if (isset($conn) && pg_connection_status($conn) === PGSQL_CONNECTION_OK) {
-                return pg_escape_bytea($conn, $value);
-            } else {
-                return pg_escape_bytea($value);
-            }
-        }
-    }
-}
diff --git a/libs/Inspekt/AccessorAbstract.php b/libs/Inspekt/AccessorAbstract.php
deleted file mode 100644
index 25391081eb..0000000000
--- a/libs/Inspekt/AccessorAbstract.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
- * This is the abstract for user-defined Accessor methods. Accessors are used to 
- * retrieve values from a cage object. By extending this abstract, developers
- * can add their own accessor methods. Typically the only method they will need
- * to define is AccessorAbstract::inspekt(), which takes a value, examines it,
- * and returns a result. Array walking is automatically handled
- *
- * @package Inspekt
- * @author Ed Finkler
- */
-abstract class AccessorAbstract {
-	
-	/**
-	 * the cage object this is attached to, provided in the constructor
-	 *
-	 * @var string
-	 */
-	protected $cage;
-	
-	/**
-	 * constructor
-	 *
-	 * @param Inspekt_Cage $cage 
-	 * @param array $args optional
-	 * @author Ed Finkler
-	 */
-	public function __construct(Inspekt_Cage $cage, $args=NULL) {
-		$this->cage = $cage;
-		$this->args = $args;
-	}
-	
-	/**
-	 * This executes the accessor on the key, either passed as the only argument,
-	 * or the first value in $this->args;
-	 *
-	 * @param string $key 
-	 * @return mixed
-	 * @author Ed Finkler
-	 */
-	public function run($key = null) {
-		if (!isset($key)) {
-			$key = $this->args[0];
-		}
-		
-		if (!$this->cage->keyExists($key)) {
-			return false;
-		}
-		$val = $this->getValue($key);
-		if (Inspekt::isArrayOrArrayObject($val)) {
-			return $this->walkArray($val);
-		} else {
-			return $this->inspekt($val);
-		}
-	}
-	
-	/**
-	 * Retrieves a value from the cage
-	 *
-	 * @param string $key 
-	 * @return mixed
-	 * @author Ed Finkler
-	 */
-	protected function getValue($key) {
-		return $this->cage->_getValue($key);
-	}
-	
-	/**
-	 * If an array is the value of the given key, this method walks the array
-	 * recursively, applying $this->inspekt on any non-array values
-	 *
-	 * @param mixed $input
-	 * @param 
-	 * @author Ed Finkler
-	 */
-	protected function walkArray($input) {
-		if (!isset($classname)) {
-			$classname = __CLASS__;
-		}
-				
-		if (!Inspekt::isArrayOrArrayObject($input)) {
-			Inspekt_Error::raiseError('$input must be an array or ArrayObject', E_USER_ERROR);
-			return FALSE;
-		}
-
-		foreach($input as $key=>$val) {
-			if (Inspekt::isArrayOrArrayObject($val)) {
-				$input[$key]=$this->walkArray($val);
-			} else {
-				$val = $this->inspekt($val);
-				$input[$key]=$val;
-			}
-		}
-		return $input;
-	}
-	
-	abstract protected function inspekt($val);
-	
-}
-
-
-
-
-?>
\ No newline at end of file
diff --git a/libs/Inspekt/Cage.php b/libs/Inspekt/Cage.php
deleted file mode 100644
index a3d86b3df3..0000000000
--- a/libs/Inspekt/Cage.php
+++ /dev/null
@@ -1,1086 +0,0 @@
-<?php
-/**
- * Inspekt Cage - main source file
- *
- * @author Chris Shiflett <chris@shiflett.org>
- * @author Ed Finkler <coj@funkatron.com>
- *
- * @package Inspekt
- */
-
-/**
- * require main Inspekt file
- */
-require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Inspekt.php';
-
-define('ISPK_ARRAY_PATH_SEPARATOR', '/');
-
-define('ISPK_RECURSION_MAX', 15);
-
-/**
- * @package Inspekt
- */
-class Inspekt_Cage implements IteratorAggregate, ArrayAccess, Countable
-{
-    /**
-     * {@internal The raw source data.  Although tempting, NEVER EVER
-     * EVER access the data directly using this property!}}
-     *
-     * Don't try to access this.  ever.  Now that we're safely on PHP5, we'll
-     * enforce this with the "protected" keyword.
-     *
-     * @var array
-     */
-    protected $_source = null;
-
-    /**
-     * where we store user-defined methods
-     *
-     * @var array
-     */
-    public $_user_accessors = array();
-
-    /**
-     * the holding property for autofilter config
-     *
-     * @var array
-     */
-    public $_autofilter_conf = null;
-
-    /**
-     *
-     * @var HTMLPurifer
-     */
-    protected $_purifier = null;
-
-    /**
-     * Takes an array and wraps it inside an object. If $strict is not set to
-     * false, the original array will be destroyed, and the data can only be
-     * accessed via the object's accessor methods
-     *
-     * @param array $source
-     * @param string $conf_file
-     * @param string $conf_section
-     * @param boolean $strict
-     * @return Inspekt_Cage
-     */
-    static public function Factory(&$source, $conf_file = null, $conf_section = null, $strict = true)
-    {
-        if (!is_array($source)) {
-            Inspekt_Error::raiseError('$source '.$source.' is not an array', E_USER_WARNING);
-        }
-
-        $cage = new Inspekt_Cage();
-        $cage->_setSource($source);
-        $cage->_parseAndApplyAutoFilters($conf_file, $conf_section);
-
-        if ($strict) {
-            $source = null;
-        }
-
-        return $cage;
-    }
-
-    /**
-     * {@internal we use this to set the data array in Factory()}}
-     *
-     * @see Factory()
-     * @param array $newsource
-     */
-    private function _setSource(&$newsource)
-    {
-        $this->_source = Inspekt::convertArrayToArrayObject($newsource);
-    }
-
-    /**
-     * Returns an iterator for looping through an ArrayObject.
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        return $this->_source->getIterator();
-    }
-
-
-    /**
-     * Sets the value at the specified $offset to value$ in $this->_source.
-     *
-     * @param mixed $offset
-     * @param mixed $value
-     * @return void
-     */
-    public function offsetSet($offset, $value)
-    {
-        $this->_source->offsetSet($offset, $value);
-    }
-
-    /**
-     * Returns whether the $offset exists in $this->_source.
-     *
-     * @param mixed $offset
-     * @return boolean
-     */
-    public function offsetExists($offset)
-    {
-        return $this->_source->offsetExists($offset);
-    }
-
-    /**
-     * Unsets the value in $this->_source at $offset.
-     *
-     * @param mixed $offset
-     * @access public
-     * @return void
-     */
-    public function offsetUnset($offset)
-    {
-        $this->_source->offsetUnset($offset);
-    }
-
-    /**
-     * Returns the value at $offset from $this->_source.
-     *
-     * @param mixed $offset
-     * @access public
-     * @return void
-     */
-    public function offsetGet($offset)
-    {
-        return $this->_source->offsetGet($offset);
-    }
-
-    /**
-     * Returns the number of elements in $this->_source.
-     *
-     * @access public
-     * @return int
-     */
-    public function count()
-    {
-        return $this->_source->count();
-    }
-
-    /**
-     * Load the HTMLPurifier library and instantiate the object
-     * @param string $path the full path to the HTMLPurifier.auto.php base file.
-     *                     Optional if HTMLPurifier is already in your include_path
-     */
-    public function loadHTMLPurifier($path = null, $opts = null)
-    {
-        if (!class_exists('HTMLPurifier')) {
-            if (isset($path)) {
-                include_once $path;
-            } else {
-                include_once 'HTMLPurifier.auto.php';
-            }
-	}
-
-        $config = null;
-        if (isset($opts) && is_array($opts)) {
-            $config = $this->_buildHTMLPurifierConfig($opts);
-        }
-
-        $this->_purifier = new HTMLPurifier($config);
-    }
-
-    /**
-     *
-     * @param HTMLPurifier $pobj an HTMLPurifier Object
-     */
-    public function setHTMLPurifier(HTMLPurifier $pobj)
-    {
-        $this->_purifier = $pobj;
-    }
-
-    /**
-     * @return HTMLPurifier
-     */
-    public function getHTMLPurifier()
-    {
-        return $this->_purifier;
-    }
-
-    protected function _buildHTMLPurifierConfig($opts)
-    {
-        $config = HTMLPurifier_Config::createDefault();
-        foreach ($opts as $key => $val) {
-            $config->set($key, $val);
-        }
-        return $config;
-    }
-
-    protected function _parseAndApplyAutoFilters($conf_file, $conf_section)
-    {
-        if (isset($conf_file)) {
-            $conf = parse_ini_file($conf_file, true);
-            if ($conf_section) {
-                if (isset($conf[$conf_section])) {
-                    $this->_autofilter_conf = $conf[$conf_section];
-                }
-            } else {
-                $this->_autofilter_conf = $conf;
-            }
-            $this->_applyAutoFilters();
-        }
-    }
-
-    protected function _applyAutoFilters()
-    {
-        if (isset($this->_autofilter_conf) && is_array($this->_autofilter_conf)) {
-            foreach ($this->_autofilter_conf as $key => $filters) {
-                // get universal filter key
-                if ($key == '*') {
-                    // get filters for this key
-                    $uni_filters = explode(',', $this->_autofilter_conf[$key]);
-                    array_walk($uni_filters, 'trim');
-
-                    // apply uni filters
-                    foreach($uni_filters as $this_filter) {
-                        foreach ($this->_source as $key => $val) {
-                            $this->_source[$key] = $this->$this_filter($key);
-                        }
-                    }
-                    //echo "<pre>UNI FILTERS"; echo var_dump($this->_source); echo "</pre>\n";
-                } else if ($val == $this->keyExists($key)) {
-                    // get filters for this key
-                    $filters = explode(',', $this->_autofilter_conf[$key]);
-                    array_walk($filters, 'trim');
-
-                    // apply filters
-                    foreach ($filters as $this_filter) {
-                        $this->_setValue($key, $this->$this_filter($key));
-                    }
-                    //echo "<pre> Filter $this_filter/$key: "; echo var_dump($this->_source); echo "</pre>\n";
-                }
-            }
-        }
-    }
-
-    public function __call($name, $args)
-    {
-        if (in_array($name, $this->_user_accessors) ) {
-            $acc = new $name($this, $args);
-            /*
-				this first argument should always be the key we're accessing
-            */
-            return $acc->run($args[0]);
-        } else {
-            Inspekt_Error::raiseError("The accessor $name does not exist and is not registered", E_USER_ERROR);
-            return false;
-        }
-    }
-
-    /**
-     * This method lets the developer add new accessor methods to a cage object
-     * Note that calling these will be quite a bit slower, because we have to
-     * use call_user_func()
-     *
-     * The dev needs to define a procedural function like so:
-     *
-     * <code>
-     * function foo_bar($cage_object, $arg2, $arg3, $arg4, $arg5...) {
-     *    ...
-     * }
-     * </code>
-     *
-     * @param string $method_name
-     * @return void
-     * @author Ed Finkler
-     */
-    public function addAccessor($accessor_name)
-    {
-        $this->_user_accessors[] = $accessor_name;
-    }
-
-    /**
-     * Returns only the alphabetic characters in value.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getAlpha($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getAlpha($this->_getValue($key));
-    }
-
-    /**
-     * Returns only the alphabetic characters and digits in value.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getAlnum($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getAlnum($this->_getValue($key));
-    }
-
-    /**
-     * Returns only the digits in value. This differs from getInt().
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getDigits($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getDigits($this->_getValue($key));
-    }
-
-    /**
-     * Returns dirname(value).
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getDir($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getDir($this->_getValue($key));
-    }
-
-    /**
-     * Returns (int) value.
-     *
-     * @param mixed $key
-     * @return int
-     *
-     * @tag filter
-     */
-    public function getInt($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getInt($this->_getValue($key));
-    }
-
-    /**
-     * Returns realpath(value).
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getPath($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getPath($this->_getValue($key));
-    }
-
-    /**
-     * Returns ROT13-encoded version
-     *
-     * @param string $key
-     * @return mixed
-     * @tag hash
-     */
-    public function getROT13($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::getROT13($this->_getValue($key));
-    }
-
-    /**
-     * This returns the value of the given key passed through the HTMLPurifer
-     * object, if it is instantiated with Inspekt_Cage::loadHTMLPurifer
-     *
-     * @param string $key
-     * @return mixed purified HTML version of input
-     * @tag filter
-     */
-    public function getPurifiedHTML($key)
-    {
-        if (!isset($this->_purifier)) {
-            Inspekt_Error::raiseError("HTMLPurifier was not loaded", E_USER_WARNING);
-            return false;
-        }
-
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        $val = $this->_getValue($key);
-        if (Inspekt::isArrayOrArrayObject($val)) {
-            return $this->_purifier->purifyArray($val);
-        } else {
-            return $this->_purifier->purify($val);
-        }
-    }
-
-    /**
-     * Returns value.
-     *
-     * @param string $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function getRaw($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return $this->_getValue($key);
-    }
-
-    /**
-     * Returns value if every character is alphabetic or a digit,
-     * false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testAlnum($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isAlnum($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-        return false;
-    }
-
-    /**
-     * Returns value if every character is alphabetic, false
-     * otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testAlpha($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isAlpha($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is greater than or equal to $min and less
-     * than or equal to $max, false otherwise. If $inc is set to
-     * false, then the value must be strictly greater than $min and
-     * strictly less than $max.
-     *
-     * @param mixed $key
-     * @param mixed $min
-     * @param mixed $max
-     * @param boolean $inc
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testBetween($key, $min, $max, $inc = true)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isBetween($this->_getValue($key), $min, $max, $inc)) {
-            return $this->_getValue($key);
-        }
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid credit card number format. The
-     * optional second argument allows developers to indicate the
-     * type.
-     *
-     * @param mixed $key
-     * @param mixed $type
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testCcnum($key, $type = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isCcnum($this->_getValue($key), $type)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns $value if it is a valid date, false otherwise. The
-     * date is required to be in ISO 8601 format.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testDate($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isDate($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if every character is a digit, false otherwise.
-     * This is just like isInt(), except there is no upper limit.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testDigits($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isDigits($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid email format, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testEmail($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isEmail($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid float value, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testFloat($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isFloat($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is greater than $min, false otherwise.
-     *
-     * @param mixed $key
-     * @param mixed $min
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testGreaterThan($key, $min = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isGreaterThan($this->_getValue($key), $min)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid hexadecimal format, false
-     * otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testHex($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isHex($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid hostname, false otherwise.
-     * Depending upon the value of $allow, Internet domain names, IP
-     * addresses, and/or local network names are considered valid.
-     * The default is HOST_ALLOW_ALL, which considers all of the
-     * above to be valid.
-     *
-     * @param mixed $key
-     * @param integer $allow bitfield for HOST_ALLOW_DNS, HOST_ALLOW_IP, HOST_ALLOW_LOCAL
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testHostname($key, $allow = ISPK_HOST_ALLOW_ALL)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isHostname($this->_getValue($key), $allow)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid integer value, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testInt($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isInt($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid IP format, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testIp($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isIp($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is less than $max, false otherwise.
-     *
-     * @param mixed $key
-     * @param mixed $max
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testLessThan($key, $max = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isLessThan($this->_getValue($key), $max)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is one of $allowed, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testOneOf($key, $allowed = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isOneOf($this->_getValue($key), $allowed)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid phone number format, false
-     * otherwise. The optional second argument indicates the country.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testPhone($key, $country = 'US')
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isPhone($this->_getValue($key), $country)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it matches $pattern, false otherwise. Uses
-     * preg_match() for the matching.
-     *
-     * @param mixed $key
-     * @param mixed $pattern
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testRegex($key, $pattern = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isRegex($this->_getValue($key), $pattern)) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Checks to see if the passed $key references a properly-formed URI
-     *
-     * @param string $key
-     * @return string|false
-     *
-     * @tag validator
-     */
-    public function testUri($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isUri($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value if it is a valid US ZIP, false otherwise.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag validator
-     */
-    public function testZip($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (Inspekt::isZip($this->_getValue($key))) {
-            return $this->_getValue($key);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns value with all tags removed.
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function noTags($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::noTags($this->_getValue($key));
-    }
-
-    /**
-     * Returns basename(value).
-     *
-     * @param mixed $key
-     * @return mixed
-     *
-     * @tag filter
-     */
-    public function noPath($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::noPath($this->_getValue($key));
-    }
-
-
-    public function noTagsOrSpecial($key)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        return Inspekt::noTagsOrSpecial($this->_getValue($key));
-    }
-
-    /**
-     *
-     * @param string $key
-     * @param resource $conn
-     * @return string|false
-     *
-     * @todo remove $conn check, redundant with Inspekt::escMySQL
-     */
-    public function escMySQL($key, $conn = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (isset($conn)) {
-            return Inspekt::escMySQL($this->_getValue($key), $conn);
-        } else {
-            return Inspekt::escMySQL($this->_getValue($key));
-        }
-    }
-
-    /**
-     *
-     * @param string $key
-     * @param resource $conn
-     * @return string|false
-     *
-     * @todo remove $conn check, redundant with Inspekt::escPgSQL
-     */
-    public function escPgSQL($key, $conn = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (isset($conn)) {
-            return Inspekt::escPgSQL($this->_getValue($key), $conn);
-        } else {
-            return Inspekt::escPgSQL($this->_getValue($key));
-        }
-
-    }
-
-    /**
-     *
-     * @param string $key
-     * @param resource $conn
-     * @return string|false
-     *
-     * @todo remove $conn check, redundant with Inspekt::escPgSQLBytea
-     */
-    public function escPgSQLBytea($key, $conn = null)
-    {
-        if (!$this->keyExists($key)) {
-            return false;
-        }
-        if (isset($conn)) {
-            return Inspekt::escPgSQLBytea($this->_getValue($key), $conn);
-        } else {
-            return Inspekt::escPgSQLBytea($this->_getValue($key));
-        }
-
-    }
-
-    /**
-     * Checks if a key exists
-     *
-     * @param mixed $key
-     * @param boolean $return_value whether or not to return the value if key exists. defaults to false.
-     * @return mixed
-     */
-    public function keyExists($key, $return_value = false)
-    {
-        if (strpos($key, ISPK_ARRAY_PATH_SEPARATOR) !== false) {
-            $key = trim($key, ISPK_ARRAY_PATH_SEPARATOR);
-            $keys = explode(ISPK_ARRAY_PATH_SEPARATOR, $key);
-            return $this->_keyExistsRecursive($keys, $this->_source);
-        } else {
-            if (array_key_exists($key, $this->_source)) {
-                return ($return_value) ? $this->_source[$key] : true;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    protected function _keyExistsRecursive($keys, $data_array)
-    {
-        $thiskey = current($keys);
-
-        if (is_numeric($thiskey)) { // force numeric strings to be integers
-            $thiskey = (int)$thiskey;
-        }
-
-        if (array_key_exists($thiskey, $data_array)) {
-            if (sizeof($keys) == 1) {
-                return true;
-            } else if ($data_array[$thiskey] instanceof ArrayObject) {
-                unset($keys[key($keys)]);
-                return $this->_keyExistsRecursive($keys, $data_array[$thiskey]);
-            }
-        } else { // if any key DNE, return false
-            return false;
-        }
-    }
-
-    /**
-     * Retrieves a value from the _source array. This should NOT be called
-     * directly, but needs to be public for use by AccessorAbstract. Maybe a
-     * different approach should be considered (adapt getRaw()?)
-     *
-     * @param string $key
-     * @return mixed
-     * @private
-     */
-    public function _getValue($key)
-    {
-        if (strpos($key, ISPK_ARRAY_PATH_SEPARATOR) !== false) {
-            $key = trim($key, ISPK_ARRAY_PATH_SEPARATOR);
-            $keys = explode(ISPK_ARRAY_PATH_SEPARATOR, $key);
-            return $this->_getValueRecursive($keys, $this->_source);
-        } else {
-            return $this->_source[$key];
-        }
-    }
-
-    protected function _getValueRecursive($keys, $data_array, $level = 0)
-    {
-        $thiskey = current($keys);
-
-        if (is_numeric($thiskey)) { // force numeric strings to be integers
-            $thiskey = (int) $thiskey;
-        }
-
-        if (array_key_exists($thiskey, $data_array)) {
-            if (sizeof($keys) == 1) {
-                return $data_array[$thiskey];
-            } else if ($data_array[$thiskey] instanceof ArrayObject) {
-                if ($level < ISPK_RECURSION_MAX) {
-                    unset($keys[key($keys)]);
-                    return $this->_getValueRecursive($keys, $data_array[$thiskey], $level + 1);
-                } else {
-                    Inspekt_Error::raiseError('Inspekt recursion limit met', E_USER_WARNING);
-                    return false;
-                }
-            }
-        } else { // if any key DNE, return false
-            return false;
-        }
-    }
-
-    /**
-     * Sets a value in the _source array
-     *
-     * @param mixed $key
-     * @param mixed $val
-     * @return mixed
-     */
-    protected function _setValue($key, $val)
-    {
-        if (strpos($key, ISPK_ARRAY_PATH_SEPARATOR) !== false) {
-            $key = trim($key, ISPK_ARRAY_PATH_SEPARATOR);
-            $keys = explode(ISPK_ARRAY_PATH_SEPARATOR, $key);
-            return $this->_setValueRecursive($keys, $this->_source);
-        } else {
-            $this->_source[$key] = $val;
-            return $this->_source[$key];
-        }
-    }
-
-    protected function _setValueRecursive($keys, $val, $data_array, $level = 0)
-    {
-        $thiskey = current($keys);
-
-        if (is_numeric($thiskey)) { // force numeric strings to be integers
-            $thiskey = (int)$thiskey;
-        }
-
-        if (array_key_exists($thiskey, $data_array)) {
-            if (sizeof($keys) == 1) {
-                $data_array[$thiskey] = $val;
-                return $data_array[$thiskey];
-            } elseif ($data_array[$thiskey] instanceof ArrayObject) {
-                if ($level < ISPK_RECURSION_MAX) {
-                    unset($keys[key($keys)]);
-                    return $this->_setValueRecursive($keys, $val, $data_array[$thiskey], $level + 1);
-                } else {
-                    Inspekt_Error::raiseError('Inspekt recursion limit met', E_USER_WARNING);
-                    return false;
-                }
-            }
-        } else { // if any key DNE, return false
-            return false;
-        }
-    }
-}
diff --git a/libs/Inspekt/Cage/Session.php b/libs/Inspekt/Cage/Session.php
deleted file mode 100644
index 44bdabde04..0000000000
--- a/libs/Inspekt/Cage/Session.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/**
- * Inspekt Session Cage - main source file
- *
- * @author Chris Shiflett <chris@shiflett.org>
- * @author Ed Finkler <coj@funkatron.com>
- *
- * @package Inspekt
- * 
- * @deprecated
- */
-
-require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'Cage.php';
-
-/**
- * @package Inspekt
- */
-class Inspekt_Cage_Session extends Inspekt_Cage {
-	
-	static public function Factory(&$source, $conf_file = NULL, $conf_section = NULL, $strict = TRUE) {
-
-		if (!is_array($source)) {
-			Inspekt_Error::raiseError('$source '.$source.' is not an array', E_USER_NOTICE);
-		}
-
-		$cage = new Inspekt_Cage_Session();
-		$cage->_setSource($source);
-		$cage->_parseAndApplyAutoFilters($conf_file);
-		
-		if (ini_get('session.use_cookies') || ini_get('session.use_only_cookies') ) {
-			if (isset($_COOKIE) && isset($_COOKIE[session_name()])) {
-				session_id($_COOKIE[session_name()]);
-			} elseif ($cookie = Inspekt::makeSessionCage()) {
-				session_id($cookie->getAlnum(session_name()));
-			}
-		} else { // we're using session ids passed via GET
-			if (isset($_GET) && isset($_GET[session_name()])) {
-				session_id($_GET[session_name()]);
-			} elseif ($cookie = Inspekt::makeSessionCage()) {
-				session_id($cookie->getAlnum(session_name()));
-			}
-		}
-		
-		
-		if ($strict) {
-			$source = NULL;
-		}
-
-		return $cage;
-		
-		register_shutdown_function();
-		
-		register_shutdown_function( array($this, '_repopulateSession') );
-		
-	}
-	
-	
-	
-	protected function _repopulateSession() {
-		$_SESSION = array();
-		$_SESSION = $this->_source;
-	}
-	
-
-	
-}
\ No newline at end of file
diff --git a/libs/Inspekt/CageTest.php b/libs/Inspekt/CageTest.php
deleted file mode 100644
index 9720287f18..0000000000
--- a/libs/Inspekt/CageTest.php
+++ /dev/null
@@ -1,742 +0,0 @@
-<?php
-require_once 'PHPUnit/Framework.php';
-
-require_once 'Cage.php';
-
-/**
- * Test class for Inspekt_Cage.
- * Generated by PHPUnit on 2009-08-10 at 16:30:49.
- */
-class Inspekt_CageTest extends PHPUnit_Framework_TestCase
-{
-	/**
-	 * @var    Inspekt_Cage
-	 * @access protected
-	 */
-	protected $cage;
-
-	/**
-	 * Sets up the fixture, for example, opens a network connection.
-	 * This method is called before a test is executed.
-	 *
-	 * @access protected
-	 */
-	protected function setUp()
-	{
-		$inputarray['html'] = '<IMG """><SCRIPT>alert("XSS")</SCRIPT>">';
-        $inputarray['int']  = 7;
-        $inputarray['date'] = '2009-12-25';
-        $inputarray['alnum'] = '3a4b5c';
-        $inputarray['alpha'] = 'abcdefg';
-        $inputarray['zip']   = 55555;
-        $inputarray['zip+4'] = '55555-4444';
-
-		$this->cage = Inspekt_Cage::Factory($inputarray);
-	}
-
-	/**
-	 * Tears down the fixture, for example, closes a network connection.
-	 * This method is called after a test is executed.
-	 *
-	 * @access protected
-	 */
-	protected function tearDown()
-	{
-	}
-
-	/**
-	 * @todo Implement testFactory().
-	 */
-	public function testFactory()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * 
-	 */
-	public function testGetIterator()
-	{
-		$this->assertTrue($this->cage->getIterator() instanceof ArrayIterator);
-	}
-
-	/**
-	 * @todo Implement testOffsetSet().
-	 */
-	public function testOffsetSet()
-	{
-		$this->assertFalse($this->cage->getRaw('try_later'));
-        $this->cage->offsetSet('try_later', 'it is later');
-        $this->assertEquals($this->cage['try_later'], 'it is later');
-	}
-
-	/**
-	 * exists
-	 */
-	public function testOffsetExists()
-	{
-		$this->assertTrue($this->cage->offsetExists('html'));
-	}
-
-  	/**
-	 * doesn't exist
-	 */
-	public function testOffsetExists2()
-	{
-		$this->assertFalse($this->cage->offsetExists('non-existant'));
-	}
-
-	/**
-	 * @todo Implement testOffsetUnset().
-	 */
-	public function testOffsetUnset()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testOffsetGet().
-	 */
-	public function testOffsetGet()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testCount().
-	 */
-	public function testCount()
-	{
-		$this->assertSame(7, $this->cage->count());
-	}
-
-	/**
-	 * @todo Implement testLoadHTMLPurifier().
-	 */
-	public function testLoadHTMLPurifier()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testGetHTMLPurifier().
-	 */
-	public function testGetHTMLPurifier()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testSetHTMLPurifier().
-	 */
-	public function testSetHTMLPurifier()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * Implement test_parseAndApplyAutoFilters().
-	 
-	public function test_parseAndApplyAutoFilters()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}*/
-
-	/**
-	 * Implement test_applyAutoFilters().
-	 
-	public function test_applyAutoFilters()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}*/
-
-	/**
-	 * @todo Implement test__call().
-	 */
-	public function test__call()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * 
-	 */
-	public function testAddAccessor()
-	{
-        //pre-condition, clean start
-		$this->assertSame($this->cage->_user_accessors, array());
-        $this->cage->addAccessor('method_name');
-        $this->assertSame($this->cage->_user_accessors, array('method_name'));
-	}
-
-	/**
-	 * valid, filtered
-	 */
-	public function testGetAlpha()
-	{
-		$this->assertSame('abc', $this->cage->getAlpha('alnum'));
-	}
-
-    /**
-	 * missing
-	 */
-	public function testGetAlpha2()
-	{
-		$this->assertFalse($this->cage->getAlpha('non-existant'));
-	}
-
-    /**
-	 * invalid, filtered
-	 */
-	public function testGetAlpha3()
-	{
-		$this->assertSame('', $this->cage->getAlpha('int'));
-	}
-
-    /**
-	 * valid, unfiltered
-	 */
-	public function testGetAlpha4()
-	{
-		$this->assertSame('abcdefg', $this->cage->getAlpha('alpha'));
-	}
-
-	/**
-	 * @todo Implement testGetAlnum().
-	 */
-	public function testGetAlnum()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testGetDigits().
-	 */
-	public function testGetDigits()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testGetDir().
-	 */
-	public function testGetDir()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * test missing
-	 */
-	public function testGetInt()
-	{
-		//non-existent key should return false
-		$this->assertFalse($this->cage->getInt('non-existant'));
-	}
-
-    /**
-	 * test valid
-	 */
-	public function testGetInt2()
-	{
-        $this->assertSame($this->cage->getInt('int'), 7);
-	}
-
-    /**
-     * test filter
-     */
-    public function testGetInt3()
-    {
-        $this->assertSame(2009, $this->cage->getInt('date'));
-    }
-    
-	/**
-	 * @todo Implement testGetPath().
-	 */
-	public function testGetPath()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testGetROT13().
-	 */
-	public function testGetROT13()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testGetPurifiedHTML().
-	 */
-	public function testGetPurifiedHTML()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * 
-	 */
-	public function testGetRaw()
-	{
-		$this->assertFalse($this->cage->getRaw('non-existant'));
-	}
-
-    /**
-	 *
-	 */
-	public function testGetRaw2()
-	{
-		//test that found key returns matching value
-        $this->assertEquals($this->cage->getRaw('html'),
-            '<IMG """><SCRIPT>alert("XSS")</SCRIPT>">');
-	}
-
-	/**
-	 * test invalid
-	 */
-	public function testTestAlnum()
-	{
-		$this->assertFalse($this->cage->testAlnum('html'));
-	}
-
-	/**
-	 * test valid
-	 */
-	public function testTestAlnum2()
-	{
-		$this->assertSame('3a4b5c', $this->cage->testAlnum('alnum'));
-	}
-
-	/**
-	 * test missing
-	 */
-	public function testTestAlnum3()
-	{
-		$this->assertFalse($this->cage->testAlnum('non-existant'));
-	}
-
-	/**
-	 * test valid
-	 */
-	public function testTestAlpha()
-	{
-		$this->assertSame('abcdefg', $this->cage->testAlpha('alpha'));
-	}
-
-    /**
-	 * test missing
-	 */
-	public function testTestAlpha2()
-	{
-		$this->assertFalse($this->cage->testAlpha('non-existant'));
-	}
-    
-    /**
-	 * test invalid
-	 */
-	public function testTestAlpha3()
-	{
-		$this->assertFalse($this->cage->testAlpha('alnum'));
-	}
-    
-	/**
-	 * @todo Implement testTestBetween().
-	 */
-	public function testTestBetween()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestCcnum().
-	 */
-	public function testTestCcnum()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestDate().
-	 */
-	public function testTestDate()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestDigits().
-	 */
-	public function testTestDigits()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestEmail().
-	 */
-	public function testTestEmail()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestFloat().
-	 */
-	public function testTestFloat()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * integer, true
-	 */
-	public function testTestGreaterThan()
-	{
-		$this->assertSame(7, $this->cage->testGreaterThan('int', 5));
-	}
-
-    /**
-	 * non-integer, true
-     * @depends testOffsetSet
-	 */
-	public function testTestGreaterThan2()
-	{
-        $this->cage['highAlpha'] = 'z';
-		$this->assertSame('z', $this->cage->testGreaterThan('highAlpha', 'a'));
-	}
-
-    /**
-	 * integer, false
-	 */
-	public function testTestGreaterThan3()
-	{
-		$this->assertFalse($this->cage->testGreaterThan('int', 9));
-	}
-
-    /**
-	 * non-integer, false
-	 */
-	public function testTestGreaterThan4()
-	{
-		$this->assertFalse($this->cage->testGreaterThan('alpha', 'z'));
-	}
-
-    /**
-	 * missing
-	 */
-	public function testTestGreaterThan5()
-	{
-		$this->assertFalse($this->cage->testGreaterThan('non-existant', 5));
-	}
-
-    /**
-	 * missing min (bad idea)
-	 */
-	public function testTestGreaterThan6()
-	{
-		$this->assertSame(7, $this->cage->testGreaterThan('int'));
-	}
-
-	/**
-	 * @todo Implement testTestHex().
-	 */
-	public function testTestHex()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestHostname().
-     * @TODO add more tests for hosttype params
-	 */
-	public function testTestHostname()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestInt() for too high
-     * @todo Implement testTestInt() for too low
-     * valid
-	 */
-	public function testTestInt()
-	{
-		$this->assertSame(7, $this->cage->testInt('int'));
-	}
-
-    /**
-     * invalid
-     */
-    public function testTestInt2()
-	{
-		$this->assertFalse($this->cage->testInt('date'));
-	}
-
-    /**
-     * missing
-     */
-    public function testTestInt3()
-	{
-		$this->assertFalse($this->cage->testInt('non-existant'));
-	}
-
-	/**
-	 * @todo Implement testTestIp().
-	 */
-	public function testTestIp()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * integer, true
-	 */
-	public function testTestLessThan()
-	{
-		$this->assertSame(7, $this->cage->testLessThan('int', 10));
-	}
-
-    /**
-	 * non-integer, true
-	 */
-	public function testTestLessThan2()
-	{
-		$this->assertSame('abcdefg', $this->cage->testLessThan('alpha', 'z'));
-	}
-
-    /**
-	 * integer, false
-	 */
-	public function testTestLessThan3()
-	{
-		$this->assertFalse($this->cage->testLessThan('int', 2));
-	}
-
-    /**
-	 * non-integer, false
-     * @depends testOffsetSet
-	 */
-	public function testTestLessThan4()
-	{
-        $this->cage['highAlpha'] = 'z';
-		$this->assertFalse($this->cage->testLessThan('highAlpha', 'a'));
-	}
-
-    /**
-	 * missing
-	 */
-	public function testTestLessThan5()
-	{
-		$this->assertFalse($this->cage->testLessThan('non-existant', 5));
-	}
-
-    /**
-	 * missing max (bad idea, should alwasy return false?)
-	 */
-	public function testTestLessThan6()
-	{
-        $this->assertFalse($this->cage->testLessThan('int'));
-	}
-
-	/**
-	 * @todo Implement testTestOneOf().
-	 */
-	public function testTestOneOf()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestPhone().
-	 */
-	public function testTestPhone()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestRegex().
-	 */
-	public function testTestRegex()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testTestUri().
-	 */
-	public function testTestUri()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * valid zip
-	 */
-	public function testTestZip()
-	{
-		$this->assertSame(55555, $this->cage->testZip('zip'));
-	}
-
-    /**
-	 * valid zip+4
-	 */
-	public function testTestZip2()
-	{
-		$this->assertSame('55555-4444', $this->cage->testZip('zip+4'));
-	}
-
-    /**
-	 * invalid zip
-	 */
-	public function testTestZip3()
-	{
-		$this->assertFalse($this->cage->testZip('date'));
-	}
-
-    /**
-	 * missing
-	 */
-	public function testTestZip4()
-	{
-		$this->assertFalse($this->cage->testZip('non-existant'));
-	}
-
-	/**
-	 * @todo Implement testNoTags().
-	 */
-	public function testNoTags()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testNoPath().
-	 */
-	public function testNoPath()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testNoTagsOrSpecial().
-	 */
-	public function testNoTagsOrSpecial()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testEscMySQL().
-	 */
-	public function testEscMySQL()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testEscPgSQL().
-	 */
-	public function testEscPgSQL()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testEscPgSQLBytea().
-	 */
-	public function testEscPgSQLBytea()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement testKeyExists().
-	 */
-	public function testKeyExists()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement test_keyExistsRecursive().
-	 */
-	public function test_keyExistsRecursive()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement test_getValue().
-	 */
-	public function test_getValue()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement test_getValueRecursive().
-	 */
-	public function test_getValueRecursive()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement test_setValue().
-	 */
-	public function test_setValue()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-
-	/**
-	 * @todo Implement test_setValueRecursive().
-	 */
-	public function test_setValueRecursive()
-	{
-		// Remove the following lines when you implement this test.
-		$this->markTestIncomplete('This test has not been implemented yet.');
-	}
-}
-?>
\ No newline at end of file
diff --git a/libs/Inspekt/Error.php b/libs/Inspekt/Error.php
deleted file mode 100644
index 0c924dfacb..0000000000
--- a/libs/Inspekt/Error.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Source file for Inspekt_Error
- *
- * @author Ed Finkler <coj@funkatron.com>
- * @package Inspekt
- */
-
-/**
- * Error handling for Inspekt
- *
- * @package Inspekt
- *
- */
-class Inspekt_Error {
-
-    /**
-     * Constructor
-     *
-     * @return Inspekt_Error
-     */
-    public function  __construct() {
-
-    }
-
-    /**
-     * Raises an error.  In >= PHP5, this will throw an exception.
-     *
-     * @param string $msg
-     * @param integer $type One of the PHP Error Constants (E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE)
-     *
-     * @link http://www.php.net/manual/en/ref.errorfunc.php#errorfunc.constants
-     */
-    public static function raiseError($msg, $type = E_USER_WARNING)
-    {
-        throw new Exception($msg, $type);
-    }
-}
\ No newline at end of file
diff --git a/libs/Inspekt/Supercage.php b/libs/Inspekt/Supercage.php
deleted file mode 100644
index 13d830203a..0000000000
--- a/libs/Inspekt/Supercage.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Inspekt Supercage
- *
- * @author Ed Finkler <coj@funkatron.com>
- *
- * @package Inspekt
- */
-
-/**
- * require main Inspekt class
- */
-require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'Inspekt.php';
-
-/**
- * require the Cage class
- */
-require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'Inspekt/Cage.php';
-
-/**
- * The Supercage object wraps ALL of the superglobals
- * 
- * @package Inspekt
- *
- */
-Class Inspekt_Supercage {
-
-	/**
-	 * The get cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $get;
-
-	/**
-	 * The post cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $post;
-
-	/**
-	 * The cookie cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $cookie;
-
-	/**
-	 * The env cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $env;
-
-	/**
-	 * The files cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $files;
-
-	/**
-	 * The session cage
-	 *
-	 * @var Inspekt_Cage
-	 */
-	var $session;
-
-	var $server;
-
-	/**
-	 * Enter description here...
-	 *
-	 * @return Inspekt_Supercage
-	 */
-	public function Inspekt_Supercage() {
-		// placeholder
-	}
-
-	/**
-	 * Enter description here...
-	 * 
-	 * @param string  $config_file
-	 * @param boolean $strict
-	 * @return Inspekt_Supercage
-	 */
-	static public function Factory($config_file = NULL, $strict = TRUE) {
-
-		$sc	= new Inspekt_Supercage();
-		$sc->_makeCages($config_file, $strict);
-
-		// eliminate the $_REQUEST superglobal
-		if ($strict) {
-			$_REQUEST = null;
-		}
-
-		return $sc;
-
-	}
-
-	/**
-	 * Enter description here...
-	 *
-	 * @see Inspekt_Supercage::Factory()
-	 * @param string  $config_file
-	 * @param boolean $strict
-	 */
-	protected function _makeCages($config_file=NULL, $strict=TRUE) {
-		$this->get		= Inspekt::makeGetCage($config_file, $strict);
-		$this->post		= Inspekt::makePostCage($config_file, $strict);
-		$this->cookie	= Inspekt::makeCookieCage($config_file, $strict);
-		$this->env		= Inspekt::makeEnvCage($config_file, $strict);
-		$this->files	= Inspekt::makeFilesCage($config_file, $strict);
-		// $this->session	= Inspekt::makeSessionCage($config_file, $strict);
-		$this->server	= Inspekt::makeServerCage($config_file, $strict);
-	}
-	
-	
-	public function addAccessor($name) {
-		$this->get->addAccessor($name);
-		$this->post->addAccessor($name);
-		$this->cookie->addAccessor($name);
-		$this->env->addAccessor($name);
-		$this->files->addAccessor($name);
-		// $this->session->addAccessor($name);
-		$this->server->addAccessor($name);
-	}
-
-}
\ No newline at end of file
-- 
GitLab