From d80e2d1adc0e8348a5ba4c1d96dd8d14c9eb09bf Mon Sep 17 00:00:00 2001
From: "real3t@gmail.com" <>
Date: Mon, 27 Aug 2018 16:49:16 +0000
Subject: [PATCH] Backport de la fonction d'importation depuis le fork
 d'IEconfig

---
 soyezcreateurs_fonctions_ieconfig.php | 136 ++++++++------------------
 1 file changed, 41 insertions(+), 95 deletions(-)

diff --git a/soyezcreateurs_fonctions_ieconfig.php b/soyezcreateurs_fonctions_ieconfig.php
index 268559da..c53d66c7 100644
--- a/soyezcreateurs_fonctions_ieconfig.php
+++ b/soyezcreateurs_fonctions_ieconfig.php
@@ -18,7 +18,7 @@
 /*	- 'fusion' : Fusionner la configuration actuelle avec le fichier d'importation, les paramètres non renseignés dans le fichier d'importation sont conservés
 /*	- 'fusion_inv' : Fusionner la configuration actuelle avec le fichier d'importation, les paramètres renseignés dans le fichier d'importation sont ignorés s'il sont présent dans la configuration actuelle
 */
-function sc_ieconfig_importer_fichier($chemin,$option) {
+function sc_ieconfig_importer_fichier($chemin,$option = 'ecrase') {
 	include_spip('inc/yaml');
 		$config = yaml_decode_file($chemin);
 
@@ -33,10 +33,8 @@ function sc_ieconfig_importer_fichier($chemin,$option) {
 
 		// Gestion des plugins utilisant le pipeline ieconfig_metas
 		foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
-
-			//Si on veut une importation avec écrasement
-			if ($option === 'ecrase') {
-				
+			if (in_array($prefixe, $import_metas) && isset($config[$prefixe])) {
+				$config_importee .= $prefixe . ' ';
 				if (isset($data['metas_brutes'])) {
 					foreach (explode(',', $data['metas_brutes']) as $meta) {
 						// On teste le cas ou un prefixe est indique (dernier caractere est *)
@@ -44,51 +42,25 @@ function sc_ieconfig_importer_fichier($chemin,$option) {
 							$p = substr($meta, 0, -1);
 							foreach ($config[$prefixe] as $m => $v) {
 								if (substr($m, 0, strlen($p)) == $p) {
-									ecrire_config($m . '/', $v);
+									if (($option === 'ecrase') OR ($option === 'fusion')) {
+										ecrire_config($m);
+									}
+									if ($option === 'fusion_inv') {
+										if (is_null(lire_config($m . '/'))) {
+											ecrire_config($m . '/', $v);
+										}
+									}
 								}
 							}
 						} elseif (isset($config[$prefixe][$meta])) {
-							ecrire_config($meta . '/', $config[$prefixe][$meta]);
-						}
-					}
-				}
-				if (isset($data['metas_serialize'])) {
-					foreach (explode(',', $data['metas_serialize']) as $meta) {
-						// On teste le cas ou un prefixe est indique (dernier caractere est *)
-						if (substr($meta, -1) == '*') {
-							$p = substr($meta, 0, -1);
-							foreach ($config[$prefixe] as $m => $v) {
-								if (substr($m, 0, strlen($p)) == $p) {
-									ecrire_config($m . '/', serialize($v));
-								}
+							if (($option === 'ecrase') OR ($option === 'fusion')) {
+								ecrire_config($meta . '/', $config[$prefixe][$meta]);
 							}
-						} elseif (isset($config[$prefixe][$meta])) {
-							ecrire_config($meta . '/', serialize($config[$prefixe][$meta]));
-						}
-					}
-				}
-			}
-			//Si on veut une importation avec fusion
-			if ($option === 'fusion') {
-				
-				if (isset($data['metas_brutes'])) {
-					foreach (explode(',', $data['metas_brutes']) as $meta) {
-						// On teste le cas ou un prefixe est indique (dernier caractere est *)
-						if (substr($meta, -1) == '*') {
-							$p = substr($meta, 0, -1);
-							foreach ($config[$prefixe] as $m => $v) {
-								if (substr($m, 0, strlen($p)) == $p) {
-									$save = lire_config($m . '/', $v);
-									$import = ($v);
-									$import = array_merge($save,$import);
-									ecrire_config($m . '/', $v);
+							if ($option === 'fusion_inv') {
+								if (is_null(lire_config($meta . '/'))) {
+									ecrire_config($meta . '/', $config[$prefixe][$meta]);
 								}
 							}
-						} elseif (isset($config[$prefixe][$meta])) {
-							$save = lire_config($meta . '/', $config[$prefixe][$meta]);
-							$import = ($config[$prefixe][$meta]);							
-							$import = array_merge($save,$import);
-							ecrire_config($meta . '/', $import);
 						}
 					}
 				}
@@ -99,62 +71,36 @@ function sc_ieconfig_importer_fichier($chemin,$option) {
 							$p = substr($meta, 0, -1);
 							foreach ($config[$prefixe] as $m => $v) {
 								if (substr($m, 0, strlen($p)) == $p) {
-									$save = lire_config($m . '/', serialize($v));
-									$import = ($v);
-									$import = array_merge($save,$import);
-									ecrire_config($m . '/', serialize($import));				
+									$import = array();
+									if ($option === 'ecrase') {
+										$import = $v;
+									}
+									if ($option === 'fusion') {
+										$import = array_merge(lire_config($m . '/'), $v);
+									}
+									if ($option === 'fusion_inv') {
+										$import_plus = array_diff_key($v, lire_config($meta . '/'));
+										$import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
+										$import = (array_merge($import_plus, $import_base));
+									}
+									ksort($import);
+									ecrire_config($m . '/', serialize($import));
 								}
 							}
 						} elseif (isset($config[$prefixe][$meta])) {
-							$save = lire_config($meta . '/', serialize($config[$prefixe][$meta]));
-							$import = ($config[$prefixe][$meta]);
-							$import = array_merge($save,$import);
-							ecrire_config($meta . '/', serialize($import));
-						}
-					}
-				}
-			}
-			//Si on veut une importation avec fusion_inv
-			if ($option === 'fusion_inv') {
-
-				if (isset($data['metas_brutes'])) {
-					foreach (explode(',', $data['metas_brutes']) as $meta) {
-						// On teste le cas ou un prefixe est indique (dernier caractere est *)
-						if (substr($meta, -1) == '*') {
-							$p = substr($meta, 0, -1);
-							foreach ($config[$prefixe] as $m => $v) {
-								if (substr($m, 0, strlen($p)) == $p) {
-									$save = lire_config($m . '/', $v);
-									$import = ($v);
-									$import = array_merge($import,$save);
-									ecrire_config($m . '/', $import);
-								}
+							$import = array();
+							if ($option === 'ecrase') {
+								$import = $config[$prefixe][$meta];
 							}
-						} elseif (isset($config[$prefixe][$meta])) {
-							$save = lire_config($meta . '/', $config[$prefixe][$meta]);
-							$import = ($config[$prefixe][$meta]);							
-							$import = array_merge($import,$save);
-							ecrire_config($meta . '/', $import);
-						}
-					}
-				}
-				if (isset($data['metas_serialize'])) {
-					foreach (explode(',', $data['metas_serialize']) as $meta) {
-						// On teste le cas ou un prefixe est indique (dernier caractere est *)
-						if (substr($meta, -1) == '*') {
-							$p = substr($meta, 0, -1);
-							foreach ($config[$prefixe] as $m => $v) {
-								if (substr($m, 0, strlen($p)) == $p) {
-									$save = lire_config($m . '/', serialize($v));
-									$import = ($v);
-									$import = array_merge($import,$save);
-									ecrire_config($m . '/', serialize($import));
-								}
+							if ($option === 'fusion') {
+								$import = array_merge(lire_config($meta . '/'), $config[$prefixe][$meta]);
 							}
-						} elseif (isset($config[$prefixe][$meta])) {
-							$save = lire_config($meta . '/', serialize($config[$prefixe][$meta]));
-							$import = ($config[$prefixe][$meta]);
-							$import = array_merge($import,$save);
+							if ($option === 'fusion_inv') {
+								$import_plus = array_diff_key($config[$prefixe][$meta], lire_config($meta . '/'));
+								$import_base = array_diff_key(lire_config($meta . '/'), $import_plus);
+								$import = (array_merge($import_plus, $import_base));
+							}
+							ksort($import);
 							ecrire_config($meta . '/', serialize($import));
 						}
 					}
-- 
GitLab