Changeset 109777 in spip-zone


Ignore:
Timestamp:
Apr 3, 2018, 6:17:01 AM (20 months ago)
Author:
eric@…
Message:

Correction de phpdoc et de noisette en type de noisette.
Début de l'API de compilation.

Location:
_plugins_/n-core/trunk
Files:
1 added
5 edited

Legend:

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

    r106533 r109777  
    1919if (!defined('_NCORE_NOMCACHE_TYPE_NOISETTE_SIGNATURE')) {
    2020        /**
    21          * Cache des signatures des fichiers YAML de noisettes.
    22          * Contient le tableau sérialisé `[noisette] = signature`.
     21         * Cache des signatures des fichiers YAML de types de noisette.
     22         * Contient le tableau sérialisé `[type_noisette] = signature`.
    2323         */
    2424        define('_NCORE_NOMCACHE_TYPE_NOISETTE_SIGNATURE', 'type_noisette_signatures.php');
     
    2626if (!defined('_NCORE_NOMCACHE_TYPE_NOISETTE_DESCRIPTION')) {
    2727        /**
    28          * Cache des descriptions de noisettes issues des fichiers YAML.
    29          * Contient le tableau sérialisé `[noisette] = tableau de la description complète`.
     28         * Cache des descriptions des types de noisettes issues des fichiers YAML.
     29         * Contient le tableau sérialisé `[type_noisette] = tableau de la description complète`.
    3030         * Chaque description contient aussi l'identifiant de la noisette déjà utilisé en index et la signature.
    3131         */
     
    4646        define('_NCORE_NOMCACHE_NOISETTE_INCLUSION', 'noisette_inclusions.php');
    4747}
    48 if (!defined('_NCORE_NOMCACHE_NOISETTE_CONTEXTE')) {
     48if (!defined('_NCORE_NOMCACHE_TYPE_NOISETTE_CONTEXTE')) {
    4949        /**
    50          * Cache des contextes de noisettes issues des fichiers YAML.
    51          * Contient le tableau sérialisé `[noisette] = tableau des éléments du contexte`.
     50         * Cache des contextes des types de noisette issus des fichiers YAML.
     51         * Contient le tableau sérialisé `[type_noisette] = tableau des éléments du contexte`.
    5252         */
    53         define('_NCORE_NOMCACHE_NOISETTE_CONTEXTE', 'noisette_contextes.php');
     53        define('_NCORE_NOMCACHE_TYPE_NOISETTE_CONTEXTE', 'type_noisette_contextes.php');
    5454}
    5555
  • _plugins_/n-core/trunk/inc/ncore_compilation.php

    r105933 r109777  
    191191 * @filtre
    192192 *
    193  * @param string        $service
    194  *      Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
    195  *      un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    196  *      La fonction utilisera les fonctions de lecture du contexte de la noisette, spécifique au service,
    197  *      ou à défaut, celle fournie par N-Core.
    198  * @param string        $noisette
    199  *              Identifiant de la $noisette.
     193 * @param string $plugin
     194 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     195 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     196 * @param mixed  $noisette
     197 *        Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaîne unique, soit la forme
     198 *        d'un couple (id conteneur, rang).
     199 * @param string $stockage
     200 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     201 *        ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin
     202 *        fournissant le service de stockage souhaité.
    200203 *
    201204 * @return array
    202205 *              Le tableau éventuellement vide des éléments de contexte de la noisette.
    203206 */
    204 function ncore_noisette_contexte($service, $noisette) {
     207function noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage = '') {
    205208
    206209        // On indexe le tableau des indicateurs ajax par le service appelant en cas d'appel sur le même hit
    207210        // par deux services différents.
    208         static $contexte = array();
    209 
    210         if (!isset($contexte[$service][$noisette])) {
    211                 // On détermine le cache en fonction du service, puis son existence et son contenu.
     211        static $contextes_type_noisette = array();
     212
     213        // On initialise le contexte de la noisette a minima.
     214        // -- on transmet toujours l'identifiant de la noisette quel qu'il soit : id_noisette ou couple (id_conteneur, rang).
     215        $contexte = is_array($noisette) ? $noisette : array('id_noisette' => $noisette);
     216        // -- on appelle une fonction de service pour éventuellement compléter le contexte par d'autres variables en fonction
     217        //    du plugin.
     218        include_spip('ncore/ncore');
     219//      $contexte = array_merge($contexte, ncore_noisette_contexte_completer($plugin, $noisette, $stockage));
     220
     221        // Récupération du contexte défini pour le type de noisette. Ce contexte est juste une liste de variables non
     222        // valorisées. La valorisation sera faite avec l'environnement.
     223        // -- les contextes sont stockés dans un cache dédié.
     224        if (!isset($contextes_type_noisette[$plugin][$type_noisette])) {
     225                // On vérifie si on doit recalculer le cache le cache ou pas.
    212226                include_spip('inc/ncore_cache');
    213                 $contexte[$service] = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_CONTEXTE);
    214 
    215                 // On doit recalculer le cache.
    216                 if (!$contexte[$service]
    217                 or (_request('var_mode') == 'recalcul')
    218                 or (defined('_NO_CACHE') and (_NO_CACHE != 0))) {
    219                         // On charge l'API de N-Core.
    220                         // Ce sont ces fonctions qui aiguillent ou pas vers une fonction spécifique du service.
    221                         include_spip("ncore/ncore");
    222 
    223                         // On repertorie la configuration du contexte de toutes les noisettes disponibles et on
     227                if ((_request('var_mode') == 'recalcul')
     228                or (defined('_NO_CACHE') and (_NO_CACHE != 0))
     229                or (!$contextes_type_noisette[$plugin] = cache_lire($plugin, _NCORE_NOMCACHE_TYPE_NOISETTE_CONTEXTE))) {
     230                        // On répertorie la configuration du contexte de toutes les noisettes disponibles et on
    224231                        // le renvoie le résultat tel quel.
    225                         $contexte[$service] = ncore_noisette_lister($service, 'contexte');
    226                         $contexte[$service] = unserialize($contexte[$service]);
    227 
    228                         // On vérifie que la noisette demandée est bien dans la liste.
     232                        $contextes_type_noisette[$plugin] = ncore_type_noisette_lister($plugin, 'contexte', $stockage);
     233
     234                        // On vérifie que le type de noisette demandé est bien dans la liste.
    229235                        // Si non, on la rajoute en utilisant en positionnant le contexte à tableau vide.
    230                         if (!isset($contexte[$service][$noisette])) {
    231                                 $contexte[$service][$noisette] = array();
     236                        if (!isset($contextes_type_noisette[$plugin][$type_noisette])) {
     237                                $contextes_type_noisette[$plugin][$type_noisette] = serialize(array());
    232238                        }
    233239
    234240                        // In fine, on met à jour le cache
    235                         cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_CONTEXTE, $contexte[$service]);
    236                 }
    237         }
    238 
    239         return $contexte[$service][$noisette];
    240 }
     241                        cache_ecrire($plugin, _NCORE_NOMCACHE_TYPE_NOISETTE_CONTEXTE, $contextes_type_noisette[$plugin]);
     242                }
     243        }
     244        // -- on inverse les index et valeurs du tableau de contexte pour obtenir un tableau de type contexte.
     245        $contexte_type_noisette = array_flip(unserialize($contextes_type_noisette[$plugin][$type_noisette]));
     246
     247        // On construit le contexte final en fonction de celui du type de noisette.
     248        // On renvoie systématiquement le contexte minimal déjà initialisé et si le contexte du type de noisette contient:
     249        // - aucun => rien de plus.
     250        // - env ou vide => l'environnement complet également.
     251        // - une liste de variables => on renvoie également l'intersection de cette liste avec l'environnement.
     252        if (!isset($contexte_type_noisette['aucun'])) {
     253                if (isset($contexte_noisette['env'])) {
     254                        $contexte = array_merge($environnement, $contexte);
     255                } else {
     256                        $contexte = array_merge(array_intersect_key($environnement, $contexte_type_noisette), $contexte);
     257                }
     258        }
     259
     260        return $contexte;
     261}
  • _plugins_/n-core/trunk/inc/ncore_type_noisette.php

    r107471 r109777  
    296296                include_spip("ncore/ncore");
    297297
    298                 // On récupère la description complète de tous les types de noisettes détects par le plugin appelant
     298                // On récupère la description complète de tous les types de noisettes détectés par le plugin appelant
    299299                $types_noisette[$plugin] = ncore_type_noisette_lister($plugin, '', $stockage);
    300300        }
  • _plugins_/n-core/trunk/inc/ncore_utils.php

    r106533 r109777  
    1212/**
    1313 * Cherche une fonction donnée en se basant sur le service de stockage ou à défaut sur le plugin appelant.
    14  * Si ni le service de stockage ni le plugin ne fournissent la fonction demandée la chaine vide est renvoyée.
     14 * Si ni le service de stockage ni le plugin ne fournissent la fonction demandée la chaîne vide est renvoyée.
    1515 *
    1616 * @param string $plugin
  • _plugins_/n-core/trunk/ncore/ncore.php

    r107471 r109777  
    723723 * Retire, de l'espace de stockage, toutes les noisettes d'un conteneur.
    724724 *
    725  * @package SPIP\NCORE\SERVICE\NOISETTE
     725 * @package SPIP\NCORE\SERVICE\CONTENEUR
    726726 *
    727727 * @uses ncore_chercher_service()
Note: See TracChangeset for help on using the changeset viewer.