Changeset 107320 in spip-zone


Ignore:
Timestamp:
Nov 3, 2017, 4:58:53 PM (22 months ago)
Author:
eric@…
Message:

On stocke l'id du conteneur de façon à l'utiliser plus simplement dans les autres fonctions de l'API et de ne pas faire appel plusieurs fois à la fonction de construction de l'id.

Location:
_plugins_/n-core/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/n-core/trunk/inc/ncore_noisette.php

    r107316 r107320  
    6262                $parametres = saisies_lister_valeurs_defaut($champs);
    6363
    64                 // On initialise la description de la noisette à ajouter
    65                 $description = array(
    66                         'plugin'     => $plugin,
    67                         'noisette'   => $type_noisette,
    68                         'conteneur'  => serialize($conteneur),
    69                         'rang'       => intval($rang),
    70                         'parametres' => serialize($parametres),
    71                         'balise'     => 'defaut',
    72                         'css'        => ''
    73                 );
    74 
    7564                // On charge les services de N-Core.
    7665                // Ce sont ces fonctions qui aiguillent ou pas vers un service spécifique du plugin.
    7766                include_spip('ncore/ncore');
     67
     68                // On initialise la description de la noisette à ajouter et en particulier on stocke l'id du conteneur
     69                // pour simplifier les traitements par la suite.
     70                $description = array(
     71                        'plugin'       => $plugin,
     72                        'noisette'     => $type_noisette,
     73                        'conteneur'    => serialize($conteneur),
     74                        'id_conteneur' => ncore_conteneur_identifier($plugin, $conteneur, $stockage),
     75                        'rang'         => intval($rang),
     76                        'parametres'   => serialize($parametres),
     77                        'balise'       => 'defaut',
     78                        'css'          => ''
     79                );
    7880
    7981                // Complément à la description par défaut, spécifique au plugin utilisateur, si nécessaire.
     
    130132 * @param mixed  $noisette
    131133 *        Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaine unique, soit la forme
    132  *        d'un couple (conteneur, rang).
     134 *        d'un couple (id conteneur, rang).
    133135 * @param string $stockage
    134136 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     
    154156        if (!empty($noisette) and (is_string($noisette) or is_numeric($noisette) or is_array($noisette))) {
    155157                // Avant de supprimer la noisette on sauvegarde sa description.
    156                 // Cela permet de conserver le rang et le conteneur indépendamment de l'identifiant
     158                // Cela permet de conserver le rang et l'id du conteneur indépendamment de l'identifiant
    157159                // utilisé pour spécifier la noisette.
    158160                $description = ncore_noisette_decrire($plugin, $noisette, $stockage);
     
    165167                $autres_noisettes = ncore_noisette_lister(
    166168                        $plugin,
    167                         unserialize($description['conteneur']),
     169                        $description['id_conteneur'],
    168170                        '',
    169171                        'rang',
     
    199201 * @param mixed   $noisette
    200202 *        Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaine unique, soit la forme
    201  *        d'un couple (conteneur, rang).
     203 *        d'un couple (id conteneur, rang).
    202204 * @param string  $information
    203205 *        Information spécifique à retourner ou vide pour retourner toute la description.
     
    218220        // On indexe le tableau des descriptions par le plugin appelant en cas d'appel sur le même hit
    219221        // par deux plugins différents.
    220         // En outre, on gère un tableau par type d'identification, id noisette ou couple (conteneur, rang).
     222        // En outre, on gère un tableau par type d'identification, id noisette ou couple (id conteneur, rang).
    221223        static $description_noisette_par_id = array();
    222224        static $description_noisette_par_rang = array();
     
    230232                include_spip('ncore/ncore');
    231233
    232                 // On vérifie si la description n'a pas déjà été enregistrée dans le tableau adéquat.
    233                 $description_existe = isset($description_noisette_par_id[$plugin][$noisette]) ? true : false;
     234                // On vérifie si la noisette est valide et si la description n'a pas déjà été enregistrée dans le tableau adéquat.
     235                $description_existe = false;
     236                $noisette_invalide = false;
    234237                if (!is_array($noisette)) {
    235238                        $description_existe = isset($description_noisette_par_id[$plugin][$noisette]) ? true : false;
     239                } elseif (isset($noisette['id_conteneur'], $noisette['rang'])) {
     240                        $description_existe = isset($description_noisette_par_rang[$plugin][$noisette['id_conteneur']][$noisette['rang']])
     241                                ? true
     242                                : false;
    236243                } else {
    237                         if (isset($noisette['conteneur'], $noisette['rang'])) {
    238                                 $id_conteneur = ncore_conteneur_identifier($plugin, $noisette['conteneur'], $stockage);
    239                                 $description_existe = isset($description_noisette_par_rang[$plugin][$id_conteneur][$noisette['rang']])
    240                                         ? true
    241                                         : false;
    242                         }
     244                        $noisette_invalide = true;
    243245                }
    244246
    245                 if (!$description_existe) {
    246                         // Lecture de toute la configuration de la noisette: les données retournées sont brutes.
    247                         $description = ncore_noisette_decrire($plugin, $noisette, $stockage);
    248 
    249                         // Traitements des champs tableaux sérialisés si nécessaire
    250                         if ($description) {
    251                                 if (is_string($description['parametres'])) {
    252                                         $description['parametres'] = unserialize($description['parametres']);
    253                                 }
    254                                 if (is_string($description['conteneur'])) {
    255                                         $description['conteneur'] = unserialize($description['conteneur']);
    256                                 }
    257                         }
    258 
    259                         // Sauvegarde de la description de la noisette pour une consultation ultérieure dans le même hit
    260                         // en suivant le type d'identification.
    261                         if (is_array($noisette)) {
    262                                 $description_noisette_par_rang[$plugin][$id_conteneur][$noisette['rang']] = $description;
     247                if (!$noisette_invalide) {
     248                        if (!$description_existe) {
     249                                // Lecture de toute la configuration de la noisette: les données retournées sont brutes.
     250                                $description = ncore_noisette_decrire($plugin, $noisette, $stockage);
     251
     252                                // Traitements des champs tableaux sérialisés si nécessaire
     253                                if ($description) {
     254                                        if (isset($description['parametres']) and is_string($description['parametres'])) {
     255                                                $description['parametres'] = unserialize($description['parametres']);
     256                                        }
     257                                        if (isset($description['conteneur']) and is_string($description['conteneur'])) {
     258                                                $description['conteneur'] = unserialize($description['conteneur']);
     259                                        }
     260                                }
     261
     262                                // Sauvegarde de la description de la noisette pour une consultation ultérieure dans le même hit
     263                                // en suivant le type d'identification.
     264                                if (!is_array($noisette)) {
     265                                        $description_noisette_par_id[$plugin][$noisette] = $description;
     266                                } else {
     267                                        $description_noisette_par_rang[$plugin][$noisette['id_conteneur']][$noisette['rang']] = $description;
     268                                }
     269                        }
     270
     271                        if ($information) {
     272                                if ((!is_array($noisette) and isset($description_noisette_par_id[$plugin][$noisette][$information]))
     273                                        or (is_array($noisette)
     274                                                and isset($description_noisette_par_rang[$plugin][$noisette['id_conteneur']][$noisette['rang']][$information]))) {
     275                                        $retour = is_array($noisette)
     276                                                ? $description_noisette_par_rang[$plugin][$noisette['id_conteneur']][$noisette['rang']][$information]
     277                                                : $description_noisette_par_id[$plugin][$noisette][$information];
     278                                } else {
     279                                        $retour = '';
     280                                }
    263281                        } else {
    264                                 $description_noisette_par_id[$plugin][$noisette] = $description;
    265                         }
    266                 }
    267 
    268                 if ($information) {
    269                         if ((!is_array($noisette) and isset($description_noisette_par_id[$plugin][$noisette][$information]))
    270                                 or (is_array($noisette)
    271                                         and isset($description_noisette_par_rang[$plugin][$id_conteneur][$noisette['rang']][$information]))) {
    272282                                $retour = is_array($noisette)
    273                                         ? $description_noisette_par_rang[$plugin][$id_conteneur][$noisette['rang']][$information]
    274                                         : $description_noisette_par_id[$plugin][$noisette][$information];
    275                         } else {
    276                                 $retour = '';
    277                         }
    278                 } else {
    279                         $retour = is_array($noisette)
    280                                 ? $description_noisette_par_rang[$plugin][$id_conteneur][$noisette['rang']]
    281                                 : $description_noisette_par_id[$plugin][$noisette];
     283                                        ? $description_noisette_par_rang[$plugin][$noisette['id_conteneur']][$noisette['rang']]
     284                                        : $description_noisette_par_id[$plugin][$noisette];
     285                        }
    282286                }
    283287        }
     
    300304 * @param mixed  $noisette
    301305 *        Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaine unique, soit la forme
    302  *        d'un couple (conteneur, rang).
     306 *        d'un couple (id conteneur, rang).
    303307 * @param int    $rang_destination
    304308 *        Entier représentant le rang où repositionner la noisette dans le squelette contextualisé.
     
    334338                        $noisettes = ncore_noisette_lister(
    335339                                $plugin,
    336                                 unserialize($description['conteneur']),
     340                                $description['id_conteneur'],
    337341                                '',
    338342                                'rang',
  • _plugins_/n-core/trunk/ncore/ncore.php

    r107316 r107320  
    66 * ou à un autre service de stockage, soit déroule sa propre implémentation.
    77 * Ainsi, les plugins externes peuvent, si elle leur convient, utiliser l'implémentation proposée par N-Core
    8  * sans coder la moindre fonction.
     8 * en codant un minimum de fonction, à savoir, `conteneur_identifier`.
    99 */
    1010if (!defined('_ECRIRE_INC_VERSION')) {
Note: See TracChangeset for help on using the changeset viewer.