From 36de43205a7819c090ff5caa1e4da83e3e212de0 Mon Sep 17 00:00:00 2001 From: Eric Lupinacci Date: Thu, 22 Dec 2022 19:27:26 +0100 Subject: [PATCH] =?UTF-8?q?Actions=20qualit=C3=A9=20sur=20le=20code=20:=20?= =?UTF-8?q?nettoyage,=20am=C3=A9lioration,=20typage=20des=20fonctions,=20P?= =?UTF-8?q?HPDoc=20syst=C3=A9matique.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action/peupler_territoires.php | 15 +- base/territoires.php | 90 ++++---- ezcache/territoires.php | 22 +- formulaires/editer_territoire.php | 141 +++++------- formulaires/peupler_territoires.php | 118 +++++----- inc/requeter_isocode.php | 19 +- inc/territoire.php | 334 ++++++++++++++-------------- inc/territoires_services.php | 19 +- inc/territoires_utils.php | 160 +++++++------ lang/paquet-territoires_fr.php | 8 +- lang/territoire_extra_fr.php | 5 +- lang/territoire_fr.php | 5 +- lang/territoires_fr.php | 65 +++--- paquet.xml | 2 +- territoires_administrations.php | 95 ++++---- territoires_autorisations.php | 226 +++++++++++-------- territoires_fonctions.php | 16 +- territoires_pipelines.php | 50 ++--- 18 files changed, 690 insertions(+), 700 deletions(-) diff --git a/action/peupler_territoires.php b/action/peupler_territoires.php index c7ae9da..dad66f5 100644 --- a/action/peupler_territoires.php +++ b/action/peupler_territoires.php @@ -9,37 +9,38 @@ if (!defined('_ECRIRE_INC_VERSION')) { return; } - /** * Cette action permet peupler certains ensembles de territoires contenant un nombre important d'éléments. * Elle est appelée par l'API `territoire_peupler_asynchrone()`. * * Elle ne nécessite les mêmes arguments que la fonction de peuplement. * + * @uses territoire_peupler() + * @uses territoire_peupler_asynchrone() + * * @return void */ -function action_peupler_territoires_dist() { - +function action_peupler_territoires_dist() : void { // Securisation et autorisation. // L'argument attendu est la page à recharger ou sinon vide pour toutes les pages. $securiser_action = charger_fonction('securiser_action', 'inc'); $arguments = $securiser_action(); // Structuration des arguments de peuplement - $arguments = explode(':', $arguments); if ( - (count($arguments) > 1) + ($arguments = explode(':', $arguments)) + and (count($arguments) > 1) and ($type = $arguments[0]) and ($pays = $arguments[1]) ) { // Identification des options : par défaut on passe l'itération à 0 - $options = array('iteration' => 0); + $options = ['iteration' => 0]; unset($arguments[0], $arguments[1]); foreach ($arguments as $_argument) { if ($_argument === 'force') { $options[$_argument] = true; } elseif (substr($_argument, 0, 4) === 'iter') { - $options['iteration'] = intval(str_replace('iter', '', $_argument)); + $options['iteration'] = (int) (str_replace('iter', '', $_argument)); } else { $options['extras'][] = $_argument; } diff --git a/base/territoires.php b/base/territoires.php index 39c368a..33f7f4c 100644 --- a/base/territoires.php +++ b/base/territoires.php @@ -15,10 +15,9 @@ if (!defined('_ECRIRE_INC_VERSION')) { * * @param array $interfaces Déclarations d'interface pour le compilateur * - * @return array Déclarations d'interface pour le compilateur + * @return array Déclarations d'interface mis à jour */ -function territoires_declarer_tables_interfaces($interfaces) { - +function territoires_declarer_tables_interfaces(array $interfaces) : array { $interfaces['table_des_tables']['territoires'] = 'territoires'; $interfaces['table_des_tables']['territoires_extras'] = 'territoires_extras'; @@ -35,15 +34,15 @@ function territoires_declarer_tables_interfaces($interfaces) { * * @pipeline declarer_tables_objets_sql * - * @param array $tables Description des tables + * @param array $tables Description des tables d'objet * - * @return array Description complétée des tables + * @return array Description complétée des tables d'objet */ -function territoires_declarer_tables_objets_sql($tables) { - $tables['spip_territoires'] = array( +function territoires_declarer_tables_objets_sql(array $tables) : array { + $tables['spip_territoires'] = [ 'type' => 'territoire', 'principale' => 'oui', - 'field' => array( + 'field' => [ 'id_territoire' => 'bigint(21) NOT NULL', 'iso_territoire' => 'varchar(20) NOT NULL DEFAULT ""', 'iso_titre' => 'text NOT NULL DEFAULT ""', @@ -54,26 +53,26 @@ function territoires_declarer_tables_objets_sql($tables) { 'iso_continent' => 'varchar(3) DEFAULT "" NOT NULL', 'iso_pays' => 'varchar(2) NOT NULL DEFAULT ""', 'iso_parent' => 'varchar(20) NOT NULL DEFAULT ""', - 'profondeur_type' => "int NOT NULL DEFAULT 0", + 'profondeur_type' => 'int NOT NULL DEFAULT 0', 'iso_parent_alt' => 'varchar(20) NOT NULL DEFAULT ""', 'edite' => 'varchar(3) NOT NULL DEFAULT "non"', 'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"', 'maj' => 'TIMESTAMP NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP' - ), - 'key' => array( + ], + 'key' => [ 'PRIMARY KEY' => 'id_territoire', 'KEY iso_territoire' => 'iso_territoire', 'KEY iso_parent' => 'iso_parent', 'KEY iso_parent_alt' => 'iso_parent_alt', 'KEY iso_pays' => 'iso_pays', 'KEY iso_continent' => 'iso_continent', - ), + ], 'titre' => 'nom_usage AS titre, "" AS lang', 'date' => 'date', - 'champs_editables' => array('descriptif'), - 'champs_versionnes' => array('descriptif'), - 'rechercher_champs' => array('iso_territoire' => 10, 'iso_titre' => 5, 'nom_usage' => 5, 'descriptif' => 2), - 'tables_jointures' => array('spip_territoires_liens'), + 'champs_editables' => ['descriptif'], + 'champs_versionnes' => ['descriptif'], + 'rechercher_champs' => ['iso_territoire' => 10, 'iso_titre' => 5, 'nom_usage' => 5, 'descriptif' => 2], + 'tables_jointures' => ['spip_territoires_liens'], 'texte_retour' => 'icone_retour', 'texte_objets' => 'territoire:titre_territoires', @@ -85,7 +84,7 @@ function territoires_declarer_tables_objets_sql($tables) { 'info_nb_objets' => 'territoire:info_nb_territoires', 'texte_logo_objet' => 'territoire:titre_logo_territoire', 'texte_langue_objet' => 'territoire:titre_langue_territoire', - ); + ]; return $tables; } @@ -94,54 +93,53 @@ function territoires_declarer_tables_objets_sql($tables) { * Déclaration des tables secondaires (liaisons). * Le plugin Territoires déclare 2 nouvelle tables auxilliaire: * - celle des liens, `spip_territoires_liens` - * - celle des caractéristiques complémentaires, `spip_territoires_extras` + * - celle des caractéristiques complémentaires, `spip_territoires_extras`. * * @pipeline declarer_tables_auxiliaires * - * @param array $tables Description des tables + * @param array $tables Description des tables auxilliaires * - * @return array Description complétée des tables + * @return array Description complétée des tables auxilliaires */ -function territoires_declarer_tables_auxiliaires($tables) { - +function territoires_declarer_tables_auxiliaires(array $tables) : array { // Table d'extensions des données d'un territoire : // -- contient les codes alternatifs, les caractéristiques géographiques (superficie, population...) ou autres. - $tables['spip_territoires_extras'] = array( - 'field' => array( - 'iso_territoire' => 'varchar(20) NOT NULL DEFAULT ""', - 'extra' => 'varchar(255) NOT NULL DEFAULT ""', // type d'attribut (unique pour un territoire) - 'valeur' => 'text DEFAULT ""', // valeur quelconque comme une meta - 'type_extra' => 'varchar(4) DEFAULT "" NOT NULL', // type du champ extra (code ou info) - 'type' => 'varchar(20) DEFAULT "" NOT NULL', // recopie du champ de spip_territoires (optimisation) - 'iso_pays' => 'varchar(2) DEFAULT "" NOT NULL', // recopie du champ de spip_territoires (optimisation) - 'maj' => 'timestamp NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp' - ), - 'key' => array( - 'PRIMARY KEY' => 'iso_territoire,extra', - 'KEY extra' => 'extra', - 'KEY type_extra' => 'type_extra', - 'KEY type' => 'type', - 'KEY iso_pays' => 'iso_pays', - ) - ); + $tables['spip_territoires_extras'] = [ + 'field' => [ + 'iso_territoire' => 'varchar(20) NOT NULL DEFAULT ""', + 'extra' => 'varchar(255) NOT NULL DEFAULT ""', // type d'attribut (unique pour un territoire) + 'valeur' => 'text DEFAULT ""', // valeur quelconque comme une meta + 'type_extra' => 'varchar(4) DEFAULT "" NOT NULL', // type du champ extra (code ou info) + 'type' => 'varchar(20) DEFAULT "" NOT NULL', // recopie du champ de spip_territoires (optimisation) + 'iso_pays' => 'varchar(2) DEFAULT "" NOT NULL', // recopie du champ de spip_territoires (optimisation) + 'maj' => 'timestamp NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp' + ], + 'key' => [ + 'PRIMARY KEY' => 'iso_territoire,extra', + 'KEY extra' => 'extra', + 'KEY type_extra' => 'type_extra', + 'KEY type' => 'type', + 'KEY iso_pays' => 'iso_pays', + ] + ]; // Table de liens avec les autres objets SPIP - $tables['spip_territoires_liens'] = array( - 'field' => array( + $tables['spip_territoires_liens'] = [ + 'field' => [ 'id_territoire' => 'bigint(21) DEFAULT "0" NOT NULL', 'objet' => 'varchar(25) DEFAULT "" NOT NULL', 'id_objet' => 'bigint(21) DEFAULT "0" NOT NULL', 'role' => 'varchar(30) NOT NULL DEFAULT ""', 'vu' => 'varchar(6) DEFAULT "non" NOT NULL', - ), - 'key' => array( + ], + 'key' => [ 'PRIMARY KEY' => 'id_territoire,id_objet,objet,role', 'KEY id_territoire' => 'id_territoire', 'KEY objet' => 'objet', 'KEY id_objet' => 'id_objet', 'KEY role' => 'role' - ) - ); + ] + ]; return $tables; } diff --git a/ezcache/territoires.php b/ezcache/territoires.php index 0b1936a..77ca3b7 100644 --- a/ezcache/territoires.php +++ b/ezcache/territoires.php @@ -1,6 +1,6 @@ Tableau de la configuration brute du plugin Territoires */ -function territoires_cache_configurer($plugin) { - +function territoires_cache_configurer(string $plugin) : array { // Initialisation du tableau de configuration avec les valeurs par défaut du plugin Cache. - $configuration = array( - 'asynchrone' => array( + $configuration = [ + 'asynchrone' => [ 'racine' => '_DIR_TMP', 'sous_dossier' => false, - 'nom_obligatoire' => array('type', 'pays', 'fonction'), - 'nom_facultatif' => array(), + 'nom_obligatoire' => ['type', 'pays', 'fonction'], + 'nom_facultatif' => [], 'extension' => '.php', 'securisation' => true, 'serialisation' => true, 'separateur' => '_', 'conservation' => 0 - ), - ); + ], + ]; return $configuration; } diff --git a/formulaires/editer_territoire.php b/formulaires/editer_territoire.php index 987d1ef..4d3564a 100644 --- a/formulaires/editer_territoire.php +++ b/formulaires/editer_territoire.php @@ -1,10 +1,9 @@ $id_territoire), array($objet => $id_objet)); - + + objet_associer(['territoire' => $id_territoire], [$objet => $id_objet]); + if (isset($retours['redirect'])) { $retours['redirect'] = parametre_url($retours['redirect'], 'id_lien_ajoute', $id_territoire, '&'); } diff --git a/formulaires/peupler_territoires.php b/formulaires/peupler_territoires.php index 17599a0..534eaf3 100644 --- a/formulaires/peupler_territoires.php +++ b/formulaires/peupler_territoires.php @@ -15,33 +15,31 @@ if (!defined('_ECRIRE_INC_VERSION')) { * @uses territoires_acquerir() * @uses territoire_est_peuple() * - * @return array - * Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un - * champ de saisie, celle-ci sont systématiquement remises à zéro. - * - `_actions_peuplement`: (affichage) alias et libellés des actions possibles, `peupler` et `depeupler` - * - `_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` - * - `_types` : (affichage) types region et pays. - * - `_pays` : (affichage) pays avec leur code et leur nom ISO dont les subdivisions sont disponibles. + * @return array Tableau des données à charger par le formulaire (affichage). Aucune donnée chargée n'est un + * champ de saisie, celle-ci sont systématiquement remises à zéro. + * - `_actions_peuplement`: (affichage) alias et libellés des actions possibles, `peupler` et `depeupler` + * - `_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` + * - `_types` : (affichage) types region et pays. + * - `_pays` : (affichage) pays avec leur code et nom ISO dont les subdivisions sont disponibles. */ -function formulaires_peupler_territoires_charger() { - +function formulaires_peupler_territoires_charger() : array { // Initialisation des valeurs à transmettre au formulaire - $valeurs = array(); + $valeurs = []; // Lister les actions sur les tables - $valeurs['_actions_territoire'] = array( - 'peupler' => _T('territoires:option_peupler_action'), - 'depeupler' => _T('territoires:option_depeupler_action') - ); + $valeurs['_actions_territoire'] = [ + 'peupler' => _T('territoires:option_peupler_action'), + 'depeupler' => _T('territoires:option_depeupler_action') + ]; // Initialiser la liste des types de territoire disponibles (régions, pays) include_spip('inc/territoire'); $un_territoire_charge = false; - $valeurs['_types'] = array( - 'zone' => _T('territoires:option_zone_territoire'), - 'country' => _T('territoires:option_country_territoire'), - ); + $valeurs['_types'] = [ + 'zone' => _T('territoires:option_zone_territoire'), + 'country' => _T('territoires:option_country_territoire'), + ]; // -- indiquer les territoires déjà chargés foreach ($valeurs['_types'] as $_type => $_label) { if (territoire_est_peuple($_type)) { @@ -52,11 +50,11 @@ function formulaires_peupler_territoires_charger() { // Acquérir la liste des pays dont les subdivisions sont disponibles include_spip('inc/territoires_utils'); - $options = array( + $options = [ 'exclure' => 'alternates,subdivisions', 'index' => 'pays' - ); - $valeurs['_pays'] = territoires_acquerir('subdivision', array(), $options); + ]; + $valeurs['_pays'] = territoires_acquerir('subdivision', [], $options); // -- indiquer les territoires déjà chargés foreach ($valeurs['_pays'] as $_code => $_pays) { $pays = extraire_multi($_pays); @@ -69,11 +67,11 @@ function formulaires_peupler_territoires_charger() { // Acquérir la liste des pays dont les infra subdivisions sont disponibles et dont les subdivisions sont déjà // chargées. - $options = array( + $options = [ 'exclure' => 'alternates,infrasubdivisions', 'index' => 'pays' - ); - $infrasubdivisions = territoires_acquerir('infrasubdivision', array(), $options); + ]; + $infrasubdivisions = territoires_acquerir('infrasubdivision', [], $options); // -- indiquer les territoires déjà chargés foreach ($infrasubdivisions as $_code => $_pays) { if (territoire_est_peuple('subdivision', $_code)) { @@ -87,13 +85,13 @@ function formulaires_peupler_territoires_charger() { } // Ne pas sélectionner un type ou un pays par défaut - set_request('types', array()); - set_request('pays', array()); - set_request('pays_infra', array()); + set_request('types', []); + set_request('pays', []); + set_request('pays_infra', []); // Désactiver l'action vider si aucun pays encore chargé if (!$un_territoire_charge) { - $valeurs['_actions_disable'] = array('depeupler' => 'oui'); + $valeurs['_actions_disable'] = ['depeupler' => 'oui']; $valeurs['_action_defaut'] = 'peupler'; } @@ -104,11 +102,10 @@ function formulaires_peupler_territoires_charger() { * Vérification des saisies : il est indispensable de choisir une action (`depeupler` ou `peupler`) et * au moins un territoire. * - * @return array - * Tableau des erreurs sur l'action et/ou le pays ou tableau vide si aucune erreur. + * @return array Tableau des erreurs sur l'action et/ou le pays ou tableau vide si aucune erreur. */ -function formulaires_peupler_territoires_verifier() { - $erreurs = array(); +function formulaires_peupler_territoires_verifier() : array { + $erreurs = []; if (!_request('action_territoire')) { $erreurs['action_territoire'] = _T('info_obligatoire'); @@ -131,17 +128,15 @@ function formulaires_peupler_territoires_verifier() { * @uses territoire_depeupler() * @uses formulaires_peupler_territoires_notifier() * - * @return array - * Tableau retourné par le formulaire contenant toujours un message de bonne exécution ou - * d'erreur. L'indicateur editable est toujours à vrai. + * @return array Tableau retourné par le formulaire contenant toujours un message de bonne exécution ou + * d'erreur. L'indicateur editable est toujours à vrai. */ -function formulaires_peupler_territoires_traiter() { - +function formulaires_peupler_territoires_traiter() : array { // Initialisation des messages de retour - $retour = array( + $retour = [ 'message_ok' => '', 'message_erreur' => '' - ); + ]; // Acquisition des saisies: comme elles sont obligatoires, il existe toujours une action et un territoire // à savoir soit un type région ou pays, soit un pays pour une subdivision. @@ -158,7 +153,7 @@ function formulaires_peupler_territoires_traiter() { } // Détermination des options de l'action - $options = array(); + $options = []; $forcer = _request('forcer'); if ( $forcer @@ -166,7 +161,7 @@ function formulaires_peupler_territoires_traiter() { ) { $options['force'] = true; } - foreach (array('code', 'info') as $_type_extra) { + foreach (['code', 'info'] as $_type_extra) { if (_request("extra_{$_type_extra}")) { $options['extras'][] = $_type_extra; } @@ -175,7 +170,7 @@ function formulaires_peupler_territoires_traiter() { // On peuple chaque type (ou type,pays pour les subdivisions). // (La fonction de chargement lance un vidage préalable si le pays demandé est déjà chargée) $actionner = "territoire_{$action}"; - $statut = array(); + $statut = []; foreach ($types as $_type) { // Traitement du type en prenant en compte le cas particulier des subdivisions et infra subdivisions. if ($_type === 'subdivision') { @@ -203,11 +198,12 @@ function formulaires_peupler_territoires_traiter() { return $retour; } - /** * Formate les messages de succès et d'erreur résultant des actions de chargement ou de vidage * des territoires. * + * @uses type_est_subdivision() + * * @param string $type Type de territoire. * @param array $messages Tableau des messages ok et nok à compléter. * @param string $action Action venant d'être appliquée à certains pays. Peut prendre les valeurs `peupler` et @@ -222,24 +218,22 @@ function formulaires_peupler_territoires_traiter() { * - `sync` : indique si le peuplement est synchrone ou asynchrone * - `job` : id du job si asynchrone * - * @return array - * Tableau des messages à afficher sur le formulaire: - * - `message_ok` : message sur les types ayant été traités avec succès ou vide sinon. - * - `message_erreur` : message sur les types en erreur ou vide sinon. + * @return array Tableau des messages à afficher sur le formulaire: + * - `message_ok` : message sur les types ayant été traités avec succès ou vide sinon. + * - `message_erreur` : message sur les types en erreur ou vide sinon. */ -function formulaires_peupler_territoires_notifier($type, $messages, $action, $statuts) { - - $variables = array( - 'ok' => array(), - 'nok' => array(), - 'sha' => array(), - ); - $statut_global = array( +function formulaires_peupler_territoires_notifier(string $type, array $messages, string $action, array $statuts) : array { + $variables = [ + 'ok' => [], + 'nok' => [], + 'sha' => [], + ]; + $statut_global = [ 'ok' => false, 'nok' => false, 'sha' => false, 'sync' => true, - ); + ]; // On compile la liste des pays traités et un indicateur global pour chaque cas d'erreur. include_spip('inc/territoires_utils'); @@ -268,20 +262,20 @@ function formulaires_peupler_territoires_notifier($type, $messages, $action, $st // Traitement des succès if ($statut_global['ok']) { - $messages['message_ok'] .= _T("territoires:msg_{$action}_{$type}_succes", array('pays' => implode(', ', $variables['ok']))); + $messages['message_ok'] .= _T("territoires:msg_{$action}_{$type}_succes", ['pays' => implode(', ', $variables['ok'])]); if (!$statut_global['sync']) { - $messages['message_ok'] .= '
' . _T("territoires:msg_succes_asynchrone"); + $messages['message_ok'] .= '
' . _T('territoires:msg_succes_asynchrone'); } } // Traitement des erreurs if ($statut_global['nok']) { - $messages['message_erreur'] .= _T("territoires:msg_{$action}_{$type}_erreur", array('pays' => implode(', ', $variables['nok']))); + $messages['message_erreur'] .= _T("territoires:msg_{$action}_{$type}_erreur", ['pays' => implode(', ', $variables['nok'])]); } if ($statut_global['sha']) { $messages['message_erreur'] .= $messages['message_erreur'] ? '
' : ''; - $messages['message_erreur'] .= _T("territoires:msg_{$action}_{$type}_notice", array('pays' => implode(', ', $variables['sha']))); + $messages['message_erreur'] .= _T("territoires:msg_{$action}_{$type}_notice", ['pays' => implode(', ', $variables['sha'])]); } return $messages; -} \ No newline at end of file +} diff --git a/inc/requeter_isocode.php b/inc/requeter_isocode.php index 6ef728d..36041ec 100644 --- a/inc/requeter_isocode.php +++ b/inc/requeter_isocode.php @@ -26,19 +26,18 @@ if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) { * * @uses recuperer_url() * - * @param mixed $url_base Endpoint du serveur Nomenclatures - * @param mixed $collection Nom de la collection - * @param mixed $filtres Tableau des filtres à appliquer à la collection + * @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|int $taille_max Taille maximale du flux récupéré suite à la requête. - * `null` désigne la taille par défaut. + * La valeur entière `0` désigne la taille par défaut. * * @return array Tableau de la réponse. * Si l'index `erreur['status']` indique le statut de la réponse. * 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($url_base, $collection, $filtres, $taille_max = null) { - +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}"; @@ -49,15 +48,15 @@ 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( + $options = [ 'transcoder' => true, 'taille_max' => $taille_max ? $taille_max : _INC_DISTANT_MAX_SIZE * _TERRITOIRE_COEFF_MAX_DISTANT, - ); + ]; // Acquisition du flux de données $flux = recuperer_url($url, $options); - $reponse = array(); + $reponse = []; if ( !$flux or ($flux['status'] === 404) @@ -85,7 +84,7 @@ function inc_requeter_isocode_dist($url_base, $collection, $filtres, $taille_max 'element' => 'serveur', 'valeur' => $url_base, 'extra' => [ - 'url' => $url, + 'url' => $url, 'erreur_json' => $erreur->getMessage() ] ]; diff --git a/inc/territoire.php b/inc/territoire.php index c9224dd..2d8d7ff 100644 --- a/inc/territoire.php +++ b/inc/territoire.php @@ -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) diff --git a/inc/territoires_services.php b/inc/territoires_services.php index 81065d4..f3bea76 100644 --- a/inc/territoires_services.php +++ b/inc/territoires_services.php @@ -8,7 +8,6 @@ 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 : @@ -18,12 +17,14 @@ if (!defined('_ECRIRE_INC_VERSION')) { * * @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. + * @uses type_est_subdivision() + * + * @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 couple (type, pays) est valide, `false` sinon. */ -function type_pays_est_valide($type, $pays = '') { +function type_pays_est_valide(string $type, ?string $pays = '') : bool { $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) @@ -32,7 +33,7 @@ function type_pays_est_valide($type, $pays = '') { if (strlen($pays) === 2) { $est_valide = true; } - } elseif (in_array($type, array('zone', 'country'))) { + } elseif (in_array($type, ['zone', 'country'])) { $est_valide = true; } @@ -51,8 +52,7 @@ function type_pays_est_valide($type, $pays = '') { * * @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) { - +function sha_est_identique(string $sha, string $meta, string $consigne) : bool { $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) @@ -80,10 +80,9 @@ function sha_est_identique($sha, $meta, $consigne) { * * @return void */ -function liens_retablir($type_lien, $sauvegardes, $ids_crees, $config_lien) { - +function liens_retablir(string $type_lien, array $sauvegardes, array $ids_crees, array $config_lien) : void { // On contruit la liste des enregistrements correspondant aux liens à rétablir. - $liens = array(); + $liens = []; 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']); diff --git a/inc/territoires_utils.php b/inc/territoires_utils.php index 68d9f8e..22509da 100644 --- a/inc/territoires_utils.php +++ b/inc/territoires_utils.php @@ -14,6 +14,12 @@ if (!defined('_TERRITOIRE_URL_BASE_ISOCODE')) { */ define('_TERRITOIRE_URL_BASE_ISOCODE', 'https://contrib.spip.net/http.api/ezrest'); } +if (!defined('_EXTRAIRE_MULTI')) { + /** + * Restaure cette constante à partir de SPIP 4.2. + */ + define('_EXTRAIRE_MULTI', '@(.*?)@sS'); +} /** * Acquiert les données de territoires disponibles dans Nomenclatures. @@ -21,23 +27,26 @@ if (!defined('_TERRITOIRE_URL_BASE_ISOCODE')) { * * @internal * - * @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 Permet de demander l'exclusion (`exclure`) de certains index si ceux-ci sont inutilisés - * ou de ne retourner qu'un seul index (`index`). - * L'index `cacher` à true permet de mettre la collection récupérée dans un cache spécifique. Cette - * option est utilisée dans les chargements en mode asynchrone. + * @uses type_est_subdivision() + * @uses requeter_isocode() + * @uses cache_ecrire() * - * @return array + * @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 Permet de demander l'exclusion (`exclure`) de certains index si ceux-ci sont inutilisés + * ou de ne retourner qu'un seul index (`index`). + * L'index `cacher` à true permet de mettre la collection récupérée dans un cache spécifique. Cette + * option est utilisée dans les chargements en mode asynchrone. + * + * @return array Liste des descriptions de territoires telles que fournies par Nomenclatures */ -function territoires_acquerir($type, $pays = '', $options = array()) { - +function territoires_acquerir(string $type, ?string $pays = '', ?array $options = []) : array { // Initialiser les territoires à vide pour gérer une éventuelle erreur de type. - $territoires = array(); + $territoires = []; // Déterminer la collection et les conditions à appliquer. - $filtres = array(); - $collection = array(); + $filtres = []; + $collection = []; if ($type === 'zone') { $collection = 'zones'; } elseif ($type === 'country') { @@ -48,7 +57,7 @@ function territoires_acquerir($type, $pays = '', $options = array()) { ) { $collection = "{$type}s"; if ($pays) { - $filtres = array('pays' => $pays); + $filtres = ['pays' => $pays]; } } @@ -62,7 +71,7 @@ function territoires_acquerir($type, $pays = '', $options = array()) { // Appel à l'API REST de Nomenclatures $requeter = charger_fonction('requeter_isocode', 'inc'); $reponse = $requeter(_TERRITOIRE_URL_BASE_ISOCODE, $collection, $filtres); - if (intval($reponse['erreur']['status']) === 200) { + if ((int) ($reponse['erreur']['status']) === 200) { $territoires = $reponse['donnees']; // Si on a demandé un seul index on le renvoie seul sinon on renvoie le tableau complet. @@ -82,11 +91,11 @@ function territoires_acquerir($type, $pays = '', $options = array()) { // Création d'un cache sécurisé de la collection pour le relire si besoin de plusieurs itérations de // chargement. include_spip('inc/ezcache_cache'); - $cache = array( + $cache = [ 'type' => $type, 'pays' => $pays, 'fonction' => 'collection' - ); + ]; cache_ecrire('territoires', 'asynchrone', $cache, $territoires); } @@ -96,56 +105,59 @@ function territoires_acquerir($type, $pays = '', $options = array()) { /** * Extrait, pour un les régions, les pays ou les subdivisions d'un pays, la liste des territoires ayant fait l'objet * d'une modification manuelle (descriptif) et la liste associations vers ses mêmes territoires. + * * Les extras ne sont pas sauvegardés car il ne sont ni modifiables ni indexés par un id mais par un code invariant. + * Si l'extraction fait suite à un chargement asynchrone, les territoires modifiés sont sauvegardés dans une cache. * * @internal * - * @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 L'index `cacher` à true permet de mettre la collection récupérée dans un cache spécifique. Cette - * option est utilisée dans les chargements en mode asynchrone. + * @uses type_est_subdivision() * - * @return array + * @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 L'index `cacher` à true permet de mettre la collection récupérée dans un cache spécifique. Cette + * option est utilisée dans les chargements en mode asynchrone. + * + * @return array Liste des territoires ayant été modifiés : seules les champs éditables sont consignés. */ -function territoires_preserver($type, $pays = '', $options = array()) { - +function territoires_preserver(string $type, ?string $pays = '', ?array $options = []) : array { // Initialisation de la table et de la condition de base sur le type et éventuellement le pays. - $territoires = array(); + $territoires = []; $from = 'spip_territoires'; - $where = array( + $where = [ 'type=' . sql_quote($type), - ); + ]; if (type_est_subdivision($type)) { $where[] = 'iso_pays=' . sql_quote($pays); } // Extraction des liens vers les territoires du pays - $where_lien = array( + $where_lien = [ sql_in_select('id_territoire', 'id_territoire', $from, $where) - ); + ]; $territoires['liens'] = sql_allfetsel('*', 'spip_territoires_liens', $where_lien); // Extraction des liens de logos vers les territoires du pays - $where_logo = array( + $where_logo = [ 'objet=' . sql_quote('territoire'), sql_in_select('id_objet', 'id_territoire', $from, $where) - ); + ]; $territoires['logos'] = sql_allfetsel('*', 'spip_documents_liens', $where_logo); // Extraction de la correspondance id-iso pour les liens et les logos - $territoires['ids'] = array(); - $select = array('id_territoire', 'iso_territoire'); + $territoires['ids'] = []; + $select = ['id_territoire', 'iso_territoire']; // -- les liens - $where_ids = array( + $where_ids = [ sql_in('id_territoire', array_column($territoires['liens'], 'id_territoire')) - ); + ]; if ($ids = sql_allfetsel($select, $from, $where_ids)) { $territoires['ids'] = array_column($ids, 'id_territoire', 'iso_territoire'); } // -- les logos - $where_ids = array( + $where_ids = [ sql_in('id_territoire', array_column($territoires['logos'], 'id_objet')) - ); + ]; if ($ids = sql_allfetsel($select, $from, $where_ids)) { $ids = array_column($ids, 'id_territoire', 'iso_territoire'); $territoires['ids'] = array_merge($territoires['ids'], $ids); @@ -153,11 +165,11 @@ function territoires_preserver($type, $pays = '', $options = array()) { // Extraction des territoires éditées. // -- détermination de la liste des champs éditables. - $territoires['editions'] = array(); + $territoires['editions'] = []; include_spip('base/objets'); $description_table = lister_tables_objets_sql($from); // -- pour le select, les champs éditables sont complétés par le code ISO. - $select = array_merge($description_table['champs_editables'], array('iso_territoire')); + $select = array_merge($description_table['champs_editables'], ['iso_territoire']); $where[] = 'edite=' . sql_quote('oui'); if ($editions = sql_allfetsel($select, $from, $where)) { // -- indexer le tableau par le code iso de façon à simplifier la réintégration. @@ -166,13 +178,13 @@ function territoires_preserver($type, $pays = '', $options = array()) { // Permettre à d'autres plugins de compléter la sauvegarde (principalement pour les liens). // -- par exemple le plugin Contours sauvegarde les liens vers les contours GIS (spip_liens_gis). - $flux = array( - 'args' => array( + $flux = [ + 'args' => [ 'type' => $type, 'pays' => $pays, - ), + ], 'data' => $territoires - ); + ]; $territoires = pipeline('post_preserver_territoire', $flux); // On peut demander à mettre en cache la collection. @@ -180,11 +192,11 @@ function territoires_preserver($type, $pays = '', $options = array()) { if (!empty($options['cacher'])) { // Création d'un cache sécurisé des sauvegardes pour le relire si besoin de plusieurs itérations de chargement. include_spip('inc/ezcache_cache'); - $cache = array( + $cache = [ 'type' => $type, 'pays' => $pays, 'fonction' => 'sauvegarde' - ); + ]; cache_ecrire('territoires', 'asynchrone', $cache, $territoires); } @@ -193,6 +205,7 @@ function territoires_preserver($type, $pays = '', $options = array()) { /** * Fusionne les traductions d'une balise `` avec celles d'une autre balise ``. + * * L'une des balise est considérée comme prioritaire ce qui permet de régler le cas où la même * langue est présente dans les deux balises. * Si on ne trouve pas de balise `` dans l'un ou l'autre des paramètres, on considère que @@ -203,10 +216,9 @@ function territoires_preserver($type, $pays = '', $options = array()) { * @param string $multi_prioritaire Balise multi considérée comme prioritaire en cas de conflit sur une langue. * @param string $multi_non_prioritaire Balise multi considérée comme non prioritaire en cas de conflit sur une langue. * - * @return string - * La chaine construite est toujours une balise `` complète ou une chaine vide sinon. + * @return string La chaine construite est toujours une balise `` complète ou une chaine vide sinon. */ -function traduction_fusionner($multi_prioritaire, $multi_non_prioritaire) { +function traduction_fusionner(string $multi_prioritaire, string $multi_non_prioritaire) : string { $multi_merge = ''; // On extrait le contenu de la balise si elle existe. @@ -271,19 +283,18 @@ function traduction_fusionner($multi_prioritaire, $multi_non_prioritaire) { * Initialise les champs de l'objet territoire à partir d'un élément reçu de l'API REST et en utilisant la configuration * du type concerné et complète avec le type, le nom d'usage, le descriptif et le parent. * - * @param array $territoire - * @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. - * * @internal * - * @return array + * @param array $territoire Données d'un objet territoire + * @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 array Données initialisées et complétées de l'objet territoire fourni */ -function enregistrement_initialiser($territoire, $type, $pays = '') { - +function enregistrement_initialiser(array $territoire, string $type, ?string $pays = '') : array { // Traduire les champs de Isocode en champs pour Territoires include_spip('inc/config'); - $enregistrement = array(); + $enregistrement = []; $champs = lire_config("territoires/{$type}/champs/base"); foreach ($champs as $_champ_api => $_champ_territoire) { $enregistrement[$_champ_territoire] = $territoire[$_champ_api]; @@ -324,18 +335,18 @@ function enregistrement_initialiser($territoire, $type, $pays = '') { * * @internal * - * @param string $mode - * @param array $types_extras - * @param array $source - * @param array $configuration - * @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 $meta_extras + * @param string $mode Mode de récupération des extras : `interne` ou `externe`. + * @param string[] $types_extras Liste des types d'extra à récupérer parmi les valeurs `info` et `code`. + * @param array $source Source des extras qui peut être un territoire (si interne) ou les extras directement (si externe). + * @param array $configuration Configuration de l'extraction des données Nomenclatures pour le type concerné. + * @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 string[] &$meta_extras Renvoie un tableau des types d'extra réellement récupérés * * @return array */ -function extra_compiler($mode, $types_extras, $source, $configuration, $type, $pays, &$meta_extras) { - $extras = array(); +function extra_compiler(string $mode, array $types_extras, array $source, array $configuration, string $type, string $pays, array &$meta_extras) : array { + $extras = []; foreach ($types_extras as $_type_extra) { // Vérifier qu'il existe des extras pour le type de territoire @@ -352,11 +363,11 @@ function extra_compiler($mode, $types_extras, $source, $configuration, $type, $p ) ) { // On initialise les données communes de chaque extra - $extra_defaut = array( - 'type_extra' => $_type_extra, - 'type' => $type, - 'iso_pays' => $pays, - ); + $extra_defaut = [ + 'type_extra' => $_type_extra, + 'type' => $type, + 'iso_pays' => $pays, + ]; // Suivant le mode on enregistre chaque extra détecté: // - mode interne : chaque champ extra du territoire devient un objet extra de la table spip_territoires_extras @@ -401,7 +412,7 @@ function extra_compiler($mode, $types_extras, $source, $configuration, $type, $p * * @return bool `true` si le couple (type, pays) est valide, `false` sinon. */ -function type_est_subdivision($type) { +function type_est_subdivision(string $type) : bool { $est_subdivision = false; // On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée) @@ -421,13 +432,14 @@ function type_est_subdivision($type) { * * @internal * - * @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. + * @uses type_est_subdivision() + * + * @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 string */ -function consigne_identifier($type, $pays = '') { - +function consigne_identifier(string $type, ?string $pays = '') : string { return (type_est_subdivision($type)) ? "{$type}/{$pays}" : $type; diff --git a/lang/paquet-territoires_fr.php b/lang/paquet-territoires_fr.php index df7a4e1..22d298e 100644 --- a/lang/paquet-territoires_fr.php +++ b/lang/paquet-territoires_fr.php @@ -1,15 +1,15 @@ 'Ce plugin fournit un nouvel objet éditorial couvrant l’ensemble des zones géographiques du continent à la subdivision d’un pays. Il est possible de peupler les zones, les pays ou les subdivisions de façon indépendante. Il est possible d\associer des contours géographiques aux territoires en utilisant le plugin Contours.', - 'territoires_nom' => 'Territoires', + 'territoires_nom' => 'Territoires', 'territoires_slogan' => 'La hiérarchie des zones géographiques du continent à la subdivision minimale d\'un pays', -); +]; diff --git a/lang/territoire_extra_fr.php b/lang/territoire_extra_fr.php index 06c994c..6e14f13 100644 --- a/lang/territoire_extra_fr.php +++ b/lang/territoire_extra_fr.php @@ -1,11 +1,12 @@ 'Information', 'champ_valeur_label' => 'Valeur', @@ -30,4 +31,4 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'extra_phone_id' => 'indicatif téléphonique', 'extra_population' => 'population', 'extra_tld' => 'extension', -); +]; diff --git a/lang/territoire_fr.php b/lang/territoire_fr.php index 544cad1..d67b1ef 100644 --- a/lang/territoire_fr.php +++ b/lang/territoire_fr.php @@ -1,11 +1,12 @@ 'Ajouter ce territoire', @@ -128,4 +129,4 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'type_country' => 'pays', 'type_subdivision' => 'subdivision', 'type_infrasubdivision' => 'infra-subdivision', -); +]; diff --git a/lang/territoires_fr.php b/lang/territoires_fr.php index b6c2bbb..d4b8caf 100644 --- a/lang/territoires_fr.php +++ b/lang/territoires_fr.php @@ -1,22 +1,23 @@ 'Paramétrages', 'cfg_label_objets_associes' => 'Permettre l\'association de territoire à des objets', // E - 'explication_peupler_form' => 'Si les territoires sont déjà chargées ils seront supprimés avant le rechargement. Néanmoins, les éventuelles modifications manuelles faites après le chargement initial et les liens avec les logos et les autres objets seront conservés. + 'explication_peupler_form' => 'Si les territoires sont déjà chargées ils seront supprimés avant le rechargement. Néanmoins, les éventuelles modifications manuelles faites après le chargement initial et les liens avec les logos et les autres objets seront conservés. Le vidage lui ne conserve ni les territoires, ni les extras, ni les liens.', - 'explication_zone_country_territoire' => 'Régions & Pays', - 'explication_subdivision_territoire' => 'Subdivisions', + 'explication_zone_country_territoire' => 'Régions & Pays', + 'explication_subdivision_territoire' => 'Subdivisions', 'explication_infrasubdivision_territoire' => 'Infra-subdivisions (les subdivisions doivent être déjà chargées)', - 'explication_forcer' => 'Le forçage est utile uniquement pour ajouter après coup des identifiants ou des informations complémentaires sans actionner le vidage au préalable.', + 'explication_forcer' => 'Le forçage est utile uniquement pour ajouter après coup des identifiants ou des informations complémentaires sans actionner le vidage au préalable.', // I 'info_territoire_peuple' => 'chargé', @@ -53,34 +54,34 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'onglet_zone' => 'Zones', 'onglet_country' => 'Pays', 'onglet_subdivision' => 'Subdivisions', - 'onglet_infrasubdivision' => 'Infra-subdivisions', + 'onglet_infrasubdivision' => 'Infra-subdivisions', // S - 'msg_depeupler_zone_erreur' => 'Une erreur s\'est produite lors du vidage des régions du monde.', - 'msg_depeupler_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', - 'msg_depeupler_zone_succes' => 'Les régions du monde ont bien été vidées.', - 'msg_peupler_zone_erreur' => 'Une erreur s\'est produite lors du peuplement des régions du monde.', - 'msg_peupler_zone_notice' => 'Aucune mise à jour n\'est nécessaire pour les régions du monde.', - 'msg_peupler_zone_succes' => 'Les régions du monde ont bien été chargées.', - 'msg_depeupler_country_erreur' => 'Une erreur s\'est produite lors du vidage des pays.', - 'msg_depeupler_country_notice' => 'Aucun vidage n\'est nécessaire pour les pays.', - 'msg_depeupler_country_succes' => 'Les pays ont bien été vidés.', - 'msg_peupler_country_erreur' => 'Une erreur s\'est produite lors du peuplement des pays.', - 'msg_peupler_country_notice' => 'Aucune mise à jour n\'est nécessaire pour les pays.', - 'msg_peupler_country_succes' => 'Les pays ont bien été chargés.', - 'msg_depeupler_subdivision_erreur' => 'Une erreur s\'est produite lors du vidage des subdivisions du ou des pays « @pays@ ».', - 'msg_depeupler_subdivision_notice' => 'Aucun vidage n\'est nécessaire pour les subdivisions du ou des pays « @pays@ ».', - 'msg_depeupler_subdivision_succes' => 'Les subdivisions du ou des pays « @pays@ » ont bien été vidées.', - 'msg_peupler_subdivision_erreur' => 'Une erreur s\'est produite lors du peuplement des subdivisions du ou des pays « @pays@ ».', - 'msg_peupler_subdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les subdivisions du ou des pays « @pays@ ».', - 'msg_peupler_subdivision_succes' => 'Les subdivisions du ou des pays « @pays@ » ont bien été chargées.', - 'msg_depeupler_infrasubdivision_erreur' => 'Une erreur s\'est produite lors du vidage des infra-subdivisions du ou des pays « @pays@ ».', - 'msg_depeupler_infrasubdivision_notice' => 'Aucun vidage n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', - 'msg_depeupler_infrasubdivision_succes' => 'Les infra-subdivisions du ou des pays « @pays@ » ont bien été vidées.', - 'msg_peupler_infrasubdivision_erreur' => 'Une erreur s\'est produite lors du peuplement des infra-subdivisions du ou des pays « @pays@ ».', - 'msg_peupler_infrasubdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', - 'msg_peupler_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_depeupler_zone_erreur' => 'Une erreur s\'est produite lors du vidage des régions du monde.', + 'msg_depeupler_zone_notice' => 'Aucun vidage n\'est nécessaire pour les régions du monde.', + 'msg_depeupler_zone_succes' => 'Les régions du monde ont bien été vidées.', + 'msg_peupler_zone_erreur' => 'Une erreur s\'est produite lors du peuplement des régions du monde.', + 'msg_peupler_zone_notice' => 'Aucune mise à jour n\'est nécessaire pour les régions du monde.', + 'msg_peupler_zone_succes' => 'Les régions du monde ont bien été chargées.', + 'msg_depeupler_country_erreur' => 'Une erreur s\'est produite lors du vidage des pays.', + 'msg_depeupler_country_notice' => 'Aucun vidage n\'est nécessaire pour les pays.', + 'msg_depeupler_country_succes' => 'Les pays ont bien été vidés.', + 'msg_peupler_country_erreur' => 'Une erreur s\'est produite lors du peuplement des pays.', + 'msg_peupler_country_notice' => 'Aucune mise à jour n\'est nécessaire pour les pays.', + 'msg_peupler_country_succes' => 'Les pays ont bien été chargés.', + 'msg_depeupler_subdivision_erreur' => 'Une erreur s\'est produite lors du vidage des subdivisions du ou des pays « @pays@ ».', + 'msg_depeupler_subdivision_notice' => 'Aucun vidage n\'est nécessaire pour les subdivisions du ou des pays « @pays@ ».', + 'msg_depeupler_subdivision_succes' => 'Les subdivisions du ou des pays « @pays@ » ont bien été vidées.', + 'msg_peupler_subdivision_erreur' => 'Une erreur s\'est produite lors du peuplement des subdivisions du ou des pays « @pays@ ».', + 'msg_peupler_subdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les subdivisions du ou des pays « @pays@ ».', + 'msg_peupler_subdivision_succes' => 'Les subdivisions du ou des pays « @pays@ » ont bien été chargées.', + 'msg_depeupler_infrasubdivision_erreur' => 'Une erreur s\'est produite lors du vidage des infra-subdivisions du ou des pays « @pays@ ».', + 'msg_depeupler_infrasubdivision_notice' => 'Aucun vidage n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', + 'msg_depeupler_infrasubdivision_succes' => 'Les infra-subdivisions du ou des pays « @pays@ » ont bien été vidées.', + 'msg_peupler_infrasubdivision_erreur' => 'Une erreur s\'est produite lors du peuplement des infra-subdivisions du ou des pays « @pays@ ».', + 'msg_peupler_infrasubdivision_notice' => 'Aucune mise à jour n\'est nécessaire pour les infra-subdivisions du ou des pays « @pays@ ».', + 'msg_peupler_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.', // T 'territoires_titre' => 'Territoires', @@ -91,4 +92,4 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_liste_extras' => 'Extras du territoire', 'titre_liste_extras_code' => 'Autres identifiants', 'titre_liste_extras_info' => 'Caractéristiques', -); +]; diff --git a/paquet.xml b/paquet.xml index 8ec303b..8923606 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,6 +1,6 @@ code = "(include_spip('inc/territoire') - ? territoire_lire_ascendance($iso_territoire, $iso_parent, $ordre) + ? territoire_lire_ascendance({$iso_territoire}, {$iso_parent}, {$ordre}) : [])"; return $p; } - /** * Compile la balise `#TERRITOIRE_EXTRAS` qui renvoie tout ou partie des informations extras d'un territoire donné * désigne par son identifiant primaire. @@ -51,14 +48,13 @@ function balise_TERRITOIRE_ASCENDANCE_dist($p) { * * @balise * - * @uses extra_lister() + * @uses territoire_extra_lire() * * @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) { - +function balise_TERRITOIRE_EXTRAS_dist(Champ $p) : Champ { // 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. @@ -69,7 +65,7 @@ function balise_TERRITOIRE_EXTRAS_dist($p) { // On appelle la fonction de calcul de la liste des noisettes $p->code = "(include_spip('inc/territoire') - ? territoire_extra_lire($iso_territoire, $information) + ? territoire_extra_lire({$iso_territoire}, {$information}) : [])"; return $p; diff --git a/territoires_pipelines.php b/territoires_pipelines.php index 13361a5..c9bfb18 100644 --- a/territoires_pipelines.php +++ b/territoires_pipelines.php @@ -1,10 +1,9 @@ $territoire['iso_territoire'], 'type_extra' => 'info', 'titre' => _T('territoires:titre_liste_extras_info') - ) + ] ); } } @@ -57,16 +55,16 @@ function territoires_affiche_milieu($flux) { if ( ($table = $exec['table_objet_sql']) and include_spip('inc/config') - and (in_array($table, lire_config('territoires/association_objets', array()))) + and (in_array($table, lire_config('territoires/association_objets', []))) ) { $texte .= recuperer_fond( 'prive/objets/editer/liens', - array( + [ 'table_source' => 'territoires', 'objet' => $objet, 'id_objet' => $id_objet, 'editable' => autoriser('associerterritoires', $objet, $id_objet) ? 'oui' : 'non' - ) + ] ); } @@ -90,12 +88,11 @@ function territoires_affiche_milieu($flux) { * * @pipeline affiche_gauche * - * @param array $flux Données du pipeline + * @param array $flux Données du pipeline * * @return array Données du pipeline modifiées pour refléter le traitement. */ -function territoires_affiche_gauche($flux) { - +function territoires_affiche_gauche(array $flux) : array { if (isset($flux['args']['exec'])) { $texte = ''; $exec = trouver_objet_exec($flux['args']['exec']); @@ -107,7 +104,7 @@ function territoires_affiche_gauche($flux) { and ($objet = $exec['type']) and ($objet === 'territoire') and isset($flux['args'][$id_table]) - and ($id_objet = intval($flux['args'][$id_table])) + and ($id_objet = (int) ($flux['args'][$id_table])) ) { // Insertion des extras de type 'code' chargés pour ce type de territoire // -- acquisition de l'objet @@ -119,12 +116,12 @@ function territoires_affiche_gauche($flux) { if ($extra_peuple) { $texte .= recuperer_fond( 'prive/objets/liste/territoires_extras', - array( + [ 'iso_territoire' => $territoire['iso_territoire'], 'type_extra' => 'code', 'titre' => _T('territoires:titre_liste_extras_code'), 'pagination' => 'page' - ) + ] ); } } @@ -146,13 +143,15 @@ function territoires_affiche_gauche($flux) { * Enlever l'id_territoire de la liste des critères conditionnels pour la table `spip_territoires` * car cela peut renvoyer une liste vide si l'env contient déjà l'id du territoire. * + * @pipeline exclure_id_conditionnel + * * @param array $flux Données du pipeline * * @return array Données du pipeline modifiées pour refléter le traitement. */ -function territoires_exclure_id_conditionnel($flux) { +function territoires_exclure_id_conditionnel(array $flux) : array { if ($flux['args']['table'] == 'spip_territoires') { - $flux['data'] = array_merge($flux['data'], array('id_territoire')); + $flux['data'] = array_merge($flux['data'], ['id_territoire']); } return $flux; @@ -170,10 +169,9 @@ function territoires_exclure_id_conditionnel($flux) { * @return array Données du pipeline modifiées pour refléter le traitement. * **/ -function territoires_pre_edition($flux) { - +function territoires_pre_edition(array $flux) : array { $table = $flux['args']['table']; - $id = intval($flux['args']['id_objet']); + $id = (int) ($flux['args']['id_objet']); $action = $flux['args']['action']; // Traitements particuliers de l'objet territoire quand celui-ci est modifié manuellement @@ -195,14 +193,14 @@ function territoires_pre_edition($flux) { * * @pipeline optimiser_base_disparus * - * @param array $flux Données du pipeline + * @param array $flux Données du pipeline * * @return array Données du pipeline modifiées pour refléter le traitement. + * @throws JsonException */ -function territoires_optimiser_base_disparus($flux) { - +function territoires_optimiser_base_disparus(array $flux) : array { include_spip('action/editer_liens'); - $flux['data'] += objet_optimiser_liens(array('territoire'=>'*'), '*'); + $flux['data'] += objet_optimiser_liens(['territoire' => '*'], '*'); return $flux; }