|
|
|
@ -15,111 +15,109 @@ if (!defined('_TERRITOIRE_TIME_OUT_PEUPLEMENT')) {
|
|
|
|
|
define('_TERRITOIRE_TIME_OUT_PEUPLEMENT', 20);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Renvoie la configuration du plugin, soit statique (non modifiable), soit utilisateur (modifiable).
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $type_configuration Type de configuration. Prend les valeurs `statique` ou `utilisateur`.
|
|
|
|
|
* @param null|string $type_configuration Type de configuration. Prend les valeurs `statique` ou `utilisateur`.
|
|
|
|
|
*
|
|
|
|
|
* @return array Tableau de la configuration demandée.
|
|
|
|
|
*/
|
|
|
|
|
function territoire_configurer($type_configuration = 'statique') {
|
|
|
|
|
|
|
|
|
|
function territoire_configurer(?string $type_configuration = 'statique') : array {
|
|
|
|
|
if ($type_configuration === 'statique') {
|
|
|
|
|
// Configuration de l'extraction des données REST
|
|
|
|
|
$configuration = array(
|
|
|
|
|
$configuration = [
|
|
|
|
|
// liste des types de territoires (chaque type a une configuration)
|
|
|
|
|
'types' => array('zone', 'country', 'subdivision', 'infrasubdivision'),
|
|
|
|
|
'types' => ['zone', 'country', 'subdivision', 'infrasubdivision'],
|
|
|
|
|
// configuration de l'extraction des territoires de type zone
|
|
|
|
|
'zone' => array(
|
|
|
|
|
'zone' => [
|
|
|
|
|
// -- liste des champs récupérés dans la réponse.
|
|
|
|
|
'champs' => array(
|
|
|
|
|
'champs' => [
|
|
|
|
|
// L'index 'base' correspond aux colonnes dans la table spip_territoires sous la forme :
|
|
|
|
|
// [index dans la réponse] = colonne de spip_territoires
|
|
|
|
|
'base' => array(
|
|
|
|
|
'base' => [
|
|
|
|
|
'code_num' => 'iso_territoire',
|
|
|
|
|
'category' => 'categorie',
|
|
|
|
|
'parent' => 'iso_parent',
|
|
|
|
|
'depth' => 'profondeur_type',
|
|
|
|
|
'label' => 'iso_titre',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
// L'index 'index' définit la racine des champs dans la réponse
|
|
|
|
|
'index' => 'zones',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
// -- liste des extras de type 'code' ou 'info' récupérés dans la réponse à un index différent de
|
|
|
|
|
// celui des champs et mis à jour dans la table spip_territoires_extras
|
|
|
|
|
'extras' => array(
|
|
|
|
|
'extras' => [
|
|
|
|
|
// Pour le type 'code'
|
|
|
|
|
'code' => array(
|
|
|
|
|
'code' => [
|
|
|
|
|
// L'index 'champs' correspond aux colonnes dans la table spip_territoires_extras sous la forme :
|
|
|
|
|
// [colonne de spip_territoires_extras] = index dans la réponse
|
|
|
|
|
'champs' => array(
|
|
|
|
|
'champs' => [
|
|
|
|
|
'extra' => '#code_geoip', // La réponse ne contient pas ce champ : il est forcé à 'code_geopip'
|
|
|
|
|
'valeur' => 'code',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
// L'index 'index' définit la racine des champs extras dans la réponse
|
|
|
|
|
'index' => 'continents',
|
|
|
|
|
'index' => 'continents',
|
|
|
|
|
// L'index 'cle_iso' identifie l'index dans la réponse qui représente le code iso, soit iso_territoire
|
|
|
|
|
'cle_iso' => 'code_num',
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
'country' => array(
|
|
|
|
|
'champs' => array(
|
|
|
|
|
'base' => array(
|
|
|
|
|
'code_alpha2' => 'iso_territoire',
|
|
|
|
|
'category' => 'categorie',
|
|
|
|
|
'code_continent' => 'iso_continent',
|
|
|
|
|
'label' => 'iso_titre',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
'country' => [
|
|
|
|
|
'champs' => [
|
|
|
|
|
'base' => [
|
|
|
|
|
'code_alpha2' => 'iso_territoire',
|
|
|
|
|
'category' => 'categorie',
|
|
|
|
|
'code_continent' => 'iso_continent',
|
|
|
|
|
'label' => 'iso_titre',
|
|
|
|
|
],
|
|
|
|
|
// -- liste des extras de type 'code' ou 'info' récupérés dans la réponse au même index que
|
|
|
|
|
// celui des champs et aussi mis à jour dans la table spip_territoires_extras.
|
|
|
|
|
// La forme des correspondance est identique à celle des champs de base.
|
|
|
|
|
'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'
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
'extras' => [
|
|
|
|
|
'code' => [
|
|
|
|
|
'code_alpha3' => 'code_iso3166_a3',
|
|
|
|
|
'code_num' => 'code_iso3166_num',
|
|
|
|
|
],
|
|
|
|
|
'info' => [
|
|
|
|
|
'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(
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
'subdivision' => [
|
|
|
|
|
'champs' => [
|
|
|
|
|
'base' => [
|
|
|
|
|
'code_3166_2' => 'iso_territoire',
|
|
|
|
|
'type' => 'categorie',
|
|
|
|
|
'country' => 'iso_pays',
|
|
|
|
|
'parent' => 'iso_parent',
|
|
|
|
|
'depth' => 'profondeur_type',
|
|
|
|
|
'label' => 'iso_titre',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
'index' => 'subdivisions',
|
|
|
|
|
),
|
|
|
|
|
'extras' => array(
|
|
|
|
|
'code' => array(
|
|
|
|
|
'champs' => array(
|
|
|
|
|
],
|
|
|
|
|
'extras' => [
|
|
|
|
|
'code' => [
|
|
|
|
|
'champs' => [
|
|
|
|
|
'extra' => 'type_alter',
|
|
|
|
|
'valeur' => 'code_alter',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
'index' => 'codes_alternatifs',
|
|
|
|
|
'cle_iso' => 'code_iso',
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
'infrasubdivision' => array(
|
|
|
|
|
'champs' => array(
|
|
|
|
|
'base' => array(
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
'infrasubdivision' => [
|
|
|
|
|
'champs' => [
|
|
|
|
|
'base' => [
|
|
|
|
|
'code' => 'iso_territoire',
|
|
|
|
|
'type' => 'categorie',
|
|
|
|
|
'country' => 'iso_pays',
|
|
|
|
@ -127,32 +125,32 @@ function territoire_configurer($type_configuration = 'statique') {
|
|
|
|
|
'depth' => 'profondeur_type',
|
|
|
|
|
'label' => 'iso_titre',
|
|
|
|
|
'parent_alt1' => 'iso_parent_alt',
|
|
|
|
|
),
|
|
|
|
|
'extras' => array(
|
|
|
|
|
'info' => array(
|
|
|
|
|
],
|
|
|
|
|
'extras' => [
|
|
|
|
|
'info' => [
|
|
|
|
|
'lat' => 'latitude',
|
|
|
|
|
'lon' => 'longitude',
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
'index' => 'infrasubdivisions',
|
|
|
|
|
),
|
|
|
|
|
'extras' => array(
|
|
|
|
|
'code' => array(
|
|
|
|
|
'champs' => array(
|
|
|
|
|
],
|
|
|
|
|
'extras' => [
|
|
|
|
|
'code' => [
|
|
|
|
|
'champs' => [
|
|
|
|
|
'extra' => 'type_alter',
|
|
|
|
|
'valeur' => 'code_alter',
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
'index' => 'codes_alternatifs',
|
|
|
|
|
'cle_iso' => 'code_iso',
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
];
|
|
|
|
|
} else {
|
|
|
|
|
// Liste des objets associables à un territoire
|
|
|
|
|
$configuration = array(
|
|
|
|
|
'association_objets' => array(),
|
|
|
|
|
);
|
|
|
|
|
$configuration = [
|
|
|
|
|
'association_objets' => [],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $configuration;
|
|
|
|
@ -164,26 +162,25 @@ function territoire_configurer($type_configuration = 'statique') {
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param array $options Tableau des options de peuplement:
|
|
|
|
|
* - `force` : si `true` force le repeuplement même si le sha est identique (`false` par défaut).
|
|
|
|
|
* - `extras`: tableau des types d'extras à peupler soit `code` pour les codes alternatifs
|
|
|
|
|
* et `info` pour le caractéristiques (table spip_territoires_extras)
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param null|string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param null|array $options Tableau des options de peuplement:
|
|
|
|
|
* - `force` : si `true` force le repeuplement même si le sha est identique (`false` par défaut).
|
|
|
|
|
* - `extras`: tableau des types d'extras à peupler soit `code` pour les codes alternatifs
|
|
|
|
|
* et `info` pour le caractéristiques (table spip_territoires_extras)
|
|
|
|
|
*
|
|
|
|
|
* @return array Tableau retour de la fonction permettant de connaitre le résultat du traitement (utile pour l'affichage
|
|
|
|
|
* du message dans le formulaire de peuplement).
|
|
|
|
|
*/
|
|
|
|
|
function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
|
|
|
|
|
function territoire_peupler(string $type, ?string $pays, ?array $options = []) : array {
|
|
|
|
|
// On initialise le retour à une erreur nok
|
|
|
|
|
$retour = array(
|
|
|
|
|
$retour = [
|
|
|
|
|
'ok' => false,
|
|
|
|
|
'arg' => false,
|
|
|
|
|
'sha' => false,
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// Détermination du mode de peuplement et insertion dans le retour pour les affichages
|
|
|
|
|
$peuplement_asynchrone = isset($options['iteration']);
|
|
|
|
@ -210,13 +207,13 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
$timeout = time() + _TERRITOIRE_TIME_OUT_PEUPLEMENT;
|
|
|
|
|
|
|
|
|
|
// Initialisation à vide des variables à transmettre d'une itération à une autre.
|
|
|
|
|
$ids = array();
|
|
|
|
|
$extras = array();
|
|
|
|
|
$meta_extras = array();
|
|
|
|
|
$ids = [];
|
|
|
|
|
$extras = [];
|
|
|
|
|
$meta_extras = [];
|
|
|
|
|
$sha_type = '';
|
|
|
|
|
$territoires = array();
|
|
|
|
|
$sauvegardes = array();
|
|
|
|
|
$timestamp = array();
|
|
|
|
|
$territoires = [];
|
|
|
|
|
$sauvegardes = [];
|
|
|
|
|
$timestamp = [];
|
|
|
|
|
|
|
|
|
|
// Phase 1 :
|
|
|
|
|
// - Acquisition des données et vérification de l'utilité de les recharger ou pas.
|
|
|
|
@ -231,7 +228,7 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
|
|
|
|
|
// Acquisition de la collection complete du couple (type, pays) via l'API REST
|
|
|
|
|
// -- on précise si le mode est asynchrone afin de mettre en cache la collection dans ce cas.
|
|
|
|
|
$collection = territoires_acquerir($type, $pays, array('cacher' => $peuplement_asynchrone));
|
|
|
|
|
$collection = territoires_acquerir($type, $pays, ['cacher' => $peuplement_asynchrone]);
|
|
|
|
|
|
|
|
|
|
// On extrait la liste complète des territoires
|
|
|
|
|
if (!empty($collection[$configuration['champs']['index']])) {
|
|
|
|
@ -255,7 +252,7 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
// On sait que le traitement va continuer on peut continuer les étapes de préalables à l'insertion.
|
|
|
|
|
// -- on préserve les éditions manuelles et les liens pour les réinjecter ensuite lors du
|
|
|
|
|
// rechargement
|
|
|
|
|
$sauvegardes = territoires_preserver($type, $pays, array('cacher' => $peuplement_asynchrone));
|
|
|
|
|
$sauvegardes = territoires_preserver($type, $pays, ['cacher' => $peuplement_asynchrone]);
|
|
|
|
|
$timestamp['preservation'] = microtime(true);
|
|
|
|
|
|
|
|
|
|
// -- on vide les territoires avant de les remettre (inutile de gérer les erreurs
|
|
|
|
@ -277,11 +274,11 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
// dans des caches sécurisés.
|
|
|
|
|
// -- lecture du cache de la collection complète correspondant au couple (type, pays).
|
|
|
|
|
include_spip('inc/ezcache_cache');
|
|
|
|
|
$cache = array(
|
|
|
|
|
$cache = [
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'fonction' => 'collection'
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
$collection = cache_lire('territoires', 'asynchrone', $cache);
|
|
|
|
|
|
|
|
|
|
// -- lecture du cache des sauvegardes.
|
|
|
|
@ -375,20 +372,20 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
and (time() >= $timeout)
|
|
|
|
|
) {
|
|
|
|
|
// Consignation du contexte dans un cache
|
|
|
|
|
$contexte = array(
|
|
|
|
|
$contexte = [
|
|
|
|
|
'cle_fin' => $_cle,
|
|
|
|
|
'ids_crees' => $ids,
|
|
|
|
|
'extras_crees' => $extras,
|
|
|
|
|
'meta_extras' => $meta_extras,
|
|
|
|
|
'sha_type' => $sha_type,
|
|
|
|
|
'timestamp' => $timestamp,
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
include_spip('inc/ezcache_cache');
|
|
|
|
|
$cache = array(
|
|
|
|
|
$cache = [
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'fonction' => 'contexte'
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
cache_ecrire('territoires', 'asynchrone', $cache, $contexte);
|
|
|
|
|
|
|
|
|
|
// Consignation du nombre d'itérations dans le retour de la fonction
|
|
|
|
@ -430,42 +427,42 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
|
|
|
|
|
// On rétablit les liens vers les territoires et les logos
|
|
|
|
|
// -- les liens avec les autres objets
|
|
|
|
|
$config_lien = array(
|
|
|
|
|
$config_lien = [
|
|
|
|
|
'table' => 'spip_territoires_liens',
|
|
|
|
|
'id_table' => 'id_territoire'
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
liens_retablir('liens', $sauvegardes, $ids, $config_lien);
|
|
|
|
|
|
|
|
|
|
// -- les liens avec les logos
|
|
|
|
|
$config_lien = array(
|
|
|
|
|
$config_lien = [
|
|
|
|
|
'table' => 'spip_documents_liens',
|
|
|
|
|
'id_table' => 'id_objet'
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
liens_retablir('logos', $sauvegardes, $ids, $config_lien);
|
|
|
|
|
$timestamp['retablissement'] = microtime(true);
|
|
|
|
|
|
|
|
|
|
// Permettre à d'autres plugins de compléter le peuplement.
|
|
|
|
|
// -- par exemple le plugin Contours rétablit les liens vers les contours GIS (spip_liens_gis),
|
|
|
|
|
// les objets GIS étant conservés si ils existent déjà.
|
|
|
|
|
$flux = array(
|
|
|
|
|
'args' => array(
|
|
|
|
|
$flux = [
|
|
|
|
|
'args' => [
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'sauvegardes' => $sauvegardes,
|
|
|
|
|
'ids_crees' => $ids,
|
|
|
|
|
),
|
|
|
|
|
'data' => array()
|
|
|
|
|
);
|
|
|
|
|
],
|
|
|
|
|
'data' => []
|
|
|
|
|
];
|
|
|
|
|
pipeline('post_peupler_territoire', $flux);
|
|
|
|
|
|
|
|
|
|
// On stocke les informations de chargement dans une meta.
|
|
|
|
|
$contenu = array(
|
|
|
|
|
$contenu = [
|
|
|
|
|
'sha' => $sha_type,
|
|
|
|
|
'nbr' => count($territoires),
|
|
|
|
|
'maj' => date('Y-m-d H:i:s'),
|
|
|
|
|
'lic' => isset($collection['credits']) ? $collection['credits'] : array(),
|
|
|
|
|
'lic' => isset($collection['credits']) ? $collection['credits'] : [],
|
|
|
|
|
'ext' => $meta_extras,
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
ecrire_config("{$meta}/{$consigne}", $contenu);
|
|
|
|
|
$timestamp['fin'] = microtime(true);
|
|
|
|
|
$erreur = false;
|
|
|
|
@ -493,10 +490,10 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
// Si on arrive à ce point de sortie, c'est que le traitement est complètement fini ou est en erreur.
|
|
|
|
|
// En mode asynchrone, dans les deux cas, on supprime les caches.
|
|
|
|
|
if ($peuplement_asynchrone) {
|
|
|
|
|
$filtres = array(
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
);
|
|
|
|
|
$filtres = [
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
];
|
|
|
|
|
$caches = cache_repertorier('territoires', 'asynchrone', $filtres);
|
|
|
|
|
if ($caches) {
|
|
|
|
|
cache_vider('territoires', 'asynchrone', $caches);
|
|
|
|
@ -533,27 +530,26 @@ function territoire_peupler($type, $pays, $options = array()) {
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param array $options Tableau des options de peuplement:
|
|
|
|
|
* - `force` : si `true` force le repeuplement même si le sha est identique (`false` par défaut).
|
|
|
|
|
* - `extras`: tableau des types d'extras à peupler soit `code` pour les codes alternatifs
|
|
|
|
|
* et `info` pour le caractéristiques (table spip_territoires_extras)
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param null|array $options Tableau des options de peuplement:
|
|
|
|
|
* - `force` : si `true` force le repeuplement même si le sha est identique (`false` par défaut).
|
|
|
|
|
* - `extras`: tableau des types d'extras à peupler soit `code` pour les codes alternatifs
|
|
|
|
|
* et `info` pour le caractéristiques (table spip_territoires_extras)
|
|
|
|
|
*
|
|
|
|
|
* @return array Tableau retour de la fonction permettant de connaitre le résultat du traitement (utile pour l'affichage
|
|
|
|
|
* du message dans le formulaire de peuplement).
|
|
|
|
|
*/
|
|
|
|
|
function territoire_peupler_asynchrone($type, $pays, $options = array()) {
|
|
|
|
|
|
|
|
|
|
function territoire_peupler_asynchrone(string $type, string $pays, ?array $options = []) : array {
|
|
|
|
|
// On initialise le retour à une ok ce qui est le cas le plus fréquent car on ne fait que créer le job.
|
|
|
|
|
$retour = array(
|
|
|
|
|
$retour = [
|
|
|
|
|
'ok' => true,
|
|
|
|
|
'arg' => false,
|
|
|
|
|
'sha' => false,
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'sync' => false
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
include_spip('inc/territoires_services');
|
|
|
|
|
if (type_pays_est_valide($type, $pays)) {
|
|
|
|
@ -590,26 +586,25 @@ function territoire_peupler_asynchrone($type, $pays, $options = array()) {
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param array $options Tableau des options de dépeuplement:
|
|
|
|
|
* - `force` : si `true` force le vidage même si la meta n'est pas présente (cas d'erreur
|
|
|
|
|
* sur timeout par exemple). La valeur par défaut est `false`.
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param null|string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
* @param null|array $options Tableau des options de dépeuplement:
|
|
|
|
|
* - `force` : si `true` force le vidage même si la meta n'est pas présente (cas d'erreur
|
|
|
|
|
* sur timeout par exemple). La valeur par défaut est `false`.
|
|
|
|
|
*
|
|
|
|
|
* @return array Tableau retour de la fonction permettant de connaitre le résultat du traitement (utile pour l'affichage
|
|
|
|
|
* du message dans le formulaire de peuplement).
|
|
|
|
|
*/
|
|
|
|
|
function territoire_depeupler($type, $pays = '', $options = array()) {
|
|
|
|
|
|
|
|
|
|
function territoire_depeupler(string $type, ?string $pays = '', ?array $options = []) : array {
|
|
|
|
|
// On initialise le retour à une erreur nok
|
|
|
|
|
$retour = array(
|
|
|
|
|
$retour = [
|
|
|
|
|
'ok' => false,
|
|
|
|
|
'arg' => false,
|
|
|
|
|
'sha' => false,
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'sync' => true
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// Le vidage dépend du type :
|
|
|
|
|
// - type = zone ou country : on vide l'ensemble des régions du monde ou l'ensemble des pays
|
|
|
|
@ -628,9 +623,9 @@ function territoire_depeupler($type, $pays = '', $options = array()) {
|
|
|
|
|
// Avant de vider la table on réserve la liste des id de territoire qui seront supprimés
|
|
|
|
|
// de façon à vider ensuite les liens éventuels y compris ceux des logos.
|
|
|
|
|
$from = 'spip_territoires';
|
|
|
|
|
$where = array(
|
|
|
|
|
$where = [
|
|
|
|
|
'type=' . sql_quote($type),
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
if (type_est_subdivision($type)) {
|
|
|
|
|
$where[] = 'iso_pays=' . sql_quote($pays);
|
|
|
|
|
}
|
|
|
|
@ -644,29 +639,29 @@ function territoire_depeupler($type, $pays = '', $options = array()) {
|
|
|
|
|
|
|
|
|
|
if ($sql_ok !== false) {
|
|
|
|
|
// Vider les liens éventuels avec les logos (on gère pas d'erreur)
|
|
|
|
|
$where_logo = array(
|
|
|
|
|
$where_logo = [
|
|
|
|
|
sql_in('id_objet', $ids),
|
|
|
|
|
'objet=' . sql_quote('territoire')
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
sql_delete('spip_documents_liens', $where_logo);
|
|
|
|
|
|
|
|
|
|
// Vider les liens éventuels avec les autres objets (on gère pas d'erreur)
|
|
|
|
|
$where_lien = array(
|
|
|
|
|
$where_lien = [
|
|
|
|
|
sql_in('id_territoire', $ids),
|
|
|
|
|
);
|
|
|
|
|
];
|
|
|
|
|
sql_delete('spip_territoires_liens', $where_lien);
|
|
|
|
|
|
|
|
|
|
// Permettre à d'autres plugins de compléter le dépeuplement.
|
|
|
|
|
// -- par exemple le plugin Contours supprime les liens vers les contours GIS (spip_liens_gis),
|
|
|
|
|
// mais pas les objets GIS.
|
|
|
|
|
$flux = array(
|
|
|
|
|
'args' => array(
|
|
|
|
|
$flux = [
|
|
|
|
|
'args' => [
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'ids_territoire' => $ids,
|
|
|
|
|
),
|
|
|
|
|
'data' => array()
|
|
|
|
|
);
|
|
|
|
|
],
|
|
|
|
|
'data' => []
|
|
|
|
|
];
|
|
|
|
|
pipeline('post_depeupler_territoire', $flux);
|
|
|
|
|
|
|
|
|
|
// Supprimer la meta propre au pays même si le vidage des liens est en erreur.
|
|
|
|
@ -704,19 +699,18 @@ function territoire_depeupler($type, $pays = '', $options = array()) {
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $type Type de territoires. Prends les valeurs `zone`, `country`, `subdivision` ou `infrasubdivision`.
|
|
|
|
|
* @param array|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`.
|
|
|
|
|
* @param null|string $pays Code ISO 3166-1 alpha2 du pays si le type est `subdivision` ou `infrasubdivision` sinon une chaine vide.
|
|
|
|
|
*
|
|
|
|
|
* @return bool `true` si le territoire est chargé, `false` sinon.
|
|
|
|
|
*/
|
|
|
|
|
function territoire_est_peuple($type, $pays = '') {
|
|
|
|
|
|
|
|
|
|
function territoire_est_peuple(string $type, ?string $pays = '') : bool {
|
|
|
|
|
// Initialisation de la liste
|
|
|
|
|
$est_peuple = false;
|
|
|
|
|
|
|
|
|
|
// La liste des territoires chargés est en meta.
|
|
|
|
|
include_spip('inc/config');
|
|
|
|
|
$peuplement = lire_config('territoires_peuplement', array());
|
|
|
|
|
$peuplement = lire_config('territoires_peuplement', []);
|
|
|
|
|
if (
|
|
|
|
|
include_spip('inc/territoires_utils')
|
|
|
|
|
and type_est_subdivision($type)
|
|
|
|
@ -732,26 +726,24 @@ function territoire_est_peuple($type, $pays = '') {
|
|
|
|
|
return $est_peuple;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Fournit l'ascendance géographique d'un territoire, par consultation dans la base de données.
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @param string $iso_territoire Code ISO principal du territoire
|
|
|
|
|
* @param string|null $iso_parent Code ISO principal du parent direct du territoire concerné ou chaine vide sinon
|
|
|
|
|
* @param string $ordre Classement de la liste : `descendant`(défaut) ou `ascendant`.
|
|
|
|
|
* @param null|string $iso_parent Code ISO principal du parent direct du territoire concerné ou chaine vide sinon
|
|
|
|
|
* @param null|string $ordre Classement de la liste : `descendant`(défaut) ou `ascendant`.
|
|
|
|
|
*
|
|
|
|
|
* @return array Liste des territoires ascendants.
|
|
|
|
|
*/
|
|
|
|
|
function territoire_lire_ascendance($iso_territoire, $iso_parent = null, $ordre = 'descendant') {
|
|
|
|
|
|
|
|
|
|
$ascendance = array();
|
|
|
|
|
function territoire_lire_ascendance(string $iso_territoire, ?string $iso_parent = null, ?string $ordre = 'descendant') : array {
|
|
|
|
|
$ascendance = [];
|
|
|
|
|
|
|
|
|
|
// Si on ne passe pas le parent correspondant au territoire pour lequel on cherche l'ascendance
|
|
|
|
|
// alors on le cherche en base de données.
|
|
|
|
|
// Le fait de passer le parent est uniquement une optimisation.
|
|
|
|
|
if (\is_null($iso_parent)) {
|
|
|
|
|
if (null === $iso_parent) {
|
|
|
|
|
$iso_parent = sql_getfetsel('iso_parent', 'spip_territoires', 'iso_territoire=' . sql_quote($iso_territoire));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -760,8 +752,8 @@ function territoire_lire_ascendance($iso_territoire, $iso_parent = null, $ordre
|
|
|
|
|
$iso_parent_alt = sql_getfetsel('iso_parent_alt', 'spip_territoires', 'iso_territoire=' . sql_quote($iso_territoire));
|
|
|
|
|
|
|
|
|
|
while ($iso_parent) {
|
|
|
|
|
$select = array('id_territoire', 'iso_territoire', 'iso_parent', 'iso_parent_alt', 'nom_usage', 'type', 'categorie');
|
|
|
|
|
$where = array('iso_territoire=' . sql_quote($iso_parent));
|
|
|
|
|
$select = ['id_territoire', 'iso_territoire', 'iso_parent', 'iso_parent_alt', 'nom_usage', 'type', 'categorie'];
|
|
|
|
|
$where = ['iso_territoire=' . sql_quote($iso_parent)];
|
|
|
|
|
$territoire = sql_fetsel($select, 'spip_territoires', $where);
|
|
|
|
|
if ($territoire) {
|
|
|
|
|
$iso_parent_alt_parent = $territoire['iso_parent_alt'];
|
|
|
|
@ -776,7 +768,7 @@ function territoire_lire_ascendance($iso_territoire, $iso_parent = null, $ordre
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($ascendance and ($ordre === 'descendant')) {
|
|
|
|
|
if ($ascendance and ($ordre === 'descendant')) {
|
|
|
|
|
$ascendance = array_reverse($ascendance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -790,20 +782,19 @@ function territoire_lire_ascendance($iso_territoire, $iso_parent = null, $ordre
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
|
* @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.
|
|
|
|
|
* @param string $iso_territoire Code ISO principal du territoire
|
|
|
|
|
* @param null|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.
|
|
|
|
|
* @return array|string Information ou liste des informations.
|
|
|
|
|
*/
|
|
|
|
|
function territoire_extra_lire($iso_territoire, $information = '') {
|
|
|
|
|
|
|
|
|
|
function territoire_extra_lire(string $iso_territoire, ?string $information = '') {
|
|
|
|
|
// Initialisation de la sortie en fonction de la demande
|
|
|
|
|
$informations = $information ? '' : array();
|
|
|
|
|
$informations = $information ? '' : [];
|
|
|
|
|
|
|
|
|
|
// 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));
|
|
|
|
|
$select = ['extra', 'valeur'];
|
|
|
|
|
$where = ['iso_territoire=' . sql_quote($iso_territoire)];
|
|
|
|
|
$extras = sql_allfetsel($select, 'spip_territoires_extras', $where);
|
|
|
|
|
|
|
|
|
|
if ($extras) {
|
|
|
|
@ -828,14 +819,13 @@ function territoire_extra_lire($iso_territoire, $information = '') {
|
|
|
|
|
*
|
|
|
|
|
* @return bool `true` si le territoire est chargé, `false` sinon.
|
|
|
|
|
*/
|
|
|
|
|
function territoire_extra_est_peuple($type, $pays, $type_extra) {
|
|
|
|
|
|
|
|
|
|
function territoire_extra_est_peuple(string $type, string $pays, string $type_extra) : bool {
|
|
|
|
|
// Initialisation de la liste
|
|
|
|
|
$est_peuple = false;
|
|
|
|
|
|
|
|
|
|
// La liste des territoires chargés est en meta.
|
|
|
|
|
include_spip('inc/config');
|
|
|
|
|
$peuplement = lire_config('territoires_peuplement', array());
|
|
|
|
|
$peuplement = lire_config('territoires_peuplement', []);
|
|
|
|
|
if (
|
|
|
|
|
include_spip('inc/territoires_utils')
|
|
|
|
|
and type_est_subdivision($type)
|
|
|
|
|