Valider 848ad834 rédigé par Eric Lupinacci's avatar Eric Lupinacci
Parcourir les fichiers

ENcore quelques réorganisations de fonctions

parent 5598ced4
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −38
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,11 +15,11 @@ if (!defined('_EXTRAIRE_MULTI')) {
}

/**
 * Extrait, pour un les régions, les pays ou les subdivisions d'un pays, la liste des territoires ayant fait l'objet
 * Extrait, pour les régions, les pays ou les subdivisions d'un pays, la liste des territoires ayant fait l'objet
 * d'une modification manuelle (descriptif) 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 mais par un code invariant.
 * Si l'extraction fait suite à un chargement asynchrone, les territoires modifiés sont sauvegardés dans une cache.
 * Si l'extraction fait suite à un chargement asynchrone, les territoires modifiés sont sauvegardés dans un cache.
 *
 * @internal
 *
@@ -334,39 +334,3 @@ function extra_compiler(string $mode, array $types_extras, array $source, array

	return $extras;
}

/**
 * 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(string $type_lien, array $sauvegardes, array $ids_crees, array $config_lien) : void {
	// On contruit la liste des enregistrements correspondant aux liens à rétablir.
	$liens = [];
	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);
	}
}
+38 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -275,14 +275,14 @@ function unite_peuplement_charger(string $type, ?string $pays, ?array $options =
					'table'    => 'spip_territoires_liens',
					'id_table' => 'id_territoire'
				];
				liens_retablir('liens', $sauvegardes, $ids, $config_lien);
				unite_peuplement_retablir_liens('liens', $sauvegardes, $ids, $config_lien);

				// -- les liens avec les logos
				$config_lien = [
					'table'    => 'spip_documents_liens',
					'id_table' => 'id_objet'
				];
				liens_retablir('logos', $sauvegardes, $ids, $config_lien);
				unite_peuplement_retablir_liens('logos', $sauvegardes, $ids, $config_lien);
				$timestamp['retablissement'] = microtime(true);

				// Permettre à d'autres plugins de compléter le peuplement.
@@ -901,3 +901,39 @@ function unite_peuplement_informer_feeds(string $plugin, string $type, ?string $
		return $infos;
	}
}

/**
 * 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`, `logos` ou autre.
 * @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 unite_peuplement_retablir_liens(string $type_lien, array $sauvegardes, array $ids_crees, array $config_lien) : void {
	// On contruit la liste des enregistrements correspondant aux liens à rétablir.
	$liens = [];
	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);
	}
}
+26 −22
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -22,6 +22,32 @@ if (!defined('_TERRITOIRE_COMPATIBILITE_ISOCODE')) {
	define('_TERRITOIRE_COMPATIBILITE_ISOCODE', ['vmin' => '2.0.1']);
}

// -----------------------------------------------------------------------
// ----------- SERVICES RELATIFS AUX SERVEURS DE PEUPLEMENT --------------
// -----------------------------------------------------------------------

/**
 * Renvoie, pour le plugin appelant, les bornes de compatibilité avec le serveur fournissant une nature d'informations
 * donnée sur les territoires.
 * En fait, la nature d'information est liée au plugin appelant (nomenclatures pour Territoires, contours géographiques
 * pour le plugin Contours de territoires, etc.).
 *
 * @param string $plugin Préfixe du plugin appelant.
 *
 * @return array Bornes de compatibilité avec le serveur.
 */
function territoires_serveur_definir_compatibilite(string $plugin) : array {
	// On passe la main à un service spécifique du plugin appelant si demandé.
	if ($definir = territoires_chercher_service($plugin, 'serveur_definir_compatibilite')) {
		$bornes = $definir();
	} else {
		// Territoires utilise différents index suivant le type de territoires : inscrit dans la configuration
		$bornes = _TERRITOIRE_COMPATIBILITE_ISOCODE;
	}

	return $bornes;
}

// -----------------------------------------------------------------------
// ------------------- SERVICES RELATIFS AUX FEEDS -----------------------
// -----------------------------------------------------------------------
@@ -123,28 +149,6 @@ function territoires_feed_acquerir(string $plugin, array $categories_feed) : arr
	return $feeds[$index] ?? [];
}

/**
 * Renvoie, pour le plugin appelant, les bornes de compatibilité avec le serveur fournissant une nature d'informations
 * donnée sur les territoires.
 * En fait, la nature d'information est liée au plugin appelant (nomenclatures pour Territoires, contours géographiques
 * pour le plugin Contours de territoires, etc.).
 *
 * @param string $plugin Préfixe du plugin appelant.
 *
 * @return array Bornes de compatibilité avec le serveur.
 */
function territoires_serveur_definir_compatibilite(string $plugin) : array {
	// On passe la main à un service spécifique du plugin appelant si demandé.
	if ($definir = territoires_chercher_service($plugin, 'serveur_definir_compatibilite')) {
		$bornes = $definir();
	} else {
		// Territoires utilise différents index suivant le type de territoires : inscrit dans la configuration
		$bornes = _TERRITOIRE_COMPATIBILITE_ISOCODE;
	}

	return $bornes;
}

// -----------------------------------------------------------------------
// ------------ SERVICES RELATIFS AUX UNITES DE PEUPLEMENT ---------------
// -----------------------------------------------------------------------