Changeset 115584 in spip-zone


Ignore:
Timestamp:
Jun 10, 2019, 6:28:16 AM (7 days ago)
Author:
eric@…
Message:

Mise au point finale de la collection plugins.

Location:
_plugins_/svp_api/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/svp_api/trunk/http/svp.php

    r115583 r115584  
    9595                                // Détermination de la fonction de service permettant de récupérer la collection spécifiée
    9696                                // filtrée sur les critères éventuellement fournis.
    97                                 // -- la fonction de service est contenue dans un fichier du répertoire svpapi/.
     97                                // -- la fonction de service est contenue dans un fichier du répertoire svpapi/ et est supposée
     98                                //    être toujours présente.
    9899                                $module = $configuration['module'];
    99100                                include_spip("svpapi/${module}");
    100101                                $collectionner = "${collection}_collectionner";
    101                                 if (!function_exists($collectionner)) {
    102                                         $erreur = array(
    103                                                 'status'  => 400,
    104                                                 'type'    => 'fonction_nok',
    105                                                 'element' => 'collection',
    106                                                 'valeur'  => $collectionner
    107                                         );
    108                                 }
     102
    109103                                // -- on construit le contenu de la collection.
    110104                                $contenu['donnees'] = $collectionner($contenu['requete']['filtres']);
     
    171165                        if (requete_verifier_ressource($ressource, $collection, $configuration, $erreur)) {
    172166                                // Détermination de la fonction de service permettant de récupérer la ressource spécifiée.
    173                                 // -- la fonction de service est contenue dans un fichier du répertoire svpapi/.
     167                                // -- la fonction de service est contenue dans un fichier du répertoire svpapi/ et est supposée
     168                                //    être toujours présente.
    174169                                $module = $configuration['module'];
    175170                                include_spip("svpapi/${module}");
    176171                                $ressourcer = "${collection}_ressourcer";
    177                                 if (!function_exists($ressourcer)) {
    178                                         $erreur = array(
    179                                                 'status'  => 400,
    180                                                 'type'    => 'fonction_nok',
    181                                                 'element' => 'ressource',
    182                                                 'valeur'  => $ressourcer
    183                                         );
    184                                 }
     172
    185173                                // -- on construit le contenu de la collection.
    186174                                $contenu['donnees'] = $ressourcer($ressource);
  • _plugins_/svp_api/trunk/svpapi/svpapi.php

    r115583 r115584  
    11<?php
    22/**
    3  * Ce fichier contient l'ensemble des fonctions de service spécifiques à une collection ou une ressource.
     3 * Ce fichier contient l'ensemble des fonctions de service spécifiques à une ou plusieurs collections.
    44 *
    55 * @package SPIP\SVPAPI\SERVICE
     
    7373
    7474/**
    75  * @param $prefixe
    76  *
    77  * @return array
     75 * Retourne la description complète d'un plugin et de ses paquets.
     76 *
     77 * @param string $prefixe
     78 *        La valeur du préfixe du plugin.
     79 *
     80 * @return array
     81 *         La description du plugin et de ses paquets, les champs étant tous normalisés (désérialisés).
    7882 */
    7983function plugins_ressourcer($prefixe) {
     
    8387
    8488        // On recherche d'abord le plugin par son préfixe dans la table spip_plugins.
    85         $from = array('spip_plugins', 'spip_depots_plugins');
    86         $group_by = array('spip_plugins.id_plugin');
    87 
    88         // -- Tous le champs sauf id_plugin et id_depot.
    89         $description_table = lister_tables_objets_sql('spip_plugins');
    90         $select = array_keys($description_table['field']);
    91         $select = array_diff($select, array('id_depot', 'id_plugin'));
    92 
    93         // -- Préfixe, jointure et conditions sur la table des dépots.
     89        // -- Acquisition du plugin (on est sur qu'il est en base).
    9490        $prefixe = strtoupper($prefixe);
    95         $where = array(
    96                 'spip_plugins.prefixe=' . sql_quote($prefixe),
    97                 'spip_depots_plugins.id_depot>0',
    98                 'spip_depots_plugins.id_plugin=spip_plugins.id_plugin'
    99         );
    100 
    101         // Acquisition du plugin et normalisation des champs.
    102         $plugin = sql_fetsel($select, $from, $where, $group_by);
     91        $plugin = plugins_lire_description($prefixe);
     92        // -- Normalisation des champs.
    10393        $normaliser = charger_fonction('normaliser_champs', 'inc');
    10494        $ressource['plugin'] = $normaliser('plugin', $plugin);
     
    118108        // -- Préfixe et conditions sur le dépôt pour exclure les paquets installés.
    119109        $where = array(
    120                 'prefixe=' . sql_quote($prefixe),
     110                'prefixe=' . sql_quote(strtoupper($prefixe)),
    121111                'id_depot>0'
    122112        );
    123113
    124114        // Acquisition des paquets et normalisation des champs.
     115        $ressource['paquets'] = array();
    125116        $paquets = sql_allfetsel($select, $from, $where);
    126         $ressource['paquets'] = array();
    127117        if ($paquets) {
    128118                // On refactore en un tableau associatif indexé par archives zip.
     
    147137 */
    148138function plugins_verifier_critere_categorie($valeur, &$extra) {
    149         $valide = true;
     139
     140        $est_valide = true;
    150141
    151142        include_spip('inc/svp_phraser');
    152143        if (!in_array($valeur, $GLOBALS['categories_plugin'])) {
    153                 $valide = false;
     144                $est_valide = false;
    154145                $extra = implode(', ', $GLOBALS['categories_plugin']);
    155146        }
    156147
    157         return $valide;
     148        return $est_valide;
    158149}
    159150
     
    171162 */
    172163function plugins_verifier_critere_compatible_spip($valeur, &$extra) {
    173         $valide = true;
     164
     165        $est_valide = true;
    174166
    175167        if (!preg_match('#^((?:\d+)(?:\.\d+){0,2})(?:,(\d+\.\d+)){0,}$#', $valeur)) {
    176                 $valide = false;
     168                $est_valide = false;
    177169                $extra = _T('svpapi:extra_critere_compatible_spip');
    178170        }
    179171
    180         return $valide;
     172        return $est_valide;
    181173}
    182174
     
    194186 */
    195187function plugins_verifier_ressource_prefixe($valeur) {
     188
    196189        $est_valide = true;
    197190
     191        // On teste en premier si le préfixe est syntaxiquement correct pour éviter un accès SQL dans ce cas.
    198192        if (!preg_match('#^(\w){2,}$#', strtolower($valeur))) {
    199193                $est_valide = false;
    200         }
    201         // c'est bien un plugin fourni par un dépôt et pas un plugin installé sur le serveur uniquement
     194        } else {
     195                // On vérifie ensuite si la ressource est bien un plugin fourni par un dépôt
     196                // et pas un plugin installé sur le serveur uniquement.
     197                if (!plugins_lire_description($valeur)) {
     198                        $est_valide = false;
     199                }
     200        }
    202201
    203202        return $est_valide;
     203}
     204
     205
     206/**
     207 * Retourne la description complète d'un objet plugin identifié par son préfixe.
     208 *
     209 * @param $prefixe
     210 *        La valeur du préfixe du plugin.
     211 *
     212 * @return array
     213 *         La description brute du plugin sans les id.
     214 */
     215function plugins_lire_description($prefixe) {
     216
     217        // Initialisation du tableau de sortie
     218        static $plugins = array();
     219
     220        // On passe le préfixe en majuscules pour être cohérent avec le stockage en base.
     221        $prefixe = strtoupper($prefixe);
     222
     223        if (!isset($plugins[$prefixe])) {
     224                // --Initialisation de la jointure entre plugins et dépôts.
     225                $from = array('spip_plugins', 'spip_depots_plugins');
     226                $group_by = array('spip_plugins.id_plugin');
     227
     228                // -- Tous le champs sauf id_plugin et id_depot.
     229                $description_table = lister_tables_objets_sql('spip_plugins');
     230                $select = array_keys($description_table['field']);
     231                $select = array_diff($select, array('id_depot', 'id_plugin'));
     232
     233                // -- Préfixe, jointure et conditions sur la table des dépots.
     234                $where = array(
     235                        'spip_plugins.prefixe=' . sql_quote($prefixe),
     236                        'spip_depots_plugins.id_depot>0',
     237                        'spip_depots_plugins.id_plugin=spip_plugins.id_plugin'
     238                );
     239
     240                // Acquisition du plugin.
     241                $plugins[$prefixe] = array();
     242                if ($plugin = sql_fetsel($select, $from, $where, $group_by)) {
     243                        $plugins[$prefixe] = $plugin;
     244                }
     245        }
     246
     247        return $plugins[$prefixe];
    204248}
    205249
Note: See TracChangeset for help on using the changeset viewer.