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.
territoires/inc/territoires_services.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);
}
}