A priori fonctionnement simplifié et correct des filtres

v0_spip32
Eric Lupinacci 3 years ago
parent 36ece9449e
commit ca89967e8f

@ -17,25 +17,25 @@
<strong class="caption">(#ENV*{titre,#GRAND_TOTAL|objet_afficher_nb{territoires}})</strong>
[(#GET{avec_filtre}|oui)
<div class="filtre">
<form method="GET" action="#SELF" onChange="this.submit(); return true;">
[<form method="GET" action="#SELF" onChange="this.submit(); return true;">
[(#SELF|parametre_url{categorie,''}|parametre_url{iso_pays,''}|form_hidden)]
[(#SAISIE{territoires_categories, categorie,
(#SAISIE{territoires_categories, categorie,
type=#GET{type_territoire},
pays=#ENV{iso_pays, ''},
option_intro=<:territoires:option_categorie_toute:>,
})]
</form>
})
</form>]
</div>
[<div class="filtre">
(#GET{type_territoire}|in_array{#LISTE{subdivision, infrasubdivision}}|or{#ENV{type}|non}|oui)
<form method="GET" action="#SELF" onChange="this.submit(); return true;">
[<form method="GET" action="#SELF" onChange="this.submit(); return true;">
[(#SELF|parametre_url{categorie,''}|parametre_url{iso_pays,''}|form_hidden)]
[(#SAISIE{territoires_pays, iso_pays,
(#SAISIE{territoires_pays, iso_pays,
type=#GET{type_territoire},
categorie=#ENV{categorie, ''},
option_intro=<:territoires:option_pays_tous:>,
})]
</form>
})
</form>]
</div>]]
</caption>]
<thead>

@ -66,36 +66,29 @@ function territoire_informer_ascendance($iso_territoire, $iso_parent = null, $or
*
* @return array Liste des pays sous la forme [iso_pays] = nom usuel.
*/
function territoire_lister_pays($type = 'country', $categorie = '') {
function territoire_lister_pays($type = '', $categorie = '') {
// Initialisation d'un retour en erreur
$pays = array();
// Gestion du cas où type est chaine vide
if (!$type){
$type = 'country';
}
// Filtre sur la catégorie si demandé
// Filtre sur la catégorie et le type si demandé
$where = array();
if ($categorie) {
$where[] = 't1.categorie=' . sql_quote($categorie);
}
if ($type) {
$where[] = 't1.type=' . sql_quote($type);
}
// On récupère :
// -- les pays possédant des subdivisions en base de donnés (type = subdivision ou infrasubdivision)
// -- ou simplement tous les pays (type = country).
if ($type === 'country') {
$select = array('t1.iso_territoire as pays', 't1.nom_usage');
$where = 't1.type=' . sql_quote($type);
$pays = sql_allfetsel($select, 'spip_territoires as t1', $where);
} elseif (
include_spip('inc/territoires_utils')
and type_est_subdivision($type)
) {
} else {
$from = array('spip_territoires as t1', 'spip_territoires as t2');
$select = array('t1.iso_pays as pays', 't2.nom_usage');
$where[] = 't1.type=' . sql_quote($type);
$where[] = 't1.iso_pays = t2.iso_territoire';
$group_by = array('t1.iso_pays');
$pays = sql_allfetsel($select, $from, $where, $group_by);
@ -110,44 +103,29 @@ function territoire_lister_pays($type = 'country', $categorie = '') {
/**
* Fournit la liste des catégories de territoire pour un type donné ou pour une subdivisision ou infrasubdivision donnée.
* Fournit la liste des catégories de territoire filtreé sur le type et/ou sur le pays.
*
* @api
* @filtre
*
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`
* ou chaine vide pour toutes les catégories sans tenir compte du type.
* @param string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision`
* sinon une chaine vide.
* @param string $pays Code ISO 3166-1 alpha2 du pays sinon une chaine vide.
*
* @return array Liste des identifiants de catégorie.
*/
function territoire_lister_categorie($type = '', $pays = '') {
// On récupère les identifiants de catégorie d'un type donné, d'un couple (type, pays) ou de tous les territoires.
// On récupère les identifiants de catégorie d'un type donné, d'un pays donné, d'un couple (type, pays) ou de
// tous les territoires.
$select = array('categorie');
$where = array();
$group_by = array('categorie');
if (
$type
and (
!$pays
or (
include_spip('inc/territoires_services')
and type_pays_est_valide($type, $pays)
)
)
) {
$where = array(
'type=' . sql_quote($type),
);
if (
include_spip('inc/territoires_utils')
and type_est_subdivision($type)
and $pays
) {
$where[] = 'iso_pays=' . sql_quote($pays);
}
if ($type) {
$where[] = 'type=' . sql_quote($type);
}
if ($pays) {
$where[] = 'iso_pays=' . sql_quote($pays);
}
$categories = sql_allfetsel($select, 'spip_territoires', $where, $group_by);
@ -159,6 +137,7 @@ function territoire_lister_categorie($type = '', $pays = '') {
}
/**
* Fournit, pour un territoire donné, tout ou partie des informations extras disponibles dans la table
* spip_territoires_extras.

Loading…
Cancel
Save