Changeset 113137 in spip-zone


Ignore:
Timestamp:
Dec 28, 2018, 1:30:20 PM (3 weeks ago)
Author:
eric@…
Message:

Quelques améliorations :

  • ajout du champ 'profondeur' dans la structure d'une noisette (de 0 à n). Ce champ est mis à jour sur ajout et déplacement avec un minimum d'impact pour les plugins utilisateur comme noiZetier qui n'ont qu'à mettre à jour la valeur fournie par N-Core sur déplacement (dans le service ncore_noisette_changer_conteneur).
  • la profondeur est fournie dans le contexte de toute noisette et de sa capsule éventuelle. Elle se nomme profondeur_noisette.
  • Ajout d'un service ncore_conteneur_est_noisette() par souci de cohérence. Ce service n'est pas suchargeable par un plugin utilisateur car seul N-Core gère les noisettes conteneur.

Un up de y pour la peine.

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

Legend:

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

    r113132 r113137  
    9595function conteneur_est_noisette($plugin, $conteneur, $stockage = '') {
    9696
    97         // Initialiser la sortie
    98         $est_noisette = false;
    99 
    10097        // Suivant le format du conteneur on calcule le tableau ou on le vérifie.
    10198        include_spip('ncore/ncore');
     
    106103        }
    107104
    108         // On détermine à partir du tableau si le conteneur est une noisette.
    109         if (isset($conteneur['type_noisette'], $conteneur['id_noisette'])
    110         and $conteneur['type_noisette']
    111         and intval($conteneur['id_noisette'])) {
    112                 $est_noisette = true;
    113         }
     105        // On appelle le service de N-Core qui est le seul service a ne pas être surchargeable par un plugin utilisateur.
     106        $est_noisette = ncore_conteneur_est_noisette($plugin, $conteneur, $stockage);
    114107
    115108        return $est_noisette;
  • _plugins_/n-core/trunk/inc/ncore_noisette.php

    r112847 r113137  
    8484                                'parametres'    => serialize($parametres),
    8585                                'encapsulation' => 'defaut',
    86                                 'css'           => ''
     86                                'css'           => '',
     87                                'profondeur'    => 0
    8788                        );
    8889                        // -- Pour les noisettes conteneur pas de capsule englobante.
    8990                        if ($description['est_conteneur'] == 'oui') {
    9091                                $description['encapsulation'] = 'non';
     92                        }
     93
     94                        // -- Pour une noisette incluse dans un conteneur noisette on calcule la profondeur.
     95                        if (ncore_conteneur_est_noisette($plugin, $conteneur, $stockage)) {
     96                                $description_conteneur = ncore_noisette_decrire($plugin, $conteneur['id_noisette'], $stockage);
     97                                $description['profondeur'] = $description_conteneur['profondeur'] + 1;
    9198                        }
    9299
     
    420427                // On détermine l'id du conteneur destination en fonction du mode d'identification fourni par l'argument.
    421428                if (is_array($conteneur_destination)) {
     429                        $conteneur_destination = ncore_conteneur_verifier($plugin, $conteneur_destination, $stockage);
    422430                        $id_conteneur_destination = ncore_conteneur_identifier(
    423431                                $plugin,
    424                                 ncore_conteneur_verifier($plugin, $conteneur_destination, $stockage),
     432                                $conteneur_destination,
    425433                                $stockage
    426434                        );
     
    443451                        $rang_conteneur_destination = $rangs ? max($rangs) + 1 : 1;
    444452
     453                        // Pour éviter que chaque plugin ait à gérer la profondeur, N-Core calcule la profondeur de la noisette à son
     454                        // nouvel emplacement avant de déplacer celle-ci et la fournit à la fonction de changement de conteneur.
     455                        if (!is_array($conteneur_destination)) {
     456                                $conteneur_destination = ncore_conteneur_construire($plugin, $id_conteneur_destination, $stockage);
     457                        }
     458                        if (ncore_conteneur_est_noisette($plugin, $conteneur_destination, $stockage)) {
     459                                $description_conteneur = ncore_noisette_decrire($plugin, $conteneur_destination['id_noisette'], $stockage);
     460                                $profondeur_destination = $description_conteneur['profondeur'] + 1;
     461                        } else {
     462                                $profondeur_destination = 0;
     463                        }
     464
    445465                        // On transfère la noisette vers le conteneur destination à la position calculée (max + 1).
    446466                        $description = ncore_noisette_changer_conteneur(
     
    449469                                $id_conteneur_destination,
    450470                                $rang_conteneur_destination,
     471                                $profondeur_destination,
    451472                                $stockage
    452473                        );
  • _plugins_/n-core/trunk/ncore/ncore.php

    r112847 r113137  
    419419
    420420/**
    421  * Transfère une noisette d'un conteneur vers un autre à un rang donné.
     421 * Transfère une noisette d'un conteneur vers un autre à un rang donné et met à jour la profondeur.
    422422 * Le rang destination n'est pas vérifié lors du rangement dans le conteneur destination. Il convient
    423423 * à l'appelant de vérifier que le rang est libre.
     
    427427 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    428428 * @param array  $description
    429  *        Description de la noisette. Soit la description ne contient pas l'id de la noisette et c'est un ajout,
    430  *        soit la description contient l'id et c'est une mise à jour.
     429 *        Description de la noisette à changer de conteneur.
    431430 * @param string $id_conteneur
     431 *        Identifiant unique sous forme de chaine du conteneur destination.
    432432 * @param int    $rang
     433 *        Rang où positionner la noisette dans le conteneur destination. Il faut toujours vérifier au préalable
     434 *        que ce rang est libre.
     435 * @param int    $profondeur
     436 *        Profondeur de la noisette à sa nouvelle position.
    433437 * @param string $stockage
    434438 *        Identifiant du service de stockage à utiliser si précisé.
     
    436440 * @return array
    437441 */
    438 function ncore_noisette_changer_conteneur($plugin, $description, $id_conteneur, $rang, $stockage = '') {
     442function ncore_noisette_changer_conteneur($plugin, $description, $id_conteneur, $rang, $profondeur, $stockage = '') {
    439443
    440444        // On cherche le service de stockage à utiliser selon la logique suivante :
     
    445449        if ($changer = ncore_chercher_service($plugin, 'noisette_changer_conteneur', $stockage)) {
    446450                // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
    447                 $description = $changer($plugin, $description, $id_conteneur, $rang);
     451                $description = $changer($plugin, $description, $id_conteneur, $rang, $profondeur);
    448452        } else {
    449453                // Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé.
     
    459463
    460464                // On rajoute la description à son emplacement destination en prenant soin de modifier les index id_conteneur,
    461                 // conteneur et rang_noisette qui doivent représenter le conteneur destination.
     465                // conteneur, rang_noisette et profondeur qui doivent représenter le conteneur destination.
    462466                $description['id_conteneur'] = $id_conteneur;
    463467                $description['conteneur'] = ncore_conteneur_construire($plugin, $id_conteneur, $stockage);
    464468                $description['rang_noisette'] = $rang;
     469                $description['profondeur'] = $profondeur;
    465470                $noisettes[$id_conteneur][$rang] = $description;
    466471
     
    935940 * Reconstruit le conteneur sous forme de tableau à partir de son identifiant unique (fonction inverse
    936941 * de `ncore_conteneur_identifier`).
    937  * N-Core ne fournit le conteneur pour les noisettes conteneur.
     942 * N-Core ne fournit le conteneur que pour les noisettes conteneur.
    938943 * Pour les autres conteneurs, c'est au plugin utilisateur de calculer le tableau.
    939944 *
     
    981986
    982987/**
     988 * Détermine si un conteneur est une noisette ou pas. Le conteneur a été vérifié au préalable.
     989 * Ce service est le seul a ne pas être surchargeable par un plugin utilisateur car les noisettes conteneur
     990 * sont gérées entièrement par N-Core.
     991 *
     992 * @package SPIP\NCORE\CONTENEUR\SERVICE
     993 *
     994 * @param string $plugin
     995 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     996 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     997 * @param array $conteneur
     998 *        Identifiant du conteneur sous forme de tableau canonique.
     999 * @param string $stockage
     1000 *        Identifiant du service de stockage à utiliser si précisé.
     1001 *
     1002 * @return bool
     1003 *        `true` si le conteneur est une noisette `false` sinon.
     1004 */
     1005function ncore_conteneur_est_noisette($plugin, $conteneur, $stockage = '') {
     1006
     1007        // Initialiser la sortie
     1008        $est_noisette = false;
     1009
     1010        // On détermine à partir du tableau si le conteneur est une noisette.
     1011        if (isset($conteneur['type_noisette'], $conteneur['id_noisette'])
     1012        and $conteneur['type_noisette']
     1013        and intval($conteneur['id_noisette'])) {
     1014                $est_noisette = true;
     1015        }
     1016
     1017        return $est_noisette;
     1018}
     1019
     1020/**
    9831021 * Retire, de l'espace de stockage, toutes les noisettes d'un conteneur et ce de façon récursive si
    9841022 * il existe une imbrication de conteneurs.
  • _plugins_/n-core/trunk/ncore_fonctions.php

    r113017 r113137  
    207207 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
    208208 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    209  * @param mixed  $noisette
    210  *        Tableau des identifiants de la noisette qui peut prendre la forme d'un tableau avec pour index
     209 * @param array  $noisette
     210 *        Identifiants de la noisette qui prend la forme d'un tableau avec pour index
    211211 *        id_noisette, id conteneur et rang_noisette, ce qui permet d'utiliser l'un ou l'autre des identifiants
    212212 *        de la noisette.
    213213 * @param string $type_noisette
    214214 *            Identifiant du type de noisette.
     215 * @param int    $profondeur
     216 *        Profondeur de la noisette. Est inclus systématiquement dans le contexte sous le nom de variable
     217 *        `profondeur_noisette`.
    215218 * @param array  $environnement
    216219 *            Tableau de l'environnement reçu par la noisette.
     
    221224 *              Le tableau éventuellement vide des éléments de contexte de la noisette.
    222225 */
    223 function noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage = '') {
     226function noisette_contextualiser($plugin, $noisette, $type_noisette, $profondeur, $environnement, $stockage = '') {
    224227
    225228        // Initialisation du tableau des contexte générique de chaque type de noisette.
     
    230233        //    fournis par la balise.
    231234        $contexte = $noisette ? $noisette : array();
     235        $contexte['profondeur_noisette'] = $profondeur;
    232236
    233237        // Récupération du contexte défini pour le type de noisette. Ce contexte est juste une liste de variables non
     
    299303 * @param string $parametres
    300304 *        Liste des paramètres de l'encapsulation. Pour une capsule, les index sont limités à `type_noisette`,
    301  *        `id_noisette` et `css`. Pour une noisette conteneur cette liste correspond au champ `parametres` de la
    302  *        noisette et à son type.
     305 *        `id_noisette`, `css` et `profondeur`. Pour une noisette conteneur cette liste correspond au champ `parametres`
     306 *        de la noisette, à son type et à sa profondeur.
    303307 * @param string $stockage
    304308 *        Identifiant du service de stockage à utiliser si précisé.
  • _plugins_/n-core/trunk/paquet.xml

    r113132 r113137  
    22        prefix="ncore"
    33        categorie="outil"
    4         version="0.5.14"
     4        version="0.6.0"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
  • _plugins_/n-core/trunk/public/noisette_compiler.php

    r112825 r113137  
    4545        // On extrait les autres informations de la noisette
    4646        $type_noisette = champ_sql('type_noisette', $p);
     47        $profondeur = champ_sql('profondeur', $p);
    4748        $est_conteneur = champ_sql('est_conteneur', $p);
    4849        $parametres = champ_sql('parametres', $p);
     
    7778                ),
    7879                'conteneur',
    79                 array_merge(unserialize($parametres), array('type_noisette' => $type_noisette)),
     80                array_merge(unserialize($parametres), array('type_noisette' => $type_noisette, 'profondeur_noisette' => $profondeur)),
    8081                $stockage
    8182        )";
     
    9192                recuperer_fond(
    9293                        \".type_noisette_localiser($plugin, $type_noisette).\",
    93                         \".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),true).\",
     94                        \".var_export(array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $profondeur, $environnement, $stockage)),true).\",
    9495                        \".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))), true).\"
    9596                ),
    9697                \".$encapsulation.\",
    97                 \".var_export(array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css)), true).\",
     98                \".var_export(array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css, 'profondeur_noisette' => $profondeur)), true).\",
    9899                \".$stockage.\"
    99100        );?>\"";
     
    103104                recuperer_fond(
    104105                        type_noisette_localiser($plugin, $type_noisette),
    105                         array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),
     106                        array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $profondeur, $environnement, $stockage)),
    106107                        array('ajax' => type_noisette_ajaxifier($plugin, $type_noisette, $stockage))
    107108                ),
    108109                $encapsulation,
    109                 array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css),
     110                array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css, 'profondeur' => $profondeur),
    110111                $stockage
    111112        )";
Note: See TracChangeset for help on using the changeset viewer.