Ne pas oublier les ids nouvellement créés pour rétablir les liens

v0_spip32
Eric Lupinacci 3 years ago
parent 6df09aea00
commit 69613cbdf3

@ -109,7 +109,7 @@ function territoire_peupler($type, $pays = '', $options = array()) {
$configuration = $GLOBALS['territoires'][$type];
$meta = 'territoires_peuplement';
// On récupère tous les index fournis la collection et pas uniquement celui des territoires du type.
// On récupère tous les index fournis par la collection et pas uniquement celui des territoires concernés.
// Ainsi, les autres index éventuels restent disponibles.
$collection = territoire_acquerir($type, $pays);
if (!empty($collection[$configuration['champs']['index']])) {
@ -222,14 +222,14 @@ function territoire_peupler($type, $pays = '', $options = array()) {
'table' => 'spip_territoires_liens',
'id_table' => 'id_territoire'
);
territoire_retablir_lien('liens', $sauvegardes, $config_lien);
territoire_retablir_lien('liens', $sauvegardes, $ids, $config_lien);
// -- les liens avec les logos
$config_lien = array(
'table' => 'spip_documents_liens',
'id_table' => 'id_objet'
);
territoire_retablir_lien('logos', $sauvegardes, $config_lien);
territoire_retablir_lien('logos', $sauvegardes, $ids, $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),
@ -238,7 +238,8 @@ function territoire_peupler($type, $pays = '', $options = array()) {
'args' => array(
'type' => $type,
'pays' => $pays,
'sauvegardes' => $sauvegardes
'sauvegardes' => $sauvegardes,
'ids_crees' => $ids,
),
'data' => array()
);
@ -341,7 +342,7 @@ function territoire_depeupler($type, $pays = '') {
// 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.
// mais pas les objets GIS.
$flux = array(
'args' => array(
'type' => $type,
@ -591,26 +592,27 @@ function territoire_extra_est_peuple($type_extra, $type, $pays = '') {
* @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 $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
* - `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) {
function territoire_retablir_lien($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 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
// 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[$iso])) {
if (isset($ids_crees[$iso])) {
$lien = $_lien;
$lien[$config_lien['id_table']] = $ids[$iso];
$lien[$config_lien['id_table']] = $ids_crees[$iso];
$liens[] = $lien;
}
}

Loading…
Cancel
Save