Changeset 96818 in spip-zone


Ignore:
Timestamp:
Apr 26, 2016, 7:53:36 PM (4 years ago)
Author:
eric@…
Message:

Ajout d'une collection depots qui renvoie tous les objets dépôts hébergés par le serveur SVP.
Pour tous les objets renvoyés on désérialise les champs sérialisés et on présente les champs multi comme des tableaux.
Pour la peine on passe en 0.2.0

Location:
_plugins_/svp_api/trunk
Files:
5 edited

Legend:

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

    r96785 r96818  
    8484                if (requete_verifier_collection($contenu['requete']['collection'], $erreur)) {
    8585                        $items = array();
    86                         // Récupération de la collection en fonction des critères appliqués
    87                         $from = array('spip_plugins', 'spip_depots_plugins AS dp');
    88                         $select = array('*');
    89                         $where = array('dp.id_depot>0', 'dp.id_plugin=spip_plugins.id_plugin');
    90                         $group_by = array('spip_plugins.id_plugin');
    91                         // On vérifie les critères de filtre additionnels
     86                        // On vérifie les critères de filtre additionnels si la requête en contient
     87                        $where = array();
    9288                        if (requete_verifier_criteres($contenu['requete']['criteres'], $erreur)) {
    9389                                // Si il y a des critères additionnels on complète le where en conséquence
     
    9894                                                        $where[] = $f_critere($_valeur, 'spip_plugins', '>');
    9995                                                } else {
    100                                                         $where[] = "spip_plugins.${_critere}=" . sql_quote(${_valeur});
     96                                                        $where[] = "spip_plugins.${_critere}=" . sql_quote($_valeur);
    10197                                                }
    10298                                        }
    10399                                }
    104                                 $plugins = sql_allfetsel($select, $from, $where, $group_by);
    105                                 if ($plugins) {
    106                                         // On refactore le tableau de sortie du allfetsel en un tableau associatif indexé par les préfixes.
    107                                         foreach ($plugins as $_plugin) {
    108                                                 unset($_plugin['id_plugin']);
    109                                                 unset($_plugin['id_depot']);
    110                                                 $items[$_plugin['prefixe']] = $_plugin;
    111                                         }
    112                                 }
     100
     101                                // Récupération de la collection spécifiée en fonction des critères appliqués
     102                                $collectionner = 'reponse_collectionner_' . $contenu['requete']['collection'];
     103                                $items = $collectionner($where);
     104
    113105                                $contenu['items'] = $items;
    114                                 $contenu['nb_plugins'] = count($items);
    115106                        }
    116107                }
     
    179170                                        unset($plugin['id_plugin']);
    180171                                        unset($plugin['id_depot']);
    181                                         $items['plugin'] = $plugin;
     172                                        $items['plugin'] = normaliser_champs('plugin', $plugin);
    182173
    183174                                        // On recherche maintenant les paquets du plugin
     
    200191                                                                unset($_paquet[$_champ]);
    201192                                                        }
    202                                                         $items['paquets'][$_paquet['nom_archive']] = $_paquet;
     193                                                        $items['paquets'][$_paquet['nom_archive']] = normaliser_champs('paquet', $_paquet);
    203194                                                }
    204195                                        }
  • _plugins_/svp_api/trunk/inc/svpapi_reponse.php

    r96784 r96818  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
     5
     6if (!defined('_SVPAPI_CHAMPS_MULTI_PLUGIN')) {
     7        define('_SVPAPI_CHAMPS_MULTI_PLUGIN', 'nom,slogan');
     8}
     9if (!defined('_SVPAPI_CHAMPS_SERIALISES_PLUGIN')) {
     10        define('_SVPAPI_CHAMPS_SERIALISES_PLUGIN', '');
     11}
     12
     13if (!defined('_SVPAPI_CHAMPS_MULTI_PAQUET')) {
     14        define('_SVPAPI_CHAMPS_MULTI_PAQUET', 'description');
     15}
     16if (!defined('_SVPAPI_CHAMPS_SERIALISES_PAQUET')) {
     17        define('_SVPAPI_CHAMPS_SERIALISES_PAQUET', 'auteur,credit,licence,copyright,dependances,procure,traductions');
     18}
    519
    620/**
     
    4357
    4458
     59function reponse_collectionner_plugins($where) {
     60
     61        // Initialisation de la collection
     62        $plugins = array();
     63
     64        // Récupérer la liste des plugins (filtrée ou pas).
     65        // Les plugins appartiennent forcément à un dépot logique installés sur le serveur. Les plugins
     66        // installés directement sur le serveur, donc hors dépôt sont exclus.
     67        $from = array('spip_plugins', 'spip_depots_plugins AS dp');
     68        $select = array('*');
     69        $where = array_merge(array('dp.id_depot>0', 'dp.id_plugin=spip_plugins.id_plugin'), $where);
     70        $group_by = array('spip_plugins.id_plugin');
     71        $collection = sql_allfetsel($select, $from, $where, $group_by);
     72
     73        // On refactore le tableau de sortie du allfetsel en un tableau associatif indexé par les préfixes.
     74        // On transforme les champs multi en tableau associatif indexé par la langue et on désérialise les
     75        // champs sérialisés.
     76        if ($collection) {
     77                foreach ($collection as $_plugin) {
     78                        unset($_plugin['id_plugin']);
     79                        unset($_plugin['id_depot']);
     80                        $plugins[$_plugin['prefixe']] = normaliser_champs('plugin', $_plugin);
     81                }
     82        }
     83
     84        return $plugins;
     85}
     86
     87
     88function reponse_collectionner_depots($where) {
     89
     90        // Initialisation de la collection
     91        $depots = array();
     92
     93        // Récupérer la liste des dépôts
     94        $from = array('spip_depots');
     95        $select = array('*');
     96        $collection = sql_allfetsel($select, $from, $where);
     97
     98        // Refactorer le tableau de sortie du allfetsel en supprimant
     99        // les champs id_depot et maj.
     100        if ($collection) {
     101                foreach ($collection as $_depot) {
     102                        unset($_depot['id_depot']);
     103                        unset($_depot['maj']);
     104                        $depots[] = $_depot;
     105                }
     106        }
     107
     108        return $depots;
     109}
     110
     111
     112function normaliser_champs($type_objet, $objet) {
     113
     114        $objet_normalise = $objet;
     115
     116        // Traitement des champs multi et sérialisés
     117        $champs_multi = explode(',', constant('_SVPAPI_CHAMPS_MULTI_' . strtoupper($type_objet)));
     118        $champs_serialises = explode(',', constant('_SVPAPI_CHAMPS_SERIALISES_' . strtoupper($type_objet)));
     119
     120        if ($objet) {
     121                foreach($objet as $_champ => $_valeur) {
     122                        if (in_array($_champ, $champs_multi)) {
     123                                include_spip('plugins/preparer_sql_plugin');
     124                                $objet_normalise[$_champ] = normaliser_multi($_valeur);
     125                        }
     126
     127                        if (in_array($_champ, $champs_serialises)) {
     128                                $objet_normalise[$_champ] = unserialize($_valeur);
     129                        }
     130                }
     131        }
     132
     133        return $objet_normalise;
     134}
     135
    45136/**
    46137 * @param $erreur
  • _plugins_/svp_api/trunk/inc/svpapi_requete.php

    r96784 r96818  
    4444        $collection_valide = true;
    4545
    46         if (!in_array($valeur, array('plugins'))) {
     46        if (!in_array($valeur, array('plugins', 'depots'))) {
    4747                $erreur = array(
    4848                        'status'        => 400,
  • _plugins_/svp_api/trunk/lang/svpapi_fr.php

    r96784 r96818  
    11<?php
    22// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
    3 // Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/http/trunk/lang/
    43if (!defined('_ECRIRE_INC_VERSION')) {
    54        return;
  • _plugins_/svp_api/trunk/paquet.xml

    r96785 r96818  
    22        prefix="svpapi"
    33        categorie="outil"
    4         version="0.1.1"
     4        version="0.2.0"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.