source: spip-zone/_galaxie_/plugins-spip-net/svp2010/action/api_infos_plugin.php @ 114122

Last change on this file since 114122 was 114122, checked in by maieul@…, 7 months ago

indiquer le nom des plugins dans le json, pour requetage correct du côté de contrib

File size: 2.9 KB
Line 
1<?php
2/**
3 * Infos plugin
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10function action_api_infos_plugin_dist(){
11
12        // Construction du where : si les arguments sont fournis on peut alors chercher les informations sur le plugin.
13        if ($l = _request('lien_doc'))
14                $where = "pa.lien_doc LIKE" . sql_quote("$l%");
15        if ($p = _request('arg'))
16                $where = "pa.prefixe=" . sql_quote($p);
17
18        $retour = array();
19        if ($where) {
20                // Récupération des urls des dépôts pour construire l'url complète de l'archive.
21                $depots = sql_allfetsel(array('id_depot', 'url_archives'), 'spip_depots');
22                if ($depots) {
23                        // On range le tableau des dépots sous la forme [id_depot] = url archives
24                        $urls_archives = array_column($depots, 'url_archives', 'id_depot');
25
26                        // Pouvoir utiliser spip_version_compare().
27                        include_spip('plugins/installer');
28
29                        // Récupération des paquets ayant le bon préfixe et/ou le bon lien de doc.
30                        $paquets = sql_allfetsel(
31                                'pa.id_depot,pa.prefixe,pa.version,pa.branches_spip,pa.lien_doc,pa.logo,pa.nom_archive,pa.maj_archive,pa.compatibilite_spip,pl.categorie, pl.nom',
32                                'spip_paquets as pa JOIN spip_plugins as pl ON pa.id_plugin=pl.id_plugin',
33                                $where,
34                                '',
35                                'pa.version DESC'
36                        );
37                        foreach ($paquets as $_paquet) {
38                                if ($_paquet['nom_archive'] and $_paquet['id_depot']) {
39                                        // On prépare le bloc paquet à enregistrer par la suite pour chaque branche SPIP concernée.
40                                        // -- Supprimer la normalisation de la version (00x.00y.00z) nécessaire au tri.
41                                        // -- TODO : il existe la fonction denormaliser_version() qui conserve les -dev ou autres ??
42                                        $pv = explode('.', $_paquet['version']);
43                                        $pv = array_map('intval', $pv);
44                                        $pv = implode('.', $pv);
45                                        $infos_paquet = array(
46                                                'version' => $pv,
47                                                'lien_doc' => $_paquet['lien_doc'],
48                                                'logo' => $_paquet['logo'],
49                                                'archive' => $urls_archives[$_paquet['id_depot']] . '/' . $_paquet['nom_archive'],
50                                                'date' => $_paquet['maj_archive'],
51                                                'categorie' => $_paquet['categorie'],
52                                                'nom' => $_paquet['nom']
53                                        );
54
55                                        // On boucle sur chaque branche supportée par le paquet et on insère la version la plus récente
56                                        // du plugin dans le tableau de sortie.
57                                        $prefixe = $_paquet['prefixe'];
58                                        $branches = explode(',', $_paquet['branches_spip']);
59                                        foreach ($branches as $_v) {
60                                                $vindex = "SPIP-${_v}";
61                                                if (empty($retour['plugins'][$prefixe][$vindex])
62                                                or spip_version_compare($retour['plugins'][$prefixe][$vindex]['version'], $infos_paquet['version'], '<=')) {
63                                                        // Enregistrement du paquet : premier ou plus récent
64                                                        $retour['plugins'][$prefixe][$vindex] = $infos_paquet;
65                                                }
66                                        }
67                                }
68                        }
69                }
70        }
71
72        // Traitement du retour
73        if (!$retour){
74                include_spip('inc/headers');
75                http_status(404);
76                echo "404 Not Found";
77        }
78        else {
79                $retour = json_encode($retour);
80                $content_type = "application/json";
81                header("Content-type: $content_type; charset=utf-8");
82                echo $retour;
83        }
84}
Note: See TracBrowser for help on using the repository browser.