From 4132d18c50ad877ddfd860d93d0686703b96ed12 Mon Sep 17 00:00:00 2001
From: nicod_ <nicod@lerebooteux.fr>
Date: Sat, 15 Apr 2023 17:20:28 +0200
Subject: [PATCH] =?UTF-8?q?Fonctions=20g=C3=A9n=C3=A9riques=20de=20s=C3=A9?=
 =?UTF-8?q?rialisation?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 blocks_fonctions.php                     |  8 ++++++++
 formulaires/editer_blocs_type_champs.php | 10 ++++++----
 prive/objets/contenu/blocs_type.html     |  2 +-
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/blocks_fonctions.php b/blocks_fonctions.php
index 35cf993..ab8c648 100644
--- a/blocks_fonctions.php
+++ b/blocks_fonctions.php
@@ -12,3 +12,11 @@
 if (!defined('_ECRIRE_INC_VERSION')) {
 	return;
 }
+
+function blocks_serialize($data) {
+	return json_encode($data);
+}
+
+function blocks_deserialize($data) {
+	return json_decode($data ?? '', true);
+}
diff --git a/formulaires/editer_blocs_type_champs.php b/formulaires/editer_blocs_type_champs.php
index 0d322c2..cb55ea0 100644
--- a/formulaires/editer_blocs_type_champs.php
+++ b/formulaires/editer_blocs_type_champs.php
@@ -4,6 +4,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 	return;
 }
 
+include_spip('blocks_fonctions');
+
 function formulaires_editer_blocs_type_champs_charger($id_blocs_type, $redirect = '') {
 	$id_blocs_type = intval($id_blocs_type);
 	$contexte = [];
@@ -14,13 +16,13 @@ function formulaires_editer_blocs_type_champs_charger($id_blocs_type, $redirect
 		and $blocs_type = sql_fetsel('*', 'spip_blocs_types', 'id_blocs_type = ' . $id_blocs_type)
 		and autoriser('editer', 'blocs_type', $id_blocs_type)
 	) {
-		$saisies = json_decode($blocs_type['saisies'], true);
+		$saisies = blocks_deserialize($blocs_type['saisies']);
 
 		// Est-ce qu'on restaure une révision ?
 		if ($id_version = _request('id_version')) {
 			include_spip('inc/revisions');
 			$old = recuperer_version($id_blocs_type, 'blocs_type', $id_version);
-			$saisies = json_decode($old['saisies'], true);
+			$saisies = blocks_deserialize($old['saisies']);
 		}
 		if (!is_array($saisies)) {
 			$saisies = [];
@@ -62,7 +64,7 @@ function formulaires_editer_blocs_type_champs_verifier($id_blocs_type, $redirect
 		// Attention à s'assurer que tout les elements du tableau soit bien soit des tableaux, soit un string
 		// En effet, le md5 du formulaire_initial est calculé à partir de ce qui est passé au squelette
 		// Or dès qu'une valeur est passée à un squelette, elle est changé en string, à cause du mode de compilation (?)
-		$saisies_anciennes = json_decode($saisies_anciennes, true);
+		$saisies_anciennes = blocks_deserialize($saisies_anciennes);
 		$saisies_anciennes_str = $saisies_anciennes;
 		array_walk_recursive($saisies_anciennes_str, 'blocs_types_array_walk_recursive_strval');
 		$md5_saisies_anciennes = md5(serialize($saisies_anciennes_str));
@@ -118,7 +120,7 @@ function formulaires_editer_blocs_type_champs_traiter($id_blocs_type, $redirect
 
 		// On envoie les nouvelles dans la table
 		include_spip('action/editer_objet');
-		$err = objet_modifier('blocs_type', $id_blocs_type, ['saisies' => json_encode(saisies_identifier($saisies_nouvelles))]);
+		$err = objet_modifier('blocs_type', $id_blocs_type, ['saisies' => blocks_serialize(saisies_identifier($saisies_nouvelles))]);
 
 		// Si c'est bon on reinitialise les sessions
 		if (!$err) {
diff --git a/prive/objets/contenu/blocs_type.html b/prive/objets/contenu/blocs_type.html
index 127b65e..dbd5f14 100644
--- a/prive/objets/contenu/blocs_type.html
+++ b/prive/objets/contenu/blocs_type.html
@@ -4,7 +4,7 @@
 	<span dir="#LANG_DIR" class="#EDIT{titre} titre">(#TITRE)</span>
 </div>]
 
-#SET{saisies, #SAISIES|json_decode{1}}
+#SET{saisies, #SAISIES|blocks_deserialize{1}}
 [(#GET{saisies}|oui)
 	<h2><:blocs_type:champ_saisies_label:/></h2>
 	<div class="formulaire_spip">
-- 
GitLab