|
|
|
@ -218,10 +218,31 @@ function territoire_peupler($type, $pays = '', $options = array()) {
|
|
|
|
|
|
|
|
|
|
// On rétablit les liens vers les territoires et les logos
|
|
|
|
|
// -- les liens avec les autres objets
|
|
|
|
|
lien_retablir('liens', $sauvegardes);
|
|
|
|
|
$config_lien = array(
|
|
|
|
|
'table' => 'spip_territoires_liens',
|
|
|
|
|
'id_table' => 'id_territoire'
|
|
|
|
|
);
|
|
|
|
|
territoire_retablir_lien('liens', $sauvegardes, $config_lien);
|
|
|
|
|
|
|
|
|
|
// -- les liens avec les logos
|
|
|
|
|
lien_retablir('logos', $sauvegardes);
|
|
|
|
|
$config_lien = array(
|
|
|
|
|
'table' => 'spip_documents_liens',
|
|
|
|
|
'id_table' => 'id_objet'
|
|
|
|
|
);
|
|
|
|
|
territoire_retablir_lien('logos', $sauvegardes, $config_lien);
|
|
|
|
|
|
|
|
|
|
// Permettre à d'autres plugins de compléter le peuplement.
|
|
|
|
|
// -- par exemple le plugin Contours rétablit les liens vers les contours GIS (spip_liens_gis),
|
|
|
|
|
// les objets GIS étant conservés si ils existent déjà.
|
|
|
|
|
$flux = array(
|
|
|
|
|
'args' => array(
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
'sauvegardes' => $sauvegardes
|
|
|
|
|
),
|
|
|
|
|
'data' => array()
|
|
|
|
|
);
|
|
|
|
|
pipeline('post_peupler_territoire', $flux);
|
|
|
|
|
|
|
|
|
|
// On stocke les informations de chargement dans une meta.
|
|
|
|
|
$contenu = array(
|
|
|
|
@ -313,6 +334,18 @@ function territoire_depeupler($type, $pays = '') {
|
|
|
|
|
// Vider les liens éventuels avec les autres objets (on gère pas d'erreur)
|
|
|
|
|
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),
|
|
|
|
|
// Par contre, les objets GIS sont conservés si ils en existent.
|
|
|
|
|
$flux = array(
|
|
|
|
|
'args' => array(
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
),
|
|
|
|
|
'data' => array()
|
|
|
|
|
);
|
|
|
|
|
pipeline('post_depeupler_territoire', $flux);
|
|
|
|
|
|
|
|
|
|
// Supprimer la meta propre au pays même si le vidage des liens est en erreur.
|
|
|
|
|
$meta = 'territoires_peuplement';
|
|
|
|
|
peuplement_deconsigner($meta, $type, $pays);
|
|
|
|
@ -342,9 +375,9 @@ function territoire_depeupler($type, $pays = '') {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Extrait, pour un les régions, les pays ou les ubdivisions d'un pays, la liste des territoires ayant fait l'objet
|
|
|
|
|
* 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 ou logo) 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.
|
|
|
|
|
* Les extras ne sont pas sauvegardés car il ne sont ni modifiables ni indexés par un id mais par un code invariant.
|
|
|
|
|
*
|
|
|
|
|
* @api
|
|
|
|
|
*
|
|
|
|
@ -399,13 +432,24 @@ function territoire_preserver($type, $pays = '') {
|
|
|
|
|
// -- détermination de la liste des champs éditables.
|
|
|
|
|
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 et l'id qui servira aux liens.
|
|
|
|
|
// -- pour le select, les champs éditables sont complétés par le code ISO.
|
|
|
|
|
$select = array_merge($description_table['champs_editables'], array('iso_territoire'));
|
|
|
|
|
$where[] = 'edite=' . sql_quote('oui');
|
|
|
|
|
$editions = sql_allfetsel($select, $from, $where);
|
|
|
|
|
// -- indexer le tableau par le code iso de façon à simplifier la réintégration.
|
|
|
|
|
$territoires['editions'] = array_column($editions, null, 'iso_territoire');
|
|
|
|
|
|
|
|
|
|
// 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(
|
|
|
|
|
'type' => $type,
|
|
|
|
|
'pays' => $pays,
|
|
|
|
|
),
|
|
|
|
|
'data' => $territoires
|
|
|
|
|
);
|
|
|
|
|
$territoires = pipeline('post_preserver_territoire', $flux);
|
|
|
|
|
|
|
|
|
|
return $territoires;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -531,6 +575,42 @@ function territoire_extra_est_peuple($type_extra, $type, $pays = '') {
|
|
|
|
|
return $est_peuple;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Rétablit les liens d'un type d'objet avec les territoires peuplés ou repeuplés.
|
|
|
|
|
*
|
|
|
|
|
* @internal
|
|
|
|
|
*
|
|
|
|
|
* @param string $type_lien Type de liens à restaurer : `liens` ou `logos`.
|
|
|
|
|
* @param array $sauvegardes Tableau des sauvegardes dans lequel puiser les liens existants et les nouveaux id.
|
|
|
|
|
* @param array $config_lien Tableau de configuration de la table de liens concernée composé des index:
|
|
|
|
|
* - `table` : nom complet de la table spip
|
|
|
|
|
* - `id_table` : nom du champ id du territoire
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
function territoire_retablir_lien($type_lien, $sauvegardes, $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 de la territoire et le mettre à jour dans le tableau
|
|
|
|
|
// -- si l'iso n'est pas trouvé dans les nouveaux c'est que la territoire n'existe plus
|
|
|
|
|
// et qu'il ne faut pas rétablir les liens
|
|
|
|
|
if (isset($ids[$iso])) {
|
|
|
|
|
$lien = $_lien;
|
|
|
|
|
$lien[$config_lien['id_table']] = $ids[$iso];
|
|
|
|
|
$liens[] = $lien;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Insertion des liens en une seule requête
|
|
|
|
|
if ($liens) {
|
|
|
|
|
sql_insertq_multi($config_lien['table'], $liens);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Consigne le peuplement d'un type de territoire.
|
|
|
|
|
*
|
|
|
|
@ -725,51 +805,6 @@ function traduction_fusionner($multi_prioritaire, $multi_non_prioritaire) {
|
|
|
|
|
return $multi_merge;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Supprime la consignation du peuplement d'un type de territoire.
|
|
|
|
|
*
|
|
|
|
|
* @internal
|
|
|
|
|
*
|
|
|
|
|
* @param string $type_lien Type de liens à restaurer : `liens` ou `logos`.
|
|
|
|
|
* @param array $sauvegardes Tableau des sauvegardes dans lequel puiser les liens existants et les nouveaux id.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
function lien_retablir($type_lien, $sauvegardes) {
|
|
|
|
|
|
|
|
|
|
// Configuration des tables de liens
|
|
|
|
|
static $tables = array(
|
|
|
|
|
'liens' => array(
|
|
|
|
|
'table' => 'spip_territoires_liens',
|
|
|
|
|
'id_table' => 'id_territoire'
|
|
|
|
|
),
|
|
|
|
|
'logos' => array(
|
|
|
|
|
'table' => 'spip_documents_liens',
|
|
|
|
|
'id_table' => 'id_objet'
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 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[$tables[$type_lien]['id_table']], $sauvegardes['ids']);
|
|
|
|
|
// en déduire le nouvel id de la territoire et le mettre à jour dans le tableau
|
|
|
|
|
// -- si l'iso n'est pas trouvé dans les nouveaux c'est que la territoire n'existe plus
|
|
|
|
|
// et qu'il ne faut pas rétablir les liens
|
|
|
|
|
if (isset($ids[$iso])) {
|
|
|
|
|
$lien = $_lien;
|
|
|
|
|
$lien[$tables[$type_lien]['id_table']] = $ids[$iso];
|
|
|
|
|
$liens[] = $lien;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Insertion des liens en une seule requête
|
|
|
|
|
if ($liens) {
|
|
|
|
|
sql_insertq_multi($tables[$type_lien]['table'], $liens);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $territoire
|
|
|
|
|
* @param $type
|
|
|
|
|