Cohérence des prototypes des API.

Création d'un fichier pour les services.
v0_spip32
Eric Lupinacci 3 years ago
parent aa5b19f66d
commit 2cbd1e4998

@ -124,7 +124,6 @@ function formulaires_peupler_territoires_traiter() {
$action = _request('action_territoire');
if ($action === 'peupler_force') {
$action = 'peupler';
$forcer = true;
}
$types = _request('types');
$pays = _request('pays');

@ -41,13 +41,13 @@ function inc_requeter_isocode_dist($url_base, $collection, $filtres, $taille_max
}
// Options de la fonction de récupération du JSON
include_spip('inc/distant');
$options = array(
'transcoder' => true,
'taille_max' => _INC_DISTANT_MAX_SIZE * _TERRITOIRE_COEFF_MAX_DISTANT,
);
// Acquisition du flux de données
include_spip('inc/distant');
$flux = recuperer_url($url, $options);
$reponse = array();

@ -1,37 +0,0 @@
<?php
/**
* Ce fichier contient la fonction de test d'égalité d'un sha avec celui stocké en meta.
*
* @package SPIP\TERRITOIRES\API
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Compare le sha passé en argument pour le type de territoire concerné avec le sha stocké dans la meta
* pour cette même type.
*
* @api
*
* @param string $sha SHA à comparer à celui du type de territoire.
* @param string $meta Nom de la meta de consignation
* @param string $consigne Nom de la variable de consigne fonction du type et du pays éventuellement.
*
* @return bool `true` si le sha passé en argument est identique au sha stocké pour la table choisie, `false` sinon.
*/
function inc_sha_est_identique_dist($sha, $meta, $consigne) {
$sha_identique = false;
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
include_spip('inc/config');
$sha_stocke = lire_config("${meta}/${consigne}/sha", false);
if ($sha_stocke and ($sha === $sha_stocke)) {
$sha_identique = true;
}
return $sha_identique;
}

@ -17,7 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*
* @param string $type Type de territoires à peupler. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param string $pays Code ISO 3166-1 alpha2 du pays dont on veut peupler les subdivisions.
* N'est utilisé que si le type choisi est `subdivision`.
* N'est utilisé que si le type choisi est `subdivision` sinon est une chaine vide.
* @param array $options Options de peuplement (défaut à `false`) :
* - `force` : si `true` force le repeuplement même si le sha est identique.
* - `extras`: tableau des types d'extras à peupler soit `code` pour les codes alternatifs
@ -25,7 +25,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*
* @return array
*/
function territoire_peupler($type, $pays = '', $options = array()) {
function territoire_peupler($type, $pays, $options = array()) {
// On initialise le retour à une erreur nok
$retour = array(
@ -39,10 +39,9 @@ function territoire_peupler($type, $pays = '', $options = array()) {
// Le peuplement dépend du type :
// - type = zone ou country : on charge l'ensemble des régions du monde ou l'ensemble des pays
// - type = subdivision : il faut préciser le pays (code ISO alpha2) pour lequel on charge toutes les subdivisions
if (
include_spip('inc/territoires_utils')
and type_pays_est_valide($type, $pays)
) {
include_spip('inc/territoires_services');
include_spip('inc/territoires_utils');
if (type_pays_est_valide($type, $pays)) {
$erreur = true;
$type_identique = false;
@ -168,14 +167,14 @@ function territoire_peupler($type, $pays = '', $options = array()) {
'table' => 'spip_territoires_liens',
'id_table' => 'id_territoire'
);
territoire_retablir_lien('liens', $sauvegardes, $ids, $config_lien);
liens_retablir('liens', $sauvegardes, $ids, $config_lien);
// -- les liens avec les logos
$config_lien = array(
'table' => 'spip_documents_liens',
'id_table' => 'id_objet'
);
territoire_retablir_lien('logos', $sauvegardes, $ids, $config_lien);
liens_retablir('logos', $sauvegardes, $ids, $config_lien);
// 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),
@ -234,7 +233,7 @@ function territoire_peupler($type, $pays = '', $options = array()) {
*
* @param string $type Type de territoires à peupler. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param string $pays Code ISO 3166-1 alpha2 du pays dont on veut peupler les subdivisions.
* N'est utilisé que si le type choisi est `subdivision`.
* N'est utilisé que si le type choisi est `subdivision` sinon est une chaine vide.
*
* @return array Liste des code ISO 3166-1 alpha2 des pays chargés sous la forme [code] = nom multi.
*/
@ -252,6 +251,7 @@ function territoire_depeupler($type, $pays = '') {
// Le vidage dépend du type :
// - type = zone ou country : on vide l'ensemble des régions du monde ou l'ensemble des pays
// - type = subdivision : il faut préciser le pays (code ISO alpha2) pour lequel on vide toutes les subdivisions
include_spip('inc/territoires_services');
include_spip('inc/territoires_utils');
if (type_pays_est_valide($type, $pays)) {
// Inutile de vider une table vide
@ -339,7 +339,7 @@ function territoire_depeupler($type, $pays = '') {
* @api
*
* @param string $type Type de territoires à acquérie. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param array|string $pays Code ISO 3166-1 alpha2 du pays si le type est une subdivision.
* @param array|string $pays Code ISO 3166-1 alpha2 du pays si le type est une subdivision sinon une chaine vide.
*
* @return bool true si le territoire est chargé, false sinon.
*/
@ -369,13 +369,13 @@ function territoire_est_peuple($type, $pays = '') {
*
* @api
*
* @param string $type Type de territoires à acquérir. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param array|string $pays Code ISO 3166-1 alpha2 du pays si le type est une subdivision ou chaine vide sinon.
* @param string $type_extra Type d'extra. Prends les valeurs `code` ou `info`.
* @param string $type Type de territoires à acquérie. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param array|string $pays Code ISO 3166-1 alpha2 du pays si le type est une subdivision.
*
* @return bool true si le territoire est chargé, false sinon.
*/
function territoire_extra_est_peuple($type_extra, $type, $pays = '') {
function territoire_extra_est_peuple($type, $pays, $type_extra) {
// Initialisation de la liste
$est_peuple = false;
@ -396,40 +396,3 @@ function territoire_extra_est_peuple($type_extra, $type, $pays = '') {
return $est_peuple;
}
/**
* Rétablit les liens d'un type d'objet avec les territoires peuplés ou repeuplés.
*
* @internal
*
* @param string $type_lien Type de liens à restaurer : `liens` ou `logos`.
* @param array $sauvegardes Tableau des sauvegardes dans lequel puiser les liens existants
* @param array $ids_crees Tableau des nouveaux id des territoires.
* @param array $config_lien Tableau de configuration de la table de liens concernée composé des index:
* - `table` : nom complet de la table spip
* - `id_table` : nom du champ id du territoire
*
* @return void
*/
function territoire_retablir_lien($type_lien, $sauvegardes, $ids_crees, $config_lien) {
// On contruit la liste des enregistrements correspondant aux liens à rétablir.
$liens = array();
foreach ($sauvegardes[$type_lien] as $_lien) {
// identifier le code iso à partir de l'ancien id
$iso = array_search($_lien[$config_lien['id_table']], $sauvegardes['ids']);
// en déduire le nouvel id du territoire et le mettre à jour dans le tableau
// -- si l'iso n'est pas trouvé dans les nouveaux c'est que le territoire n'existe plus
// et qu'il ne faut pas rétablir les liens
if (isset($ids_crees[$iso])) {
$lien = $_lien;
$lien[$config_lien['id_table']] = $ids_crees[$iso];
$liens[] = $lien;
}
}
// Insertion des liens en une seule requête
if ($liens) {
sql_insertq_multi($config_lien['table'], $liens);
}
}

@ -0,0 +1,104 @@
<?php
/**
* Gestion du formulaire de chargement ou de vidage des territoires.
*
* @package SPIP\TERRITOIRES\API
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Vérifie si le couple (type, pays) est valide, à savoir, désigne bien un sous-ensemble cohérent de territoires.
* Les sous-ensembles valides sont :
* - les régions du monde
* - les pays
* - les subdivisions d'un pays.
*
* @internal
*
* @param string $type Type de territoires. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param string $pays Code ISO 3166-1 alpha2 du pays dont on veut peupler les subdivisions.
* N'est utilisé que si le type choisi est `subdivision`.
*
* @return bool `true` si le couple (type, pays) est valide, `false` sinon.
*/
function type_pays_est_valide($type, $pays = '') {
$est_valide = false;
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
if ($type === 'subdivision') {
if (strlen($pays) === 2) {
$est_valide = true;
}
} elseif (in_array($type, array('zone', 'country'))) {
$est_valide = true;
}
return $est_valide;
}
/**
* Compare le sha passé en argument pour le type de territoire concerné avec le sha stocké dans la meta
* pour cette même type.
*
* @api
*
* @param string $sha SHA à comparer à celui du type de territoire.
* @param string $meta Nom de la meta de consignation
* @param string $consigne Nom de la variable de consigne fonction du type et du pays éventuellement.
*
* @return bool `true` si le sha passé en argument est identique au sha stocké pour la table choisie, `false` sinon.
*/
function sha_est_identique($sha, $meta, $consigne) {
$sha_identique = false;
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
include_spip('inc/config');
$sha_stocke = lire_config("${meta}/${consigne}/sha", false);
if ($sha_stocke and ($sha === $sha_stocke)) {
$sha_identique = true;
}
return $sha_identique;
}
/**
* Rétablit les liens d'un type d'objet avec les territoires peuplés ou repeuplés.
*
* @internal
*
* @param string $type_lien Type de liens à restaurer : `liens` ou `logos`.
* @param array $sauvegardes Tableau des sauvegardes dans lequel puiser les liens existants
* @param array $ids_crees Tableau des nouveaux id des territoires.
* @param array $config_lien Tableau de configuration de la table de liens concernée composé des index:
* - `table` : nom complet de la table spip
* - `id_table` : nom du champ id du territoire
*
* @return void
*/
function liens_retablir($type_lien, $sauvegardes, $ids_crees, $config_lien) {
// On contruit la liste des enregistrements correspondant aux liens à rétablir.
$liens = array();
foreach ($sauvegardes[$type_lien] as $_lien) {
// identifier le code iso à partir de l'ancien id
$iso = array_search($_lien[$config_lien['id_table']], $sauvegardes['ids']);
// en déduire le nouvel id du territoire et le mettre à jour dans le tableau
// -- si l'iso n'est pas trouvé dans les nouveaux c'est que le territoire n'existe plus
// et qu'il ne faut pas rétablir les liens
if (isset($ids_crees[$iso])) {
$lien = $_lien;
$lien[$config_lien['id_table']] = $ids_crees[$iso];
$liens[] = $lien;
}
}
// Insertion des liens en une seule requête
if ($liens) {
sql_insertq_multi($config_lien['table'], $liens);
}
}

@ -229,36 +229,6 @@ function territoires_preserver($type, $pays = '') {
return $territoires;
}
/**
* Vérifie si le couple (type, pays) est valide, à savoir, désigne bien un sous-ensemble cohérent de territoires.
* Les sous-ensembles valides sont :
* - les régions du monde
* - les pays
* - les subdivisions d'un pays.
*
* @internal
*
* @param string $type Type de territoires. Prends les valeurs `zone`, `country` ou `subdivision`.
* @param string $pays Code ISO 3166-1 alpha2 du pays dont on veut peupler les subdivisions.
* N'est utilisé que si le type choisi est `subdivision`.
*
* @return bool `true` si le couple (type, pays) est valide, `false` sinon.
*/
function type_pays_est_valide($type, $pays = '') {
$est_valide = false;
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
if ($type === 'subdivision') {
if (strlen($pays) === 2) {
$est_valide = true;
}
} elseif (in_array($type, array('zone', 'country'))) {
$est_valide = true;
}
return $est_valide;
}
/**
* Fusionne les traductions d'une balise `<multi>` avec celles d'une autre balise `<multi>`.
* L'une des balise est considérée comme prioritaire ce qui permet de régler le cas où la même

@ -42,7 +42,7 @@ function territoires_affiche_milieu($flux) {
$territoire = objet_lire('territoire', $id_objet);
// -- tester si les extras 'info' sont chargées pour le type de territoire
include_spip('inc/territoire');
$extra_peuple = territoire_extra_est_peuple('info', $territoire['type'], $territoire['iso_pays']);
$extra_peuple = territoire_extra_est_peuple($territoire['type'], $territoire['iso_pays'], 'info');
if ($extra_peuple) {
$texte .= recuperer_fond(
'prive/squelettes/inclure/inc-territoire_extras_info',
@ -110,7 +110,7 @@ function territoires_affiche_gauche($flux) {
$territoire = objet_lire('territoire', $id_objet);
// -- tester si les extras 'info' sont chargées pour le type de territoire
include_spip('inc/territoire');
$extra_peuple = territoire_extra_est_peuple('code', $territoire['type'], $territoire['iso_pays']);
$extra_peuple = territoire_extra_est_peuple($territoire['type'], $territoire['iso_pays'], 'code');
if ($extra_peuple) {
$texte .= recuperer_fond(
'prive/squelettes/inclure/inc-territoire_extras_code',

Loading…
Cancel
Save