_regex = $regex; $this->_sub = $sub; } function filter($text) { return preg_replace($this->_regex, $this->_sub, $text); } } class FALambdaFilter extends FATextFilter { var $_lambda; function FALambdaFilter($lambda) { assert(function_exists($lambda)); $this->_lambda = $lambda; } function filter($text) { return call_user_func($this->_lambda, $text); } } class FAWebRequest { var $_global_filters = array(); var $_filters = array(); var $_array = array(); function FAWebRequest() { $this->_array = $_REQUEST; } function applyFilterArray($value, $filters) { $it = &new FAArrayIterator($filters); while ($it->next()) { $filter = &$it->current(); $value = $filter->filter($value); } return $value; } function applyFilters($key, $value) { if (isset($this->_filters[$key])) { $value = $this->applyFilterArray($value, $this->_filters[$key]); } return $value; } function applyGlobalFilters($value) { return $this->applyFilterArray($value, $this->_global_filters); } function get($key, $default = NULL) { $value = $default; if (isset($this->_array[$key])) { $value = $this->_array[$key]; if (is_array($value)) { foreach ($value as $i => $sub) { //$sub = $value = $this->applyFilters($key, $sub); $sub = $this->applyGlobalFilters($sub); $value[$i] = $sub; } } else { $value = $this->applyFilters($key, $value); $value = $this->applyGlobalFilters($value); } } return $value; } function getArray($which = FA_REQUEST_ALL) { $ret = array(); switch ($which) { case FA_REQUEST_GET: { $array = &$_GET; break; } case FA_REQUEST_POST: { $array = &$_POST; break; } default: { $array = &$_REQUEST; } } $temp = &$this->_array; $this->_array = &$array; foreach ($array as $key => $value) { $ret[$key] = $this->get($key); } $this->_array = &$temp; return $ret; } function getAsArray() { return $this->_array; } function &getFile($key) { if (!isset($_FILES[$key])) { trigger_error("No such upload, $key", E_USER_ERROR); } $file = &new FAUpload($key); return $file; } function parsePath() { } function registerFilter($key, &$filter) { assert(is_a($filter, 'FATextFilter')); $this->_filters[$key][] = &$filter; } function registerGlobalFilter(&$filter) { assert(is_a($filter, 'FATextFilter')); $this->_global_filters[] = &$filter; } function remove($key) { unset($_REQUEST[$key]); } function setArray($array) { $this->_array = array_merge($this->_array, $array); } } class FAUpload { var $_info; function FAUpload($name) { assert(isset($_FILES[$name])); $this->_info = $_FILES[$name]; } } ?>