From 681ec152a5db8aed7951d81b488669679a4369fd Mon Sep 17 00:00:00 2001
From: nicod_ <nicod@lerebooteux.fr>
Date: Thu, 23 Jan 2025 19:29:44 +0100
Subject: [PATCH] feat: Ajout de fonctions utilitaires

---
 inc/blocks.php | 138 ++++++++++++++++++++++++++++---------------------
 1 file changed, 80 insertions(+), 58 deletions(-)

diff --git a/inc/blocks.php b/inc/blocks.php
index dc6a32f..0ce5f01 100644
--- a/inc/blocks.php
+++ b/inc/blocks.php
@@ -32,6 +32,67 @@ function blocks_deserialize($data): ?array {
 	return is_array($retour) ? $retour : null;
 }
 
+/**
+ * Obtenir les saisies d'un block
+ *
+ * @param int $id_block
+ * @return array
+ */
+function block_get_saisies(int $id_block): array {
+	static $cache;
+	if (isset($cache[$id_block])) {
+		return $cache[$id_block];
+	}
+	$saisies = [];
+	if ($blocktype = block_get_blocktype($id_block)) {
+		$saisies = blocktype_info($blocktype, 'saisies');
+	} else {
+		spip_log("get_block_saisies($id_block) : pas de blocktype", 'blocks.' . _LOG_DEBUG);
+	}
+	$cache[$id_block] = $saisies;
+
+	return $saisies;
+}
+
+/**
+ * Retourner le type de block d'un block
+ *
+ * @param int $id_block
+ * @return mixed
+ */
+function block_get_blocktype(int $id_block) {
+	return sql_getfetsel('blocktype', 'spip_blocks', 'id_block = ' . $id_block);
+}
+
+/**
+ * Retourner un tableau des valeurs saisies
+ *
+ * @param array $saisies
+ * @param array $valeurs
+ *
+ * @return array
+ */
+function block_get_valeurs(array $saisies, array $valeurs): array {
+	$retour = [];
+	include_spip('inc/saisies_lister');
+	$saisies_par_nom = saisies_lister_par_nom($saisies);
+	foreach ($saisies_par_nom as $nom => $saisie) {
+		$retour[$nom] = $valeurs[$nom] ?? null;
+	}
+
+	return $retour;
+}
+
+/**
+ * Chercher le squelette correspondant à un block par son identifiant
+ *
+ * @param string $blocktype      Type de bloc (identifiant)
+ * @param bool   $force_public   Forcer une recherche du squelette public
+ * @param bool   $chemin_complet Retourne le chemin complet du squelette
+ * @param bool   $dist           Retourne le squelette par défaut (dist))
+ * @return string Chemin du squelette trouvé
+ */
+
 /**
  * Chercher tous les types de blocs existant
  * On cherche des fichiers blocks/*.yaml dans le PATH
@@ -60,8 +121,11 @@ function blocktypes_lister_types(bool $exclure_ignores = true): array {
 				$yaml_data['identifiant'] = $blocktype;
 				$yaml_data['description'] = _T_ou_typo($yaml_data['description']);
 				$yaml_data['icone'] = isset($yaml_data['icone']) ? _blocktype_find_icone_path($yaml_data['icone']) : '';
+				$yaml_data['saisies'] = $yaml_data['saisies'] ?? [];
 
 				$liste_blocktypes[$blocktype] = $yaml_data;
+			} else {
+				spip_log("blocktypes_lister_types : $chemin / $blocktype =>  yaml pas décodé", 'blocks' . _LOG_DEBUG);
 			}
 		}
 	}
@@ -131,61 +195,19 @@ function _blocktype_find_icone_path(string $blocktype): string {
 function blocktype_info(string $blocktype, string $config) {
 	$blocktypes = blocktypes_lister_types();
 
-	return $blocktypes[$blocktype][$config] ?? null;
-}
-
-/**
- * Obtenir les saisies d'un block
- *
- * @param int $id_block
- * @return array
- */
-function block_get_saisies(int $id_block): array {
-	static $cache;
-	if (isset($cache[$id_block])) {
-		return $cache[$id_block];
-	}
-	$saisies = [];
-	if ($blocktype = sql_getfetsel('blocktype', 'spip_blocks', 'id_block = ' . $id_block)) {
-		$saisies = blocktype_info('saisies', $blocktype);
-	} else {
-		spip_log("get_block_saisies($id_block) : pas de blocktype", 'blocks.' . _LOG_DEBUG);
+	switch ($config) {
+		case 'saisies':
+			$defaut = [];
+			break;
+		default:
+			$defaut = null;
+			break;
 	}
-	$cache[$id_block] = $saisies;
 
-	return $saisies;
+	return $blocktypes[$blocktype][$config] ?? $defaut;
 }
 
-/**
- * Retourner un tableau des valeurs saisies
- *
- * @param string $saisies (sérialisées)
- * @param string $valeurs (sérialisées)
- *
- * @return array
- */
-function block_get_valeurs(array $saisies, array $valeurs): array {
-	$retour = [];
-	include_spip('inc/saisies_lister');
-	$saisies_par_nom = saisies_lister_par_nom($saisies);
-	foreach ($saisies_par_nom as $nom => $saisie) {
-		$retour[$nom] = $valeurs[$nom] ?? null;
-	}
-
-	return $retour;
-}
-
-/**
- * Chercher le squelette correspondant à un block par son identifiant
- *
- * @param string $blocktype      Type de bloc (identifiant)
- * @param bool   $force_public   Forcer une recherche du squelette public
- * @param bool   $chemin_complet Retourne le chemin complet du squelette
- * @param bool   $dist           Retourne le squelette par défaut (dist))
- * @return string Chemin du squelette trouvé
- */
-
-function blocks_trouver_squelette(
+function _blocktype_trouver_squelette(
 	string $blocktype,
 	bool $force_public = false,
 	bool $chemin_complet = false,
@@ -224,7 +246,7 @@ function blocks_trouver_squelette(
 }
 
 /**
- * Wrapper sans typage de la fonction blocks_trouver_squelette pour les squelettes SPIP
+ * Wrapper sans typage de la fonction _blocktype_trouver_squelette pour les squelettes SPIP
  * Les paramètres peuvent être vides ou des chaines et pas des bool
  *
  * @param $blocktype
@@ -239,7 +261,7 @@ function filtre_blocktype_squelette(
 	$chemin_complet = false,
 	$dist = true
 ) {
-	return blocks_trouver_squelette(
+	return _blocktype_trouver_squelette(
 		(string)$blocktype,
 		(bool)$force_public,
 		(bool)$chemin_complet,
@@ -252,8 +274,8 @@ function filtre_blocktype_squelette(
  * @param $blocktype
  * @return array
  */
-function bloctypes_trouver_enfants($blocktype): array {
-	return _bloctypes_trouver_role($blocktype, 'enfant');
+function bloctype_trouver_enfants($blocktype): array {
+	return _bloctype_trouver_role($blocktype, 'enfant');
 }
 
 /**
@@ -261,8 +283,8 @@ function bloctypes_trouver_enfants($blocktype): array {
  * @param $blocktype
  * @return array
  */
-function bloctypes_trouver_parents($blocktype): array {
-	return _bloctypes_trouver_role($blocktype, 'parent');
+function bloctype_trouver_parents($blocktype): array {
+	return _bloctype_trouver_role($blocktype, 'parent');
 }
 
 /**
@@ -271,7 +293,7 @@ function bloctypes_trouver_parents($blocktype): array {
  * @param string $role
  * @return array
  */
-function _bloctypes_trouver_role(string $blocktype, string $role): array {
+function _bloctype_trouver_role(string $blocktype, string $role): array {
 	$blocktypes_roles = [];
 	if (
 		$blocktype
-- 
GitLab