Changeset 107340 in spip-zone


Ignore:
Timestamp:
Nov 4, 2017, 3:06:54 PM (2 years ago)
Author:
eric@…
Message:

Suppression, quand cela est possible, des appels à ncore_conteneur_identifier au profit de l'utilisation de l'id du conteneur stocké dans la description de la noisette.
Amélioration de la gestion des retours de fonction.
PHPdoc.

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

Legend:

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

    r107320 r107340  
    396396 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    397397 * @param array  $conteneur
    398  *        Tableau associatif descriptif du conteneur accueillant la noisette. Un conteneur peut-être un squelette seul
    399  *        ou associé à un contexte d'utilisation et dans ce cas il possède un index `squelette` ou un objet quelconque
    400  *        sans lien avec un squelette. Dans tous les cas, les index, à l'exception de `squelette`, sont spécifiques
    401  *        à l'utilisation qui en est faite par le plugin.
     398 *        Tableau descriptif du conteneur ou identifiant du conteneur.
    402399 * @param string $stockage
    403400 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     
    417414
    418415        if ($conteneur) {
    419                 $retour = ncore_noisette_destocker($plugin, $conteneur, $stockage);
     416                $retour = ncore_conteneur_destocker($plugin, $conteneur, $stockage);
    420417        }
    421418
  • _plugins_/n-core/trunk/ncore/ncore.php

    r107320 r107340  
    5353function ncore_type_noisette_stocker($plugin, $types_noisette, $recharger, $stockage = '') {
    5454
    55         $retour = true;
    56 
    5755        // On cherche le service de stockage à utiliser selon la logique suivante :
    5856        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    6967                //    de la noisette.
    7068                // -- Les signatures : on isole la liste des signatures et on indexe le tableau avec l'identifiant de la noisette.
     69
     70                // Initialisation de la sortie.
     71                $retour = true;
     72
    7173                include_spip('inc/ncore_cache');
    7274                if ($recharger) {
     
    133135 *
    134136 * @return array
    135  *        Description du type de noisette éventuellement compléter par le plugin utilisateur.
     137 *        Description du type de noisette éventuellement complétée par le plugin utilisateur.
    136138 */
    137139function ncore_type_noisette_completer($plugin, $description, $stockage = '') {
     
    178180function ncore_type_noisette_decrire($plugin, $type_noisette, $stockage = '') {
    179181
    180         $description = array();
    181 
    182182        // On cherche le service de stockage à utiliser selon la logique suivante :
    183183        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    192192                // -- Lecture de toute la description du type de noisette à partir du cache.
    193193                // -- Les données sont renvoyées brutes sans traitement sur les textes ni sur les tableaux sérialisés.
     194
     195                // Initialisation de la description à renvoyer.
     196                $description = array();
     197
    194198                include_spip('inc/ncore_cache');
    195199                $descriptions = cache_lire($plugin, _NCORE_NOMCACHE_TYPE_NOISETTE_DESCRIPTION);
     
    227231function ncore_type_noisette_lister($plugin, $information = '', $stockage = '') {
    228232
    229         // Initialisation du tableau de sortie
    230         $types_noisettes = array();
    231 
    232233        // On cherche le service de stockage à utiliser selon la logique suivante :
    233234        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    240241        } else {
    241242                // Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé.
     243                // -- Initialisation du tableau de sortie
     244                $types_noisettes = array();
     245
    242246                include_spip('inc/ncore_cache');
    243247                if ($information == 'signature') {
     
    269273 *
    270274 * @uses ncore_chercher_service()
    271  * @uses ncore_conteneur_identifier()
    272275 *
    273276 * @param string $plugin
     
    283286 * @return int|string
    284287 *        Id de la noisette de type entier ou chaine.
    285  *        Le stockage N-Core renvoie lui une chaine construite à partir du plugin et de la fonction uniqid().
     288 *        Le stockage N-Core renvoie lui une chaine construite à partir du plugin et de la fonction uniqid()
     289 *        ou chaine vide en cas d'erreur.
    286290 */
    287291function ncore_noisette_stocker($plugin, $description, $stockage = '') {
     
    302306                //    description et qui vaudra uniqid() avec comme préfixe le plugin appelant.
    303307
     308                // Initialisation de l'id de la noisette qui sera fourni en sortie. La valeur chaine vide indique une erreur.
     309                $id_noisette = '';
     310
    304311                // On lit la meta de stockage des noisettes pour le plugin appelant.
    305312                include_spip('inc/config');
    306313                $noisettes = lire_config("${plugin}_noisettes", array());
    307314
    308                 // Détermination de l'identifiant du conteneur. Le conteneur est un tableau sérialisé qui fait partie
    309                 // de la description.
    310                 $id_conteneur = ncore_conteneur_identifier(
    311                         $plugin,
    312                         unserialize($description['conteneur']),
    313                         $stockage
    314                 );
    315 
    316                 if (empty($description['id_noisette'])) {
    317                         // Ajout de la noisette :
    318                         // -- la description est complète à l'exception de l'id unique qui est créé à la volée
    319                         // -- et on range la noisette avec les noisettes affectées au même conteneur en fonction de son rang.
    320                         $description['id_noisette'] = uniqid("${plugin}_");
    321                         $noisettes[$id_conteneur][$description['rang']] = $description;
    322                 } else {
    323                         // Modification de la noisette :
    324                         // -- les identifiants de la noisette sont toujours fournies, à savoir, l'id, le conteneur et le rang.
    325                         // -- on utilise le conteneur et le rang pour se positionner sur la noisette concernée.
    326                         // -- Les modifications ne concernent que les paramètres d'affichage, cette fonction n'est jamais utilisée
    327                         //    pour le changement de rang.
    328                         if (isset($noisettes[$id_conteneur][$description['rang']])) {
    329                                 $noisettes[$id_conteneur][$description['rang']] = array_merge(
    330                                         $noisettes[$id_conteneur][$description['rang']],
    331                                         $description
    332                                 );
    333                         }
    334                 }
    335 
    336                 // On met à jour la meta
    337                 ecrire_config("${plugin}_noisettes", $noisettes);
    338 
    339                 // On renvoie l'id de la noisette ajoutée ou modifiée.
    340                 $id_noisette = $description['id_noisette'];
     315                // Détermination de l'identifiant du conteneur qui est inclus dans la description et jamais vide.
     316                if (!empty($description['id_conteneur'])) {
     317                        $id_conteneur = $description['id_conteneur'];
     318
     319                        if (empty($description['id_noisette'])) {
     320                                // Ajout de la noisette :
     321                                // -- la description est complète à l'exception de l'id unique qui est créé à la volée
     322                                // -- et on range la noisette avec les noisettes affectées au même conteneur en fonction de son rang.
     323                                $description['id_noisette'] = uniqid("${plugin}_");
     324                                $noisettes[$id_conteneur][$description['rang']] = $description;
     325                        } else {
     326                                // Modification de la noisette :
     327                                // -- les identifiants de la noisette sont toujours fournies, à savoir, l'id, le conteneur et le rang.
     328                                // -- on utilise le conteneur et le rang pour se positionner sur la noisette concernée.
     329                                // -- Les modifications ne concernent que les paramètres d'affichage, cette fonction n'est jamais utilisée
     330                                //    pour le changement de rang.
     331                                if (isset($noisettes[$id_conteneur][$description['rang']])) {
     332                                        $noisettes[$id_conteneur][$description['rang']] = array_merge(
     333                                                $noisettes[$id_conteneur][$description['rang']],
     334                                                $description
     335                                        );
     336                                }
     337                        }
     338
     339                        // On met à jour la meta
     340                        ecrire_config("${plugin}_noisettes", $noisettes);
     341
     342                        // On renvoie l'id de la noisette ajoutée ou modifiée.
     343                        $id_noisette = $description['id_noisette'];
     344                }
    341345        }
    342346
     
    391395 *
    392396 * @uses ncore_chercher_service()
    393  * @uses ncore_conteneur_identifier()
    394397 *
    395398 * @param string $plugin
     
    409412function ncore_noisette_ranger($plugin, $description, $rang_destination, $stockage = '') {
    410413
    411         // Initialisation de la sortie.
    412         $retour = false;
    413 
    414414        // On cherche le service de stockage à utiliser selon la logique suivante :
    415415        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    424424                // -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
    425425                //    [conteneur][rang] = description
     426
     427                // Initialisation de la sortie.
     428                $retour = false;
    426429
    427430                // On lit la meta de stockage des noisettes pour le plugin appelant.
     
    429432                $noisettes = lire_config("${plugin}_noisettes", array());
    430433
    431                 // Détermination de l'identifiant du conteneur. Le conteneur est un tableau sérialisé qui fait partie
    432                 // de la description.
    433                 $id_conteneur = ncore_conteneur_identifier(
    434                         $plugin,
    435                         unserialize($description['conteneur']),
    436                         $stockage
    437                 );
    438 
    439                 // On ajoute la noisette au rang choisi même si on doit écraser un index existant:
    440                 // -- Il est donc nécessaire de gérer la collision en amont de cette fonction.
    441                 // -- Par contre, l'ancien rang de la noisette est supprimé sauf si celui-ci est à zéro.
    442                 $rang_source = $description['rang'];
    443                 $description['rang'] = $rang_destination;
    444                 $noisettes[$id_conteneur][$rang_destination] = $description;
    445                 if ($rang_source != 0) {
    446                         unset($noisettes[$id_conteneur][$rang_source]);
    447                 }
    448 
    449                 // On met à jour la meta
    450                 ecrire_config("${plugin}_noisettes", $noisettes);
    451                 $retour = true;
     434                if (!empty($description['id_conteneur'])) {
     435                        $id_conteneur = $description['id_conteneur'];
     436
     437                        // On ajoute la noisette au rang choisi même si on doit écraser un index existant:
     438                        // -- Il est donc nécessaire de gérer la collision en amont de cette fonction.
     439                        // -- Par contre, l'ancien rang de la noisette est supprimé sauf si celui-ci est à zéro.
     440                        $rang_source = $description['rang'];
     441                        $description['rang'] = $rang_destination;
     442                        $noisettes[$id_conteneur][$rang_destination] = $description;
     443                        if ($rang_source != 0) {
     444                                unset($noisettes[$id_conteneur][$rang_source]);
     445                        }
     446
     447                        // On met à jour la meta
     448                        ecrire_config("${plugin}_noisettes", $noisettes);
     449                        $retour = true;
     450                }
    452451        }
    453452
     
    456455
    457456/**
    458  * Retire, de l'espace de stockage, une noisette donnée de son conteneur ou l'ensemble des noisettes d'un conteneur.
     457 * Retire, de l'espace de stockage, une noisette donnée de son conteneur.
    459458 *
    460459 * @package SPIP\NCORE\SERVICE\NOISETTE
    461460 *
    462461 * @uses ncore_chercher_service()
    463  * @uses ncore_conteneur_identifier()
    464462 *
    465463 * @param string       $plugin
     
    467465 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    468466 * @param array|string $description
    469  *        Description complète de la noisette ou identifiant du conteneur.
     467 *        Description complète de la noisette.
    470468 * @param string       $stockage
    471469 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin ni celui de N-Core
     
    476474 */
    477475function ncore_noisette_destocker($plugin, $description, $stockage = '') {
    478 
    479         // Initialisation de la sortie.
    480         $retour = false;
    481476
    482477        // On cherche le service de stockage à utiliser selon la logique suivante :
     
    494489                // -- $description est soit le tableau descriptif de la noisette, soit le conteneur, et dans ce cas, il faut
    495490                //    supprimer toutes les noisettes du conteneur.
     491
     492                // Initialisation de la sortie.
     493                $retour = false;
     494
    496495                include_spip('inc/config');
    497496                $meta_noisettes = lire_config("${plugin}_noisettes", array());
    498497
    499                 // Détermination de l'identifiant du conteneur. Le conteneur est un tableau sérialisé qui fait partie
    500                 // de la description.
    501                 $id_conteneur = ncore_conteneur_identifier(
    502                         $plugin,
    503                         unserialize($description['conteneur']),
    504                         $stockage
    505                 );
    506 
    507                 if (!empty($description['id_noisette']) and isset($meta_noisettes[$id_conteneur][$description['rang']])) {
     498                if (isset($meta_noisettes[$description['id_conteneur']][$description['rang']])) {
    508499                        // On supprime une noisette donnée.
    509                         unset($meta_noisettes[$id_conteneur][$description['rang']]);
     500                        unset($meta_noisettes[$description['id_conteneur']][$description['rang']]);
    510501                        // Si c'est la dernière noisette du conteneur il faut aussi supprimer l'index correspondant au conteneur.
    511                         if (!$meta_noisettes[$id_conteneur]) {
    512                                 unset($meta_noisettes[$id_conteneur]);
     502                        if (!$meta_noisettes[$description['id_conteneur']]) {
     503                                unset($meta_noisettes[$description['id_conteneur']]);
    513504                        }
    514505                        ecrire_config("${plugin}_noisettes", $meta_noisettes);
    515506                        $retour = true;
    516                 } elseif (isset($meta_noisettes[$id_conteneur])) {
    517                         // On supprime toutes les noisettes du conteneur.
    518                         unset($meta_noisettes[$id_conteneur]);
    519                         ecrire_config("${plugin}_noisettes", $meta_noisettes);
    520                         $retour = true;
    521507                }
    522508        }
     
    538524 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
    539525 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    540  * @param array  $conteneur
    541  *        Tableau associatif descriptif du conteneur accueillant la noisette. Un conteneur peut-être un squelette seul
    542  *        ou associé à un contexte d'utilisation et dans ce cas il possède un index `squelette` ou un objet quelconque
    543  *        sans lien avec un squelette. Dans tous les cas, les index, à l'exception de `squelette`, sont spécifiques
    544  *        à l'utilisation qui en est faite par le plugin.
     526 * @param array|string $conteneur
     527 *        Tableau descriptif du conteneur ou identifiant du conteneur ou vide si on souhaite adresser tous les
     528 *        conteneurs.
    545529 * @param string $information
    546530 *        Identifiant d'un champ de la description d'une type de noisette.
     
    559543function ncore_noisette_lister($plugin, $conteneur = array(), $information = '', $cle = 'rang', $stockage = '') {
    560544
    561         // Initialisation du tableau de sortie.
    562         $noisettes = array();
    563 
    564545        // On cherche le service de stockage à utiliser selon la logique suivante :
    565546        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    574555                // -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
    575556                //    [conteneur][rang] = description
     557
     558                // Initialisation du tableau de sortie.
     559                $noisettes = array();
     560
    576561                include_spip('inc/config');
    577562                $meta_noisettes = lire_config("${plugin}_noisettes", array());
    578563
    579564                if ($conteneur) {
    580                         // Détermination de l'identifiant du conteneur.
    581                         $id_conteneur = ncore_conteneur_identifier($plugin, $conteneur, $stockage);
     565                        // On détermine l'id du conteneur en fonction du mode d'identification du conteneur lors de l'appel.
     566                        if (is_array($conteneur)) {
     567                                $id_conteneur = ncore_conteneur_identifier($plugin, $conteneur, $stockage);
     568                        } else {
     569                                $id_conteneur = $conteneur;
     570                        }
    582571                        if (!empty($meta_noisettes[$id_conteneur])) {
    583572                                $noisettes = $meta_noisettes[$id_conteneur];
     
    611600 *
    612601 * @uses ncore_chercher_service()
    613  * @uses ncore_conteneur_identifier()
    614602 *
    615603 * @param string $plugin
     
    629617function ncore_noisette_decrire($plugin, $noisette, $stockage = '') {
    630618
    631         $description = array();
    632 
    633619        // On cherche le service de stockage à utiliser selon la logique suivante :
    634620        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     
    643629                // -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
    644630                //    [conteneur][rang] = description
     631
     632                // Initialisation de la description à retourner.
     633                $description = array();
     634
    645635                include_spip('inc/config');
    646636                $meta_noisettes = lire_config("${plugin}_noisettes", array());
     
    668658                                if (isset($noisette['squelette'], $noisette['contexte'], $noisette['rang'])) {
    669659                                        // Détermination de l'identifiant du conteneur.
    670                                         $id_conteneur = ncore_conteneur_identifier(
    671                                                 $plugin,
    672                                                 $noisette['conteneur'],
    673                                                 $stockage
    674                                         );
     660                                        $id_conteneur = $noisette['id_conteneur'];
    675661                                        if (!empty($meta_noisettes[$id_conteneur][$noisette['rang']])) {
    676662                                        // L'identifiant est un tableau associatif fournissant le conteneur et le rang.
     
    733719        return $id_conteneur;
    734720}
     721
     722/**
     723 * Retire, de l'espace de stockage, toutes les noisettes d'un conteneur.
     724 *
     725 * @package SPIP\NCORE\SERVICE\NOISETTE
     726 *
     727 * @uses ncore_chercher_service()
     728 * @uses ncore_conteneur_identifier()
     729 *
     730 * @param string       $plugin
     731 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     732 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     733 * @param array|string $conteneur
     734 *        Tableau descriptif du conteneur ou identifiant du conteneur.
     735 * @param string       $stockage
     736 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin ni celui de N-Core
     737 *        ne seront utilisés. En général, cet identifiant est le préfixe du plugin fournissant le stockage.
     738 *
     739 * @return bool
     740 *        `true` si le traitement s'est bien déroulé, `false` sinon.
     741 */
     742function ncore_conteneur_destocker($plugin, $conteneur, $stockage = '') {
     743
     744        // Initialisation de la sortie.
     745        $retour = false;
     746
     747        // On cherche le service de stockage à utiliser selon la logique suivante :
     748        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     749        // - sinon, on utilise la fonction du plugin appelant si elle existe;
     750        // - et sinon, on utilise la fonction de N-Core.
     751        include_spip('inc/ncore_utils');
     752        if ($destocker = ncore_chercher_service($plugin, 'noisette_destocker', $stockage)) {
     753                // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
     754                $retour = $destocker($plugin, $conteneur);
     755        } else {
     756                // Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé.
     757                // -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
     758                //    [conteneur][rang] = description
     759                // -- $description est soit le tableau descriptif de la noisette, soit le conteneur, et dans ce cas, il faut
     760                //    supprimer toutes les noisettes du conteneur.
     761                include_spip('inc/config');
     762                $meta_noisettes = lire_config("${plugin}_noisettes", array());
     763
     764                // On détermine l'id du conteneur en fonction du mode d'identification du conteneur lors de l'appel.
     765                if (is_array($conteneur)) {
     766                        $id_conteneur = ncore_conteneur_identifier($plugin, $conteneur, $stockage);
     767                } else {
     768                        $id_conteneur = $conteneur;
     769                }
     770
     771                if (isset($meta_noisettes[$id_conteneur])) {
     772                        // On supprime toutes les noisettes du conteneur.
     773                        unset($meta_noisettes[$id_conteneur]);
     774                        ecrire_config("${plugin}_noisettes", $meta_noisettes);
     775                        $retour = true;
     776                }
     777        }
     778
     779        return $retour;
     780}
Note: See TracChangeset for help on using the changeset viewer.