$_descriptions) { $noisettes_squelette = $information ? array_column($_descriptions, $information, $cle) : array_column($_descriptions, null, $cle); $noisettes = array_merge($noisettes, $noisettes_squelette); } } } } return $noisettes; } /** * Renvoie la description brute d'un type de noisette sans traitement typo ni désérialisation des champs de type * tableau sérialisé. * * Le service N-Core lit la description du type de noisette concerné dans le cache des descriptions. * * @package SPIP\NCORE\SERVICE\TYPE_NOISETTE * * @uses cache_lire() * * @param string $plugin * Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou * un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. * @param mixed $noisette * Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaine unique, soit la forme * d'un couple (squelette, rang). * @param string $stockage * Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin * ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin * fournissant le service de stockage souhaité. * * @return array * Tableau de la description du type de noisette. Les champs textuels et les champs de type tableau sérialisé * sont retournés en l'état. */ function ncore_noisette_decrire($plugin, $noisette, $stockage = '') { $description = array(); // On cherche le service de stockage à utiliser selon la logique suivante : // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément; // - sinon, on utilise la fonction du plugin appelant si elle existe; // - et sinon, on utilise la fonction de N-Core. include_spip('inc/ncore_utils'); if ($decrire = ncore_chercher_service($plugin, 'noisette_decrire', $stockage)) { // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage. $description = $decrire($plugin, $noisette); } else { // Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé. // -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format // [squelette][rang] = description include_spip('inc/config'); $meta_noisettes = lire_config("${plugin}_noisettes", array()); // On recherche la description dans la meta. if ($meta_noisettes) { if (!is_array($noisette)) { // L'identifiant est l'id unique de la noisette. Il faut donc parcourir le tableau pour trouver la // noisette désirée // => ce n'est pas la méthode optimale pour le stockage N-Core. $noisette_trouvee = false; foreach ($meta_noisettes as $_noisettes_squelette) { foreach ($_noisettes_squelette as $_noisette) { if ($_noisette['id_noisette'] == $noisette) { $description = $_noisette; $noisette_trouvee = true; break; } } if ($noisette_trouvee) { break; } } } elseif (isset($noisette['squelette']) and isset($noisette['rang']) and !empty($meta_noisettes[$noisette['squelette']][$noisette['rang']])) { // L'identifiant est un tableau associatif fournissant le squelette et le rang. // Comme la meta de N-Core est structurée ainsi c'est la méthode la plus adaptée pour adresser // le stockage de N-Core. $description = $meta_noisettes[$noisette['squelette']][$noisette['rang']]; } } } return $description; }