function stash_request($extra = null, $email = null) { $url = url_invoked(); if (!is_null($_SERVER['QUERY_STRING'])) { $url .= "?{$_SERVER['QUERY_STRING']}"; } $v = null; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $v = $_POST; } return stash_new_request($_SERVER['REQUEST_METHOD'], $url, $v, $extra, $email); }
function track_code($extra = null) { if (!defined('OPTION_TRACKING') || !OPTION_TRACKING) { return ''; } $salt = sprintf('%08x', rand()); $url = url_invoked(); $sign = null; $img = null; if (is_null($extra)) { return ''; } else { $sign = sha1(OPTION_TRACKING_SECRET . "{$salt}{$url}{$extra}"); $img = url_new(OPTION_TRACKING_URL, false, "salt", $salt, "url", $url, "extra", $extra, "sign", $sign); } return '<!-- This "web bug" image is used to collect data which we use to improve our services. More on this at https://secure.mysociety.org/track/ --><img alt="" src="' . htmlspecialchars($img) . '" width="1" height="1">'; }
function url_new($page, $retain) { if (!isset($page)) { $page = url_invoked(); } $url = "{$page}"; $params = array(); if ($retain) { /* GET takes priority over POST. This isn't the usual behaviour but is * consistent with other bits of the code (see fyr/phplib/forms.php) */ $params = array_merge($_POST, $_GET); } if (func_num_args() > 2) { if (func_num_args() % 2 != 0) { die("call to url_new with odd number of arguments"); } for ($i = 2; $i < func_num_args(); $i += 2) { $k = func_get_arg($i); $v = func_get_arg($i + 1); if (array_key_exists($k, $params)) { unset($params[$k]); } $params[func_get_arg($i)] = func_get_arg($i + 1); } } if (count($params) > 0) { $keyvalpairs = array(); foreach ($params as $key => $val) { if (is_array($val)) { for ($i = 0; $i < count($val); ++$i) { $keyvalpairs[] = urlencode($key) . '=' . urlencode($val[$i]); } } elseif ($val) { $keyvalpairs[] = urlencode($key) . '=' . urlencode($val); } } $url .= '?' . join('&', $keyvalpairs); } return $url; }