Chargement en cours formulaires/peupler_territoires.html +3 −2 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -6,7 +6,8 @@ <form method="post" action="#ENV{action}"> <div> #ACTION_FORMULAIRE{#ENV{action}} <p class="explication"><:territoires:explication_peupler_form:></p> [<p class="explication">(#ENV{_explication})</p>] [<p class="attention">(#ENV{_attention})</p>] <div class="editer-groupe">[ (#ENV{editable}) [(#SAISIE{radio, action_territoire, Chargement en cours Chargement en cours @@ -34,7 +35,7 @@ </div> [(#SAISIE{checkbox_flex, territoires, explication=#ENV{_explication}, explication=#ENV{_explication_checkbox}, label=<:territoires:label_peupler_territoire:>, data=#ENV{_donnees}, obligatoire=oui, Chargement en cours formulaires/peupler_territoires.php +97 −81 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -23,7 +23,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { * - `_actions_disable` : (affichage) liste des actions désactivées (`depeupler` si aucun pays n`est chargé) * - `_action_defaut` : (affichage) action sélectionnée par défaut, `peupler` * - `_donnees` : (affichage) liste des ensembles de territoires pouvant être chargés. * - `_explication` : (affichage) explication sur les infrasubdivisions. * - `_explication_infra` : (affichage) explication sur les infrasubdivisions. * - `_classe_conteneur` : (affichage) classe pour forcer un conteneur flex pour les checkbox. * - `_max_choix` : (affichage) limiter le nombre de choix à 1 pour les infrasubdivisions. */ Chargement en cours @@ -32,6 +32,8 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { $valeurs = [ '_groupe' => $groupe, '_explication' => '', '_attention' => '', '_explication_infra' => '', '_actions_territoire' => [], '_action_defaut' => 'charger', '_actions_disable' => [], Chargement en cours @@ -42,6 +44,15 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { 'editable' => true, ]; // Vérifier que la version du serveur est compatible avec celle du plugin Territoires. // Si ce n'est pas le cas, on affiche un message d'erreur et on rend le formulaire non éditable. if ( include_spip('territoires/territoires') and territoires_feed_serveur_est_compatible('territoires') ) { // Explication générale du formulaire $valeurs['_explication'] = _T('territoires:explication_peupler_form'); // Lister les actions sur les territoires // -- le groupe 'zone_country' des régions et pays ne doit jamais être supprimé $valeurs['_actions_territoire'] = [ Chargement en cours Chargement en cours @@ -93,7 +104,7 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { if ($groupe === 'subdivision') { $valeurs['_classe_conteneur'] = 'pleine_largeur'; } elseif ($groupe === 'infrasubdivision') { $valeurs['_explication'] = _T('territoires:explication_infrasubdivision_territoire'); $valeurs['_explication_infra'] = _T('territoires:explication_infrasubdivision_territoire'); $valeurs['_max_choix'] = 1; } elseif ($groupe === 'protected_area') { $valeurs['_choix_multi_col'] = 3; Chargement en cours Chargement en cours @@ -136,6 +147,11 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { if (!$valeurs['_donnees']) { $valeurs['editable'] = false; } } else { // Expliquer le problème $valeurs['_attention'] = _T('territoires:msg_serveur_erreur'); $valeurs['editable'] = false; } return $valeurs; } Chargement en cours inc/requeter_isocode.php +10 −8 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -2,7 +2,7 @@ /** * Ce fichier contient la fonction de requêtage des données du plugin Nomenclatures via son API REST. * * @package SPIP\TERRITOIRES\API * @package SPIP\TERRITOIRES\SERVICES */ if (!defined('_ECRIRE_INC_VERSION')) { return; Chargement en cours @@ -27,8 +27,8 @@ if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) { * @uses recuperer_url() * * @param string $url_base Endpoint du serveur Nomenclatures * @param string $collection Nom de la collection * @param array $filtres Tableau des filtres à appliquer à la collection * @param null|string $collection Nom de la collection ou vide si on veut récupérer l'index des collections du serveur. * @param null|array $filtres Tableau des filtres à appliquer à la collection * @param null|int $taille_max Taille maximale du flux récupéré suite à la requête. * La valeur entière `0` désigne la taille par défaut. * Chargement en cours @@ -39,10 +39,12 @@ if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) { * La valeur 200 permet de tester une requête réussie et dans ce cas * l'index `page` du flux reçu est retourné après décodage JSON. */ function inc_requeter_isocode_dist(string $url_base, string $collection, array $filtres, ?int $taille_max = 0) : array { function inc_requeter_isocode_dist(string $url_base, ?string $collection = '', ?array $filtres = [], ?int $taille_max = 0) : array { // Calcul de l'url complète // -- initialisation $url = "{$url_base}/{$collection}"; $url = $collection ? "{$url_base}/{$collection}" : $url_base; // -- ajout des filtres foreach ($filtres as $_critere => $_valeur) { $url .= "&{$_critere}={$_valeur}"; Chargement en cours lang/territoires_fr.php +2 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -59,7 +59,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ // S 'msg_vider_zone_erreur' => 'Une erreur s\'est produite lors du vidage des régions du monde.', 'msg_videer_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', 'msg_vider_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', 'msg_vider_zone_succes' => 'Les régions du monde ont bien été vidées.', 'msg_charger_zone_erreur' => 'Une erreur s\'est produite lors du peuplement des régions du monde.', 'msg_charger_zone_notice' => 'Aucune mise à jour n\'est nécessaire pour les régions du monde.', Chargement en cours Chargement en cours @@ -89,6 +89,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ 'msg_charger_infrasubdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', 'msg_charger_infrasubdivision_succes' => 'Les infra-subdivisions du ou des pays « @pays@ » ont bien été chargées.', 'msg_succes_asynchrone' => 'Certains peuplements ont été lancés en asynchrone. Ils seront disponibles dans quelques instants.', 'msg_serveur_erreur' => 'Le serveur Nomenclatures configuré n\'est pas compatible avec la version courante du plugin Territoires.', // T 'territoires_titre' => 'Territoires', Chargement en cours territoires/territoires.php +56 −0 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff <?php /** * Ce fichier contient les fonctions de service nécessitées par l'utilisation du plugin `Territoires`. * * @package SPIP\TERRITOIRES\SERVICES */ if (!defined('_ECRIRE_INC_VERSION')) { return; Chargement en cours @@ -13,6 +15,13 @@ if (!defined('_TERRITOIRE_URL_BASE_ISOCODE')) { define('_TERRITOIRE_URL_BASE_ISOCODE', 'https://contrib.spip.net/http.api/ezrest'); } if (!defined('_TERRITOIRE_COMPATIBILITE_ISOCODE')) { /** * Endpoint de l'API REST hébergeant les données de Nomenclatures. */ define('_TERRITOIRE_COMPATIBILITE_ISOCODE', ['vmin' => '2.0.1']); } // ----------------------------------------------------------------------- // ------------------- SERVICES RELATIFS AUX FEEDS ----------------------- // ----------------------------------------------------------------------- Chargement en cours Chargement en cours @@ -114,6 +123,53 @@ function territoires_feed_acquerir(string $plugin, array $categories_feed) : arr return $feeds[$index] ?? []; } /** * Liste les feeds fournissant des informations de territoires d'une nature donnée exprimée sous la forme * de catégories. * * @param string $plugin Préfixe du plugin appelant. * * @return bool `true` si le serveur est compatible avec la version du plugin appelant ou `false` sinon. */ function territoires_feed_serveur_est_compatible(string $plugin) : bool { // Initialisation de la sortie et de l'index des collections du serveur. $est_compatible = false; static $index_collections = []; // Identifier l'url de base pour le plugin appelant include_spip('territoires/territoires'); $url_base = territoires_feed_initialiser_url_base($plugin); // Acquérir l'index des collections du serveur if (!$index_collections) { // Appel à l'API REST de Nomenclatures $requeter = charger_fonction('requeter_isocode', 'inc'); $reponse = $requeter($url_base); if ((int) ($reponse['erreur']['status']) === 200) { $index_collections = $reponse['donnees']; } } // Vérifier la compatibilité avec le plugin Nomenclatures qui fournit les données. $version_serveur = $index_collections['isocode']['fournisseur']['version'] ?? ''; if ($version_serveur) { // on collecte les bornes min et max de compatibilité $vmin = _TERRITOIRE_COMPATIBILITE_ISOCODE['vmin'] ?? '0.0.0'; $vmax = _TERRITOIRE_COMPATIBILITE_ISOCODE['vmax'] ?? '999.999.999'; // vérifier si la version du serveur est comprise entre les bornes admissibles include_spip('inc/utils'); if ( spip_version_compare($vmin, $version_serveur, '<=') and spip_version_compare($vmax, $version_serveur, '>=') ) { $est_compatible = true; } } return $est_compatible; } // ----------------------------------------------------------------------- // ------------ SERVICES RELATIFS AUX UNITES DE PEUPLEMENT --------------- // ----------------------------------------------------------------------- Chargement en cours Chargement en cours
formulaires/peupler_territoires.html +3 −2 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -6,7 +6,8 @@ <form method="post" action="#ENV{action}"> <div> #ACTION_FORMULAIRE{#ENV{action}} <p class="explication"><:territoires:explication_peupler_form:></p> [<p class="explication">(#ENV{_explication})</p>] [<p class="attention">(#ENV{_attention})</p>] <div class="editer-groupe">[ (#ENV{editable}) [(#SAISIE{radio, action_territoire, Chargement en cours Chargement en cours @@ -34,7 +35,7 @@ </div> [(#SAISIE{checkbox_flex, territoires, explication=#ENV{_explication}, explication=#ENV{_explication_checkbox}, label=<:territoires:label_peupler_territoire:>, data=#ENV{_donnees}, obligatoire=oui, Chargement en cours
formulaires/peupler_territoires.php +97 −81 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -23,7 +23,7 @@ if (!defined('_ECRIRE_INC_VERSION')) { * - `_actions_disable` : (affichage) liste des actions désactivées (`depeupler` si aucun pays n`est chargé) * - `_action_defaut` : (affichage) action sélectionnée par défaut, `peupler` * - `_donnees` : (affichage) liste des ensembles de territoires pouvant être chargés. * - `_explication` : (affichage) explication sur les infrasubdivisions. * - `_explication_infra` : (affichage) explication sur les infrasubdivisions. * - `_classe_conteneur` : (affichage) classe pour forcer un conteneur flex pour les checkbox. * - `_max_choix` : (affichage) limiter le nombre de choix à 1 pour les infrasubdivisions. */ Chargement en cours @@ -32,6 +32,8 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { $valeurs = [ '_groupe' => $groupe, '_explication' => '', '_attention' => '', '_explication_infra' => '', '_actions_territoire' => [], '_action_defaut' => 'charger', '_actions_disable' => [], Chargement en cours @@ -42,6 +44,15 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { 'editable' => true, ]; // Vérifier que la version du serveur est compatible avec celle du plugin Territoires. // Si ce n'est pas le cas, on affiche un message d'erreur et on rend le formulaire non éditable. if ( include_spip('territoires/territoires') and territoires_feed_serveur_est_compatible('territoires') ) { // Explication générale du formulaire $valeurs['_explication'] = _T('territoires:explication_peupler_form'); // Lister les actions sur les territoires // -- le groupe 'zone_country' des régions et pays ne doit jamais être supprimé $valeurs['_actions_territoire'] = [ Chargement en cours Chargement en cours @@ -93,7 +104,7 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { if ($groupe === 'subdivision') { $valeurs['_classe_conteneur'] = 'pleine_largeur'; } elseif ($groupe === 'infrasubdivision') { $valeurs['_explication'] = _T('territoires:explication_infrasubdivision_territoire'); $valeurs['_explication_infra'] = _T('territoires:explication_infrasubdivision_territoire'); $valeurs['_max_choix'] = 1; } elseif ($groupe === 'protected_area') { $valeurs['_choix_multi_col'] = 3; Chargement en cours Chargement en cours @@ -136,6 +147,11 @@ function formulaires_peupler_territoires_charger(string $groupe) : array { if (!$valeurs['_donnees']) { $valeurs['editable'] = false; } } else { // Expliquer le problème $valeurs['_attention'] = _T('territoires:msg_serveur_erreur'); $valeurs['editable'] = false; } return $valeurs; } Chargement en cours
inc/requeter_isocode.php +10 −8 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -2,7 +2,7 @@ /** * Ce fichier contient la fonction de requêtage des données du plugin Nomenclatures via son API REST. * * @package SPIP\TERRITOIRES\API * @package SPIP\TERRITOIRES\SERVICES */ if (!defined('_ECRIRE_INC_VERSION')) { return; Chargement en cours @@ -27,8 +27,8 @@ if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) { * @uses recuperer_url() * * @param string $url_base Endpoint du serveur Nomenclatures * @param string $collection Nom de la collection * @param array $filtres Tableau des filtres à appliquer à la collection * @param null|string $collection Nom de la collection ou vide si on veut récupérer l'index des collections du serveur. * @param null|array $filtres Tableau des filtres à appliquer à la collection * @param null|int $taille_max Taille maximale du flux récupéré suite à la requête. * La valeur entière `0` désigne la taille par défaut. * Chargement en cours @@ -39,10 +39,12 @@ if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) { * La valeur 200 permet de tester une requête réussie et dans ce cas * l'index `page` du flux reçu est retourné après décodage JSON. */ function inc_requeter_isocode_dist(string $url_base, string $collection, array $filtres, ?int $taille_max = 0) : array { function inc_requeter_isocode_dist(string $url_base, ?string $collection = '', ?array $filtres = [], ?int $taille_max = 0) : array { // Calcul de l'url complète // -- initialisation $url = "{$url_base}/{$collection}"; $url = $collection ? "{$url_base}/{$collection}" : $url_base; // -- ajout des filtres foreach ($filtres as $_critere => $_valeur) { $url .= "&{$_critere}={$_valeur}"; Chargement en cours
lang/territoires_fr.php +2 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -59,7 +59,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ // S 'msg_vider_zone_erreur' => 'Une erreur s\'est produite lors du vidage des régions du monde.', 'msg_videer_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', 'msg_vider_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', 'msg_vider_zone_succes' => 'Les régions du monde ont bien été vidées.', 'msg_charger_zone_erreur' => 'Une erreur s\'est produite lors du peuplement des régions du monde.', 'msg_charger_zone_notice' => 'Aucune mise à jour n\'est nécessaire pour les régions du monde.', Chargement en cours Chargement en cours @@ -89,6 +89,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ 'msg_charger_infrasubdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', 'msg_charger_infrasubdivision_succes' => 'Les infra-subdivisions du ou des pays « @pays@ » ont bien été chargées.', 'msg_succes_asynchrone' => 'Certains peuplements ont été lancés en asynchrone. Ils seront disponibles dans quelques instants.', 'msg_serveur_erreur' => 'Le serveur Nomenclatures configuré n\'est pas compatible avec la version courante du plugin Territoires.', // T 'territoires_titre' => 'Territoires', Chargement en cours
territoires/territoires.php +56 −0 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff <?php /** * Ce fichier contient les fonctions de service nécessitées par l'utilisation du plugin `Territoires`. * * @package SPIP\TERRITOIRES\SERVICES */ if (!defined('_ECRIRE_INC_VERSION')) { return; Chargement en cours @@ -13,6 +15,13 @@ if (!defined('_TERRITOIRE_URL_BASE_ISOCODE')) { define('_TERRITOIRE_URL_BASE_ISOCODE', 'https://contrib.spip.net/http.api/ezrest'); } if (!defined('_TERRITOIRE_COMPATIBILITE_ISOCODE')) { /** * Endpoint de l'API REST hébergeant les données de Nomenclatures. */ define('_TERRITOIRE_COMPATIBILITE_ISOCODE', ['vmin' => '2.0.1']); } // ----------------------------------------------------------------------- // ------------------- SERVICES RELATIFS AUX FEEDS ----------------------- // ----------------------------------------------------------------------- Chargement en cours Chargement en cours @@ -114,6 +123,53 @@ function territoires_feed_acquerir(string $plugin, array $categories_feed) : arr return $feeds[$index] ?? []; } /** * Liste les feeds fournissant des informations de territoires d'une nature donnée exprimée sous la forme * de catégories. * * @param string $plugin Préfixe du plugin appelant. * * @return bool `true` si le serveur est compatible avec la version du plugin appelant ou `false` sinon. */ function territoires_feed_serveur_est_compatible(string $plugin) : bool { // Initialisation de la sortie et de l'index des collections du serveur. $est_compatible = false; static $index_collections = []; // Identifier l'url de base pour le plugin appelant include_spip('territoires/territoires'); $url_base = territoires_feed_initialiser_url_base($plugin); // Acquérir l'index des collections du serveur if (!$index_collections) { // Appel à l'API REST de Nomenclatures $requeter = charger_fonction('requeter_isocode', 'inc'); $reponse = $requeter($url_base); if ((int) ($reponse['erreur']['status']) === 200) { $index_collections = $reponse['donnees']; } } // Vérifier la compatibilité avec le plugin Nomenclatures qui fournit les données. $version_serveur = $index_collections['isocode']['fournisseur']['version'] ?? ''; if ($version_serveur) { // on collecte les bornes min et max de compatibilité $vmin = _TERRITOIRE_COMPATIBILITE_ISOCODE['vmin'] ?? '0.0.0'; $vmax = _TERRITOIRE_COMPATIBILITE_ISOCODE['vmax'] ?? '999.999.999'; // vérifier si la version du serveur est comprise entre les bornes admissibles include_spip('inc/utils'); if ( spip_version_compare($vmin, $version_serveur, '<=') and spip_version_compare($vmax, $version_serveur, '>=') ) { $est_compatible = true; } } return $est_compatible; } // ----------------------------------------------------------------------- // ------------ SERVICES RELATIFS AUX UNITES DE PEUPLEMENT --------------- // ----------------------------------------------------------------------- Chargement en cours