@ -236,8 +236,8 @@ function territoire_peupler($type, $pays = '', $options = array()) {
// les objets GIS étant conservés si ils existent déjà.
$flux = array(
'args' => array(
'type' => $type,
'pays' => $pays,
'type' => $type,
'pays' => $pays,
'sauvegardes' => $sauvegardes
),
'data' => array()
@ -310,7 +310,6 @@ function territoire_depeupler($type, $pays = '') {
if (territoire_est_peuple($type, $pays)) {
// 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.
// -- on calcule donc d'emblée la condition IN qui sera appliquée sur la table de liens.
$from = 'spip_territoires';
$where = array(
'type=' . sql_quote($type),
@ -318,49 +317,56 @@ function territoire_depeupler($type, $pays = '') {
if ($type === 'subdivision') {
$where[] = 'iso_pays=' . sql_quote($pays);
}
$where_lien[] = sql_in_select('id_territoire', 'id_territoire', $from, $where);
$where_logo[] = sql_in_select('id_objet', 'id_territoire', $from, $where);
$sql_ok = sql_delete($from, $where);
if ($sql_ok !== false) {
// Vider les extras si besoin
$sql_ok = sql_delete('spip_territoires_extras', $where);
if ($ids = sql_allfetsel('id_territoire', $from, $where)) {
$ids = array_column($ids, 'id_territoire');
$sql_ok = sql_delete($from, $where);
if ($sql_ok !== false) {
// Vider les liens éventuels avec les logos (on gère pas d'erreur)
$where_logo[] = '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)
sql_delete('spip_territoires_liens', $where_lien);
// Vider les extras si besoin
$sql_ok = sql_delete('spip_territoires_extras', $where);
if ($sql_ok !== false) {
// Vider les liens éventuels avec les logos (on gère pas d'erreur)
$where_logo = array(
sql_in('id_objet', $ids),
'objet=' . sql_quote('territoire')
);
sql_delete('spip_documents_liens', $where_logo);
// 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);
// Vider les liens éventuels avec les autres objets (on gère pas d'erreur)
$where_lien = array(
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),
// Par contre, les objets GIS sont conservés si ils existent.
$flux = array(
'args' => array(
'type' => $type,
'pays' => $pays,
'ids_territoire' => $ids,
),
'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);
}
// Supprimer la meta propre au pays même si le vidage des liens est en erreur.
peuplement_deconsigner('territoires_peuplement', $type, $pays);
}
// Enregistrer le succès ou pas du déchargement de la table
if ($sql_ok !== false) {
// Succès complet
$retour['ok'] = true;
spip_log("Les territoires (Type '${type}' - Pays '${pays}') ont été vidés avec succès ainsi que les extras", 'territoires' . _LOG_DEBUG);
// Enregistrer le succès ou pas du déchargement de la table
if ($sql_ok !== false) {
// Succès complet
$retour['ok'] = true;
spip_log("Les territoires (Type '${type}' - Pays '${pays}') ont été vidés avec succès ainsi que les extras", 'territoires' . _LOG_DEBUG);
} else {
spip_log("Les territoires (Type '${type}' - Pays '${pays}') ont été vidés avec succès mais erreur lors du vidage des extras", 'territoires' . _LOG_ERREUR);
}
} else {
spip_log("Les territoires (Type '${type}' - Pays '${pays}') ont été vidés avec succès mais erreur lors du vidage des extras", 'territoires' . _LOG_ERREUR);
spip_log("Erreur de vidage d es territoires (Type '${type}' - Pays '${pays}')", 'territoires' . _LOG_ERREUR);
}
} else {
spip_log("Erreur de vidage des territoires (Type '${type}' - Pays '${pays}')", 'territoires' . _LOG_ERREUR);
}
} else {
$retour['sha'] = true;
@ -412,6 +418,7 @@ function territoire_preserver($type, $pays = '') {
$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');
// -- les liens
$where_ids = array(
@ -928,7 +935,6 @@ function extra_compiler($mode, $types_extras, $source, $configuration, $type, $p
* @return string
*/
function consigne_identifier($type, $pays = '', $service = '') {
if ($type === 'subdivision') {
$consigne = $service
? "${type}/${pays}/${service}"