public static function addArg(array $newParams, $uri = null)
{
$uri = is_null($uri) ? Vars::get($_SERVER['REQUEST_URI'], '') : $uri;
// Parse the URI into it's components
$puri = parse_url($uri);
if (Arr::key('query', $puri)) {
parse_str($puri['query'], $queryParams);
$queryParams = array_merge($queryParams, $newParams);
} elseif (Arr::key('path', $puri) && strstr($puri['path'], '=') !== false) {
$puri['query'] = $puri['path'];
unset($puri['path']);
parse_str($puri['query'], $queryParams);
$queryParams = array_merge($queryParams, $newParams);
} else {
$queryParams = $newParams;
}
// Strip out any query params that are set to false.
// Properly handle valueless parameters.
foreach ($queryParams as $param => $value) {
if ($value === false) {
unset($queryParams[$param]);
} elseif ($value === null) {
$queryParams[$param] = '';
}
}
// Re-construct the query string
$puri['query'] = self::build($queryParams);
// Strip = from valueless parameters.
$puri['query'] = preg_replace('/=(?=&|$)/', '', $puri['query']);
// Re-construct the entire URL
$nuri = self::buildAll($puri);
// Make the URI consistent with our input
foreach (array('/', '?') as $char) {
if ($nuri[0] === $char && strstr($uri, $char) === false) {
$nuri = substr($nuri, 1);
}
}
return rtrim($nuri, '?');
}