* @link http://elgg.org/
*/
/**
* Get some input from variables passed on the GET or POST line.
*
* Note: this function does not handle nested arrays (ex: form input of param[m][n])
* because of the filtering done in htmlawed from the filter_tags call.
*
* @param $variable string The variable we want to return.
* @param $default mixed A default value for the variable if it is not found.
* @param $filter_result If true then the result is filtered for bad tags.
*/
function get_input($variable, $default = "", $filter_result = true) {
global $CONFIG;
if (isset($CONFIG->input[$variable])) {
$var = $CONFIG->input[$variable];
if ($filter_result) {
$var = filter_tags($var);
}
return $var;
}
if (isset($_REQUEST[$variable])) {
if (is_array($_REQUEST[$variable])) {
$var = $_REQUEST[$variable];
} else {
$var = trim($_REQUEST[$variable]);
}
if ($filter_result) {
$var = filter_tags($var);
}
return $var;
}
return $default;
}
/**
* Sets an input value that may later be retrieved by get_input
*
* Note: this function does not handle nested arrays (ex: form input of param[m][n])
*
* @param string $variable The name of the variable
* @param string $value The value of the variable
*/
function set_input($variable, $value) {
global $CONFIG;
if (!isset($CONFIG->input)) {
$CONFIG->input = array();
}
if (is_array($value)) {
foreach ($value as $key => $val) {
$value[$key] = trim($val);
}
$CONFIG->input[trim($variable)] = $value;
} else {
$CONFIG->input[trim($variable)] = trim($value);
}
}
/**
* Filter tags from a given string based on registered hooks.
* @param $var
* @return mixed The filtered result
*/
function filter_tags($var) {
return trigger_plugin_hook('validate', 'input', null, $var);
}
/**
* Sanitise file paths for input, ensuring that they begin and end with slashes etc.
*
* @param string $path The path
* @return string
*/
function sanitise_filepath($path) {
// Convert to correct UNIX paths
$path = str_replace('\\', '/', $path);
// Sort trailing slash
$path = trim($path);
// rtrim defaults plus /
$path = rtrim($path, " \n\t\0\x0B/");
$path = $path . "/";
return $path;
}
/**
* Takes a string and turns any URLs into formatted links
*
* @param string $text The input string
* @return string The output stirng with formatted links
**/
function parse_urls($text) {
// @todo this causes problems with
// must be ing format (no space).
// By default htmlawed rewrites tags to this format.
// if PHP supported conditional negative lookbehinds we could use this:
// $r = preg_replace_callback('/(?"\'\!\(\),]+)/i',
//
// we can put , in the list of excluded char but need to keep . because of domain names.
// it is removed in the callback.
$r = preg_replace_callback('/(?"\'\!\(\),]+)/i',
create_function(
'$matches',
'
$url = $matches[1];
$period = \'\';
if (substr($url, -1, 1) == \'.\') {
$period = \'.\';
$url = trim($url, \'.\');
}
$urltext = str_replace("/", "/", $url);
return "$urltext$period";
'
), $text);
return $r;
}
/**
*
* Adds P tags.
* Borrowed from Wordpress.
*
**/
function autop($pee, $br = 1) {
$pee = $pee . "\n"; // just to make things a little easier, pad the end
$pee = preg_replace('| \s* |', "\n\n", $pee);
// Space things out a little
$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
$pee = preg_replace('!(' . $allblocks . '>)!', "$1\n\n", $pee);
$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
if ( strpos($pee, '