/**
* Construit une URL en reprenant l'URL actuelle et certains de ses paramètres GET.
*
* si $keep est un array, seuls les éléments de $keep sont conservés
* si $remove est un array, les éléments de $remove sont enlevés
* si $add est un array( clef => valeur ), ces paramètres sont ajoutés à l'URL
* Exemple :
* url actuelle : truc.php?a=1&b=2
* url_from_get_vars( array( 'a' ), false, array( 'c' => 3 ) )
* => truc.php?a=1&c=3
* url_from_get_vars( false, array( 'a' ), array( 'c' => 3 ) )
* => truc.php?b=2&c=3
*/
function url_from_get_vars( $keep=false, $remove=false, $add = array() )
{
$params = array();
foreach($_GET as $key => $value) {
if ((!$keep || in_array($key, $keep)) && !($remove && in_array($key, $remove))) {
$params[] = $key.'='.urlencode( $value );
}
}
foreach($add as $key => $value) {
$params[] = $key.'='.urlencode( $value );
}
return $_SERVER['PHP_SELF'].'?'.implode( '&', $params );
}
/**
* Construit un tableau contenant PATH_INFO splité a partir ses slashes qu'il contient.
*
* Par exemple, si j'ai /mod/page/content. L'array retourné sera array('mod','page','content')
*
* @param string $add Ajoute des données supplémentaire au tableau retourné.
*/
function url_get_path($add=array(),$keep=array(),$remove=array()) {
if (isset($_SERVER['ORIG_PATH_INFO'])) {
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
} elseif (!isset($_SERVER['ORIG_PATH_INFO']) && !isset($_SERVER['PATH_INFO'])) {
$_SERVER['PATH_INFO'] = '/';
}
$_SERVER['PATH_INFO'] = substr($_SERVER['PATH_INFO'],1,($_SERVER['PATH_INFO'][strlen($_SERVER['PATH_INFO'])-1] == '/') ? -1 : strlen($_SERVER['PATH_INFO'])-1);
$path = explode('/',$_SERVER['PATH_INFO']);
if ($keep || $remove) {
$opath = $path;
$path = array();
foreach ($opath as $value) {
if ((!$keep || in_array($value,$keep)) && !($remove && in_array($value, $remove))) {
$path[] = $value;
}
}
unset($opath);
}
if (!empty($add)) {
if (!is_array($add)) {
$path[] = $add;
} else {
while (!empty($add)) {
$path[] = array_shift($add);
}
}
}
return $path;
}
/**
* Contruit quelque chose ressemblant au contenu de PATH_INFO.
* Peut récupérer l'array retourné par url_get_path
*
* @see url_get_path()
*/
function build_url_path() {
$args = func_get_args();
$arg = array_shift($args);
if (is_array($arg)) {
$_ = array_shift($arg);
$args = $arg;
$arg = $_;
}
$url = get_param('baseurl').'/index.php/'.$arg.'/';
if (count($args) > 0 && !empty($arg)) {
$url.= implode('/',$args);
}
return $url;
}