Changeset 113829 in spip-zone


Ignore:
Timestamp:
Feb 9, 2019, 5:03:15 PM (11 days ago)
Author:
eric@…
Message:

Simplifier l'action api_infos_plugin.
Les branches supportées sont déjà dans la table spip_paquets on peut donc boucler uniquement sur cette liste et éviter les tests de compatibilité et les index de branches spip inutiles.
L'url du zip est toujours bonne maintenant car on extrait l'url de base de l'objet dépot.

Location:
_galaxie_/plugins-spip-net/svp2010
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/plugins-spip-net/svp2010/action/api_infos_plugin.php

    r106924 r113829  
    1010function action_api_infos_plugin_dist(){
    1111
     12        // Construction du where : si les arguments sont fournis on peut alors chercher les informations sur le plugin.
    1213        $where = array();
    13 
    1414        if ($l = _request('lien_doc'))
    1515                $where = "pa.lien_doc LIKE" . sql_quote("$l%");
    16 
    17         if ($p = _request('prefixe'))
     16        if ($p = _request('arg'))
    1817                $where = "pa.prefixe=" . sql_quote($p);
    1918
    20         include_spip("inc/plugin");
    21         $vtarget = array('2.0', '2.1', '3.0', '3.1', '3.2');
    22         $res = array();
    23         if (count($where)){
    24                 $paquets = sql_allfetsel('pa.prefixe,pa.version,pa.lien_doc,pa.logo,pa.nom_archive,pa.maj_archive,pa.compatibilite_spip,pl.categorie',
    25                 'spip_paquets as pa JOIN spip_plugins as pl ON pa.id_plugin=pl.id_plugin', $where, '', 'pa.version DESC');
    26                 foreach ($paquets as $paquet){
    27                         if ($paquet['nom_archive']){
    28                         $prefixe = $paquet['prefixe'];
    29                         foreach ($vtarget as $v){
    30                                 $vindex = "SPIP-$v";
    31                                 if (!isset($res['plugins'][$prefixe][$vindex])
    32                                         OR !$res['plugins'][$prefixe][$vindex]
    33                                 ){
    34                                         if (
    35                                              plugin_version_compatible($paquet['compatibilite_spip'],"$v.0")
    36                                           OR plugin_version_compatible($paquet['compatibilite_spip'],"$v.99")
    37                                         ){
    38                                                 $pv = explode('.',$paquet['version']);
    39                                                 $pv = array_map('intval',$pv);
    40                                                 $pv = implode('.',$pv);
    41                                                 $h = dirname($paquet['logo']);
    42                                                 $h = ($h?$h:"https://plugins.spip.net/spip.php?page=telechargements");
    43                                                 $res['plugins'][$prefixe][$vindex] = array(
    44                                                         'version' => $pv,
    45                                                         'lien_doc' => $paquet['lien_doc'],
    46                                                         'logo' => $paquet['logo'],
    47                                                         'archive' => $h.'/'.$paquet['nom_archive'],
    48                                                         'date' => $paquet['maj_archive'],
    49                                                         'categorie' => $paquet['categorie'],
    50                                                 );
     19        $retour = array();
     20        if (count($where)) {
     21                // Récupération des urls des dépôts pour construire l'url complète de l'archive.
     22                $depots = sql_allfetsel(array('id_depot', 'url_archives'), 'spip_depots');
     23                if ($depots) {
     24                        // On range le tableau des dépots sous la forme [id_depot] = url archives
     25                        $urls_archives = array_column($depots, 'url_archives', 'id_depot');
     26
     27                        // Pouvoir utiliser spip_version_compare().
     28                        include_spip('plugins/installer');
     29
     30                        // Récupération des paquets ayant le bon préfixe et/ou le bon lien de doc.
     31                        $paquets = sql_allfetsel(
     32                                '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',
     33                                'spip_paquets as pa JOIN spip_plugins as pl ON pa.id_plugin=pl.id_plugin',
     34                                $where,
     35                                '',
     36                                'pa.version DESC'
     37                        );
     38                        foreach ($paquets as $_paquet) {
     39                                if ($_paquet['nom_archive'] and $_paquet['id_depot']) {
     40                                        // On prépare le bloc paquet à enregistrer par la suite pour chaque branche SPIP concernée.
     41                                        // -- Supprimer la normalisation de la version (00x.00y.00z) nécessaire au tri.
     42                                        // -- TODO : il existe la fonction denormaliser_version() qui conserve les -dev ou autres ??
     43                                        $pv = explode('.', $_paquet['version']);
     44                                        $pv = array_map('intval', $pv);
     45                                        $pv = implode('.', $pv);
     46                                        $infos_paquet = array(
     47                                                'version' => $pv,
     48                                                'lien_doc' => $_paquet['lien_doc'],
     49                                                'logo' => $_paquet['logo'],
     50                                                'archive' => $urls_archives[$_paquet['id_depot']] . '/' . $_paquet['nom_archive'],
     51                                                'date' => $_paquet['maj_archive'],
     52                                                'categorie' => $_paquet['categorie'],
     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                                                }
    5166                                        }
    52                                         else
    53                                                 $res['plugins'][$prefixe][$vindex] = false;
    5467                                }
    5568                        }
    56                         }
    5769                }
     70        }
    5871
    59         }
    60         if (!$res){
     72        // Traitement du retour
     73        if (!$retour){
    6174                include_spip('inc/headers');
    6275                http_status(404);
     
    6477        }
    6578        else {
    66                 $res = json_encode($res);
     79                $retour = json_encode($retour);
    6780                $content_type = "application/json";
    6881                header("Content-type: $content_type; charset=utf-8");
    69                 echo $res;
     82                echo $retour;
    7083        }
    7184}
  • _galaxie_/plugins-spip-net/svp2010/paquet.xml

    r113692 r113829  
    22        prefix="pluginspip"
    33        categorie="squelette"
    4         version="0.10.2"
     4        version="0.10.3"
    55        etat="stable"
    66        compatibilite="[3.1.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.