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