You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.4 KiB
PHP
105 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* API des services de territoires utilisables par d'autres plugins.
|
|
*
|
|
* @package SPIP\TERRITOIRES\API
|
|
*/
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
|
|
/**
|
|
* Vérifie si le couple (type, pays) est valide, à savoir, désigne bien un sous-ensemble cohérent de territoires.
|
|
* Les sous-ensembles valides sont :
|
|
* - les régions du monde
|
|
* - les pays
|
|
* - les subdivisions ou infra-subdivisions d'un pays.
|
|
*
|
|
* @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.
|
|
*
|
|
* @return bool `true` si le couple (type, pays) est valide, `false` sinon.
|
|
*/
|
|
function type_pays_est_valide($type, $pays = '') {
|
|
$est_valide = false;
|
|
|
|
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
|
|
include_spip('inc/territoires_utils');
|
|
if (type_est_subdivision($type)) {
|
|
if (strlen($pays) === 2) {
|
|
$est_valide = true;
|
|
}
|
|
} elseif (in_array($type, array('zone', 'country'))) {
|
|
$est_valide = true;
|
|
}
|
|
|
|
return $est_valide;
|
|
}
|
|
|
|
/**
|
|
* Compare le sha passé en argument pour le type de territoire concerné avec le sha stocké dans la meta
|
|
* pour ce même type.
|
|
*
|
|
* @api
|
|
*
|
|
* @param string $sha SHA à comparer à celui du type de territoire.
|
|
* @param string $meta Nom de la meta de consignation
|
|
* @param string $consigne Nom de la variable de consignation, fonction du type et du pays éventuellement.
|
|
*
|
|
* @return bool `true` si le sha passé en argument est identique au sha stocké pour la table choisie, `false` sinon.
|
|
*/
|
|
function sha_est_identique($sha, $meta, $consigne) {
|
|
|
|
$sha_identique = false;
|
|
|
|
// On récupère le sha de la table dans les metas si il existe (ie. la table a été chargée)
|
|
include_spip('inc/config');
|
|
$sha_stocke = lire_config("${meta}/${consigne}/sha", false);
|
|
|
|
if ($sha_stocke and ($sha === $sha_stocke)) {
|
|
$sha_identique = true;
|
|
}
|
|
|
|
return $sha_identique;
|
|
}
|
|
|
|
/**
|
|
* Rétablit les liens d'un type d'objet avec les territoires peuplés ou repeuplés.
|
|
*
|
|
* @api
|
|
*
|
|
* @param string $type_lien Type de liens à restaurer : `liens` ou `logos`.
|
|
* @param array $sauvegardes Tableau des sauvegardes dans lequel puiser les liens existants
|
|
* @param array $ids_crees Tableau des nouveaux id des territoires.
|
|
* @param array $config_lien Tableau de configuration de la table de liens concernée composé des index:
|
|
* - `table` : nom complet de la table spip
|
|
* - `id_table` : nom du champ id du territoire
|
|
*
|
|
* @return void
|
|
*/
|
|
function liens_retablir($type_lien, $sauvegardes, $ids_crees, $config_lien) {
|
|
|
|
// On contruit la liste des enregistrements correspondant aux liens à rétablir.
|
|
$liens = array();
|
|
foreach ($sauvegardes[$type_lien] as $_lien) {
|
|
// identifier le code iso à partir de l'ancien id
|
|
$iso = array_search($_lien[$config_lien['id_table']], $sauvegardes['ids']);
|
|
// en déduire le nouvel id du territoire et le mettre à jour dans le tableau
|
|
// -- si l'iso n'est pas trouvé dans les nouveaux c'est que le territoire n'existe plus
|
|
// et qu'il ne faut pas rétablir les liens
|
|
if (isset($ids_crees[$iso])) {
|
|
$lien = $_lien;
|
|
$lien[$config_lien['id_table']] = $ids_crees[$iso];
|
|
$liens[] = $lien;
|
|
}
|
|
}
|
|
|
|
// Insertion des liens en une seule requête
|
|
if ($liens) {
|
|
sql_insertq_multi($config_lien['table'], $liens);
|
|
}
|
|
}
|