Changeset 115961 in spip-zone


Ignore:
Timestamp:
Jul 14, 2019, 7:27:04 PM (22 months ago)
Author:
eric@…
Message:

Mise au point de la fonction plugin_lire().
Mise au point de l'affichage de la page d'un plugin en limitant les boucle à un enregistrement car si un plugin appartient à deux dépots on obtenait 2 fois les squelettes (vieux bug).
La page plugin est prête à accueillir les formulaires d'affectation des types de plugin.

Location:
_core_/plugins/svp
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/svp/inc/svp_plugin.php

    r115867 r115961  
    99}
    1010
    11 
    1211/**
    1312 * Retourne la description complète ou une liste de champs précisés dans l'appel
    1413 * d'un objet plugin identifié par son préfixe.
    1514 *
    16  * @param string        $prefixe
    17  *        La valeur du préfixe du plugin.
    18  * @param array|string  $informations
    19  *        Identifiant d'un champ ou de plusieurs champs de la description d'un plugin.
    20  *        Si l'argument est vide, la fonction renvoie la description complète.
     15 * @param int|string   $plugin       La valeur du préfixe  ou de l'id du plugin.
     16 * @param array|string $informations Identifiant d'un champ ou de plusieurs champs de la description d'un plugin.
     17 *                                   Si l'argument est vide, la fonction renvoie la description complète.
    2118 *
    22  * @return mixed
    23  *         La description brute complète ou partielle du plugin :
    24  *         - sous la forme d'une valeur simple si l'information demandée est unique (chaine)
    25  *         - sous la forme d'un tabelau associatif indexé par le nom du champ sinon.
     19 * @return mixed La description brute complète ou partielle du plugin :
     20 *               - sous la forme d'une valeur simple si l'information demandée est unique (chaine)
     21 *               - sous la forme d'un tabelau associatif indexé par le nom du champ sinon.
    2622 */
    27 function plugin_lire($prefixe, $informations = array()) {
     23function plugin_lire($plugin, $informations = array()) {
    2824
    29         // Initialisation du tableau de sortie
    30         static $plugins = array();
     25        // Initialisation des tableaux statiques
     26        static $descriptions_plugin = array();
     27        static $prefixes = array();
    3128
    32         // On passe le préfixe en majuscules pour être cohérent avec le stockage en base.
    33         $prefixe = strtoupper($prefixe);
     29        // On détermine si on a passé l'id ou le préfixe du plugin :
     30        // -- si c'est le préfixe on le passe en majuscules pour être cohérent avec le stockage en base.
     31        // -- on essaye de déterminer l'index de la description qui est toujours le préfixe.
     32        $id_plugin = intval($plugin);
     33        if ($id_plugin) {
     34                $index = isset($prefixes[$id_plugin]) ? $prefixes[$id_plugin] : '';
     35        } else {
     36                $prefixe = strtoupper($plugin);
     37                $index = $prefixe;
     38        }
    3439
    35         if (!isset($plugins[$prefixe])) {
     40        if (!$index or !isset($descriptions_plugin[$index])) {
    3641                // Initialisation de la jointure entre plugins et dépôts.
    3742                $from = array('spip_plugins', 'spip_depots_plugins');
     
    4045                // Préfixe, jointure et conditions sur la table des dépots pour éviter les plugins installés.
    4146                $where = array(
    42                         'spip_plugins.prefixe=' . sql_quote($prefixe),
    4347                        'spip_depots_plugins.id_depot>0',
    4448                        'spip_depots_plugins.id_plugin=spip_plugins.id_plugin'
    4549                );
     50                // Condition sur le préfixe ou l'id.
     51                $where[] = $id_plugin
     52                        ? 'spip_plugins.id_plugin=' . $id_plugin
     53                        : 'spip_plugins.prefixe=' . sql_quote($prefixe);
    4654
    47                 // -- Acquisition de tous les champs du plugin.
    48                 $plugins[$prefixe] = false;
    49                 if ($plugin = sql_fetsel('*', $from, $where, $group_by)) {
    50                         $plugins[$prefixe] = $plugin;
     55                // Acquisition de tous les champs du plugin et sauvegarde de celle-ci à l'index du préfixe.
     56                if ($description = sql_fetsel('*', $from, $where, $group_by)) {
     57                        if (!$index) {
     58                                // Première sauvegarde du plugin connu par son id, il ne faut stocker l'index pour un futur appel.
     59                                $index = $description['prefixe'];
     60                                $prefixes[$id_plugin] = $index;
     61                        }
     62                        $descriptions_plugin[$index] = $description;
     63                } elseif ($index) {
     64                        $descriptions_plugin[$index] = array();
    5165                }
    5266        }
    5367
     68        // Si il y a eu une erreur lors du fetsel et que l'index est indéterminé (première lecture par id)
     69        // on renvoie une description vide.
     70        $description = $index ? $descriptions_plugin[$index] : array();
     71
    5472        // On ne retourne que les champs demandés
    55         $plugin = $plugins[$prefixe];
    56         if ($plugin and $informations) {
     73        if ($description and $informations) {
    5774                // Extraction des seules informations demandées.
    5875                // -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau.
     
    6481                        } else {
    6582                                // Tableau des informations valides
    66                                 $plugin = array_intersect_key($plugin, array_flip($informations));
     83                                $description = array_intersect_key($description, array_flip($informations));
    6784                        }
    6885                }
     
    7087                if (is_string($informations)) {
    7188                        // Valeur unique demandée.
    72                         $plugin = isset($plugin[$informations]) ? $plugin[$informations] : '';
     89                        $description = isset($description[$informations]) ? $description[$informations] : '';
    7390                }
    74         }
     91        }
    7592
    76         return $plugin;
     93        return $description;
    7794}
  • _core_/plugins/svp/paquet.xml

    r115915 r115961  
    22        prefix="svp"
    33        categorie="maintenance"
    4         version="2.0.5"
     4        version="2.0.6"
    55        etat="stable"
    66        compatibilite="[3.3.0-dev;3.3.*]"
  • _core_/plugins/svp/prive/objets/contenu/plugin.html

    r115915 r115961  
    1 <BOUCLE_contenu_plugin(PLUGINS) {id_plugin=#ENV{id}}>
     1<BOUCLE_contenu_plugin(PLUGINS) {id_plugin=#ENV{id}}{0, 1}>
    22<div class="champ contenu_titre[ (#NOM*|strlen|?{'',vide})]">
    33        <div class="label"><:info_nom:></div>
  • _core_/plugins/svp/prive/objets/infos/plugin.html

    r115915 r115961  
    1 <BOUCLE_infos_plugin(PLUGINS) {id_plugin=#ENV{id}}>
     1<BOUCLE_infos_plugin(PLUGINS) {id_plugin=#ENV{id}}{0, 1}>
    22<div class="infos">
    33        [(#REM) <!-- La reference du depot --> ]
  • _core_/plugins/svp/prive/objets/liste/plugins.html

    r115696 r115961  
    3333                </thead>
    3434                <tbody>
    35 <BOUCLE_liste_plugins(PLUGINS) {id_plugin?}{where?}{id_depot?}{recherche?}{tri #ENV{par, nom}, #GET{defaut_tri}}{pagination #ENV{pas, 25}}>
     35<BOUCLE_liste_plugins(PLUGINS) {id_plugin?}{where?}{id_depot?}{recherche?}{tri #ENV{par, nom}, #GET{defaut_tri}}{pagination #ENV{pas, 25}}{fusion prefixe}>
    3636                        <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    3737                                <td class="titre principale">
  • _core_/plugins/svp/prive/squelettes/hierarchie/plugin.html

    r60195 r115961  
    88                [(#VAL{depot}|objet_info{texte_objets}|_T)]
    99        </a>
    10 <BOUCLE_plugin(PLUGINS) {id_plugin}>
     10<BOUCLE_plugin(PLUGINS depots) {id_plugin}{0, 1}>
    1111        &gt;
    1212        <strong class="on">#NOM</strong>
  • _core_/plugins/svp/prive/squelettes/navigation/plugin.html

    r82427 r115961  
    1 <BOUCLE_plugin_navigation(PLUGINS) {id_plugin}{si #ENV{exec}|=={plugin}}>
     1<BOUCLE_plugin_navigation(PLUGINS) {id_plugin}{si #ENV{exec}|=={plugin}}{0, 1}>
    22[(#REM) <!-- La boite d'infos du plugin --> ]
    33#BOITE_OUVRIR{'', info}
Note: See TracChangeset for help on using the changeset viewer.