You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

88 lines
2.5 KiB

<?php
if (!function_exists('balise_URL_API_dist')) {
/**
* Compile la balise `#URL_API` qui retourne une URL de type « .api »
*
* - `#URL_API{toto}` génère l'url pour l’api `toto.api`
* - `#URL_API{toto.api}` génère l'url pour l’api `toto.api`
* - `#URL_API{toto/list}` génère l'url pour l’api `toto.api/list`
* - `#URL_API{toto.api/list}` génère l'url pour l’api `toto.api/list`
* - `#URL_API{toto,param=valeur}` génère l'url pour la page `toto.api` avec des paramètres
* - `#URL_API{toto.api/list,param=valeur}` génère l'url pour la page `toto.api/list` avec des paramètres
* - `#URL_API*` retourne l'URL sans convertir les `&` en `&amp;`
*
* @balise
* @uses generer_url_api()
* @example
* ```
* #URL_API{select2_autocomplete/demo} produit select2_autocomplete.api/demo
* ```
*
* @param Champ $p
* Pile au niveau de la balise
* @return Champ
* Pile complétée par le code à générer
*/
function balise_URL_API_dist($p) {
$api = interprete_argument_balise(1, $p);
$args = interprete_argument_balise(2, $p);
if ($args === null) {
$args = "''";
}
$no_entities = $p->etoile ? "true" : "false";
$code = "generer_url_api($api, $args, $no_entities)";
$p->code = $code;
$p->interdire_scripts = true;
return $p;
}
}
if (!function_exists('generer_url_api')) {
/**
* Calcule une URL d’API SPIP.
*
* Une URL d’API est de la forme `truc.api` ou `truc.api/qqc/...`
* et appelle ensuite un fichier d’action de SPIP, tel que
* `action/api_truc.php`
*
* Nécessite un .htaccess (ou équivalent) actif sur le site.
*
* @param string $script
* Le nom du script d’API, avec ou sans `.api` dedans (truc.api, truc, truc.api/qqc, truc/qqc)
* @param string|array $args
* Des arguments supplémentaires, tel que `id_rubrique=3&limit=12`, ou sous forme de tableau cle => valeur
* @param bool $no_entities
* true pour ne pas échapper les entités.
* @return string
* L’URL calculée.
*/
function generer_url_api($script, $args = "", $no_entities = false) {
$base = url_de_base();
if (false === stripos($script, '.api')) {
$api = explode('/', $script);
$api[0] .= '.api';
$api = implode('/', $api);
} else {
$api = $script;
}
$action = "";
if ($args) {
if (is_array($args)) {
$r = '';
foreach ($args as $k => $v) {
$r .= '&' . $k . '=' . $v;
}
$args = substr($r, 1);
}
$action = '?' . $args;
}
if (!$no_entities) {
$action = quote_amp($action);
}
return $base . $api . $action;
}
}