Suppression de la fonction de configuration qui n'est utilisée qu'à un endroit.

Ajout d'un filtre et d'une balise associée pour renvoyer les informations extra associée à un territoire.
Pour le nom d'usage, on supprimer les mots entre parenthèses.
Ajout de quelques catégories de territoire.
v0_spip32
Eric Lupinacci 3 years ago
parent 1854c403c4
commit 8747ccb2ed

@ -15,118 +15,6 @@ if (!defined('_TERRITOIRE_URL_BASE_ISOCODE')) {
define('_TERRITOIRE_URL_BASE_ISOCODE', 'https://contrib.spip.net/http.api/ezrest');
}
/**
* Initialise la configuration de chargement des différents types de territoire, soit les régions du monde, les pays,
* les subdivisions et infra-subdivisions.
* Cette configuration est stockée dans la meta `territoires` à linstallation et n'est pas modifiable.
*
* @internal
*
* @return array Tableau des configurations de chaque type de territoire définissant comment récupérer et interpréter
* les données de Nomenclatures pour remplir les tables de territoires.
*/
function territoires_configurer() {
// Configuration statique du plugin Territoires
$configuration = array(
'zone' => array(
'champs' => array(
'base' => array(
'code_num' => 'iso_territoire',
'category' => 'categorie',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'zones',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => '#code_geoip',
'valeur' => 'code',
),
'index' => 'continents',
'cle_iso' => 'code_num',
),
),
),
'country' => array(
'champs' => array(
'base' => array(
'code_alpha2' => 'iso_territoire',
'category' => 'categorie',
'code_continent' => 'iso_continent',
'label' => 'iso_titre',
),
'extras' => array(
'code' => array(
'code_alpha3' => 'code_iso3166_a3',
'code_num' => 'code_iso3166_num',
),
'info' => array(
'capital' => 'capital',
'area' => 'area',
'population' => 'population',
'tld' => 'tld',
'code_4217_3' => 'code_4217_3',
'phone_id' => 'phone_id'
),
),
'index' => 'pays',
),
),
'subdivision' => array(
'champs' => array(
'base' => array(
'code_3166_2' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'subdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
'infrasubdivision' => array(
'champs' => array(
'base' => array(
'code' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'infrasubdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
);
return $configuration;
}
/**
* Acquiert les données de territoires disponibles dans Nomenclatures.
* La fonction utilise l'API REST de Nomenclatures.
@ -369,9 +257,9 @@ function enregistrement_initialiser($territoire, $type, $pays = '') {
}
// Compléter systématiquement avec le type, le nom d'usage qui pour l'instant n'est pas fourni et le descriptif
// TODO : pour l'instant Nomenclatures ne fournit pas de nom d'usage (on duplique le nom ISO) ni de descriptif.
// TODO : pour l'instant Nomenclatures ne fournit pas de nom d'usage ni de descriptif.
$enregistrement['type'] = $type;
$enregistrement['nom_usage'] = $enregistrement['iso_titre'];
$enregistrement['nom_usage'] = preg_replace("#\s+\(.*\)#", '', $enregistrement['iso_titre']);
$enregistrement['descriptif'] = '';
// Gestion des parentés inter-types : on remplit systématiquement le champ parent pour créer une hiérarchie complète
@ -504,9 +392,7 @@ function type_est_subdivision($type) {
*/
function consigne_identifier($type, $pays = '') {
$consigne = (type_est_subdivision($type))
return (type_est_subdivision($type))
? "${type}/${pays}"
: $type;
return $consigne;
}

@ -27,6 +27,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'categorie_district' => 'district',
'categorie_federal_district' => 'district fédéral',
'categorie_free_communal_consortia' => 'libre consortium communal',
'categorie_governorate' => 'gouvernorat',
'categorie_land' => 'land',
'categorie_london_borough' => 'arrondissement de Londres',
'categorie_metropolitan_city' => 'ville métropolitaine',
@ -39,11 +40,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'categorie_overseas_department' => 'département d\'outre-mer',
'categorie_overseas_region' => 'région d\'outre-mer',
'categorie_overseas_territorial_collectivity' => 'collectivité territoriale d\'outre-mer',
'categorie_prefecture' => 'préfecture',
'categorie_province' => 'province',
'categorie_region' => 'région',
'categorie_state' => 'état',
'categorie_two_tier_county' => 'comté à 2 niveaux',
'categorie_unitary_authority' => 'autorité unitaire',
'categorie_wilaya' => 'wilaya',
'categorie_world' => 'terre',
'categorie_zone_region' => 'zone',
'champ_categorie_label' => 'Catégorie',

@ -21,9 +21,101 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function territoires_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
// Initialisation de la configuration statique
include_spip('inc/territoires_utils');
$config_statique = territoires_configurer();
// Initialisation de la configuration
// -- Configuration statique du plugin Territoires
$config_statique = array(
'zone' => array(
'champs' => array(
'base' => array(
'code_num' => 'iso_territoire',
'category' => 'categorie',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'zones',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => '#code_geoip',
'valeur' => 'code',
),
'index' => 'continents',
'cle_iso' => 'code_num',
),
),
),
'country' => array(
'champs' => array(
'base' => array(
'code_alpha2' => 'iso_territoire',
'category' => 'categorie',
'code_continent' => 'iso_continent',
'label' => 'iso_titre',
),
'extras' => array(
'code' => array(
'code_alpha3' => 'code_iso3166_a3',
'code_num' => 'code_iso3166_num',
),
'info' => array(
'capital' => 'capital',
'area' => 'area',
'population' => 'population',
'tld' => 'tld',
'code_4217_3' => 'code_4217_3',
'phone_id' => 'phone_id'
),
),
'index' => 'pays',
),
),
'subdivision' => array(
'champs' => array(
'base' => array(
'code_3166_2' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'subdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
'infrasubdivision' => array(
'champs' => array(
'base' => array(
'code' => 'iso_territoire',
'type' => 'categorie',
'country' => 'iso_pays',
'parent' => 'iso_parent',
'label' => 'iso_titre',
),
'index' => 'infrasubdivisions',
),
'extras' => array(
'code' => array(
'champs' => array(
'extra' => 'type_alter',
'valeur' => 'code_alter',
),
'index' => 'codes_alternatifs',
'cle_iso' => 'code_iso',
),
),
),
);
// -- Configuration dynamique du plugin Territoires
$config_modifiable = array(
'association_objets' => array(),
);

@ -60,10 +60,10 @@ function territoire_informer_ascendance($iso_territoire, $iso_parent = null, $or
* @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 $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.
*
* @return array Liste des identifiants de catégorie.
*/
@ -102,3 +102,72 @@ function territoire_lister_categorie($type = '', $pays = '') {
return $categories;
}
/**
* Fournit, pour un territoire donné, tout ou partie des informations extras disponibles dans la table
* spip_territoires_extras.
* Cette fonction ne renvoie pas les champs du territoire lui-même (table spip_territoires).
*
* @api
* @filtre
*
* @param string $iso_territoire Code ISO principal du territoire
* @param string $information Type d'information à renvoyer depuis la table spip_territoires_extras ou vide
* si on veut toutes les informations.
*
* @return string|array Information ou liste des informations.
*/
function territoire_informer($iso_territoire, $information = '') {
// Traitement du cas particulier de l'ascendance
if ($information === 'ascendance') {
$informations = territoire_informer_ascendance($iso_territoire);
} else {
// Initialisation de la sortie en fonction de la demande
$informations = $information ? '' : array();
// Quelque soit la demande, on récupère toutes les informations du territoire.
$select = array('extra', 'valeur');
$where = array('iso_territoire=' . sql_quote($iso_territoire));
$extras = sql_allfetsel($select, 'spip_territoires_extras', $where);
if ($extras) {
$extras = array_column($extras, 'extra');
$informations = $information
? (isset($extras[$information]) ? $extras[$information] : '')
: $extras;
}
}
return $informations;
}
/**
* Compile la balise `#TERRITOIRE_EXTRAS` qui renvoie tout ou partie des informations extras d'un territoire donné.
* La signature de la balise est : `#TERRITOIRE_EXTRAS{iso_territoire[, information]}`.
*
* @balise
*
* @uses territoire_informer()
*
* @param Champ $p Pile au niveau de la balise.
*
* @return Champ Pile complétée par le code à générer.
**/
function balise_TERRITOIRE_EXTRAS_dist($p) {
// Récupération des arguments.
// -- la balise utilise toujours le rangement par rang au sein du conteneur
// -- et ne permet pas de filtrer les noisettes autrement que sur le conteneur.
$iso_territoire = interprete_argument_balise(1, $p);
$iso_territoire = isset($iso_territoire) ? str_replace('\'', '"', $iso_territoire) : '""';
$information = interprete_argument_balise(2, $p);
$information = isset($information) ? str_replace('\'', '"', $information) : '""';
// On appelle la fonction de calcul de la liste des noisettes
$p->code = "territoire_informer($iso_territoire, $information)";
return $p;
}

Loading…
Cancel
Save