Changeset 57482 in spip-zone


Ignore:
Timestamp:
Jan 21, 2012, 8:34:18 PM (8 years ago)
Author:
marcimat@…
Message:
  • ne pas modifier le vmax pour les paquets locaux (eric)
  • ne pas télécharger 2 fois le xml complet de l'archive. 1 seule fois suffira.
Location:
_core_/plugins/svp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/svp/formulaires/ajouter_depot.php

    r55692 r57482  
    1212       
    1313        $erreurs = array();
    14         $xml = _request('xml_paquets');
     14        $xml = trim(_request('xml_paquets'));
    1515
    1616        if (!$xml) {
     
    2222                $erreurs['xml_paquets'] = _T('svp:message_nok_url_depot_incorrecte', array('url' => $xml));
    2323        }
    24         elseif (sql_countsel('spip_depots','xml_paquets='.sql_quote(trim($xml)))) {
     24        elseif (sql_countsel('spip_depots','xml_paquets='.sql_quote($xml))) {
    2525                // L'url est deja ajoutee
    2626                $erreurs['xml_paquets'] = _T('svp:message_nok_depot_deja_ajoute', array('url' => $xml));
     
    3333
    3434        $retour = array();
    35         $xml = _request('xml_paquets');
     35        $xml = trim(_request('xml_paquets'));
    3636
    3737        // On ajoute le depot et ses plugins dans la base
     
    6464function svp_verifier_adresse_depot($url){
    6565        include_spip('inc/distant');
    66         return (!$xml = recuperer_page($url)) ? false : true;
     66        // evitons de recuperer 2 fois le XML demandé.
     67        // si on le recupere ici, il sera deja a jour pour le prochain copie_locale
     68        // lors du traitement.
     69        return (copie_locale($url) ? true : false);
     70        #return (!$xml = recuperer_page($url)) ? false : true;
    6771}
    6872
  • _core_/plugins/svp/inc/svp_depoter_distant.php

    r56800 r57482  
    295295        sql_delete('spip_depots_plugins', array('id_depot='. sql_quote($id_depot), sql_in('id_plugin', $anciens_plugins)));
    296296
    297         // corriger les vmax des plugins (et supprimer les plugins orphelins)
     297        // supprimer les plugins orphelins
    298298        include_spip('inc/svp_depoter_local');
     299        svp_supprimer_plugins_orphelins($anciens_plugins);
     300       
     301        // corriger les vmax des plugins
    299302        svp_corriger_vmax_plugins($anciens_plugins);
    300303       
     
    684687}
    685688
     689
     690
     691/**
     692 * Détermine la version max
     693 * de chaque plugin, c'est a dire
     694 * la version maxi d'un des paquets qui lui est lié.
     695 *
     696 * @param array $plugins liste d'identifiant de plugins
     697**/
     698function svp_corriger_vmax_plugins($plugins) {
     699        // tous les plugins encore lies a des depots...
     700        // la vmax est a retablir...
     701        if ($plugins) {
     702                $p = sql_allfetsel('DISTINCT(p.id_plugin)', array('spip_plugins AS p', 'spip_paquets AS pa'), array(sql_in('p.id_plugin', $plugins), 'p.id_plugin=pa.id_plugin'));
     703                $p = array_map('array_shift', $p);
     704
     705                // pour les autres, on la fixe correctement
     706                $vmax = 0;
     707               
     708                // On insere, en encapsulant pour sqlite...
     709                if (sql_preferer_transaction()) {
     710                        sql_demarrer_transaction();
     711                }
     712                               
     713                foreach ($p as $id_plugin) {
     714                        if ($pa = sql_allfetsel('version', 'spip_paquets', 'id_plugin='.$id_plugin)) {
     715                                foreach ($pa as $v) {
     716                                        if (spip_version_compare($v['version'], $vmax, '>')) {
     717                                                $vmax = $v['version'];
     718                                        }
     719                                }
     720                        }
     721                        sql_updateq('spip_plugins', array('vmax'=>$vmax), 'id_plugin=' . intval($id_plugin));
     722                }
     723               
     724                if (sql_preferer_transaction()) {
     725                        sql_terminer_transaction();
     726                }
     727        }
     728}
     729
     730
     731
    686732?>
  • _core_/plugins/svp/inc/svp_depoter_local.php

    r56671 r57482  
    9292        sql_delete('spip_paquets', sql_in('id_paquet', $anciens_paquets));
    9393       
    94         // corriger les vmax (et supprimer les plugins orphelins)
    95         svp_corriger_vmax_plugins($anciens_plugins);
     94        // supprimer les plugins orphelins
     95        svp_supprimer_plugins_orphelins($anciens_plugins);
    9696
    9797        // on ne garde que les paquets qui ne sont pas presents dans la base
     
    111111        svp_base_inserer_paquets_locaux($paquets_locaux);
    112112}
    113 
    114 
    115 /**
    116  * Détermine la version max
    117  * de chaque plugin, c'est a dire
    118  * la version maxi d'un des paquets qui lui est lié.
    119  *
    120  * Supprime les plugins devenus orphelins dans cette liste.
    121  *
    122  * @param array $plugins liste d'identifiant de plugins
    123 **/
    124 function svp_corriger_vmax_plugins($plugins) {
    125         // tous les plugins encore lies a des depots...
    126         // la vmax est a retablir...
    127         if ($plugins) {
    128                 $p = sql_allfetsel('DISTINCT(p.id_plugin)', array('spip_plugins AS p', 'spip_paquets AS pa'), array(sql_in('p.id_plugin', $plugins), 'p.id_plugin=pa.id_plugin'));
    129                 $p = array_map('array_shift', $p);
    130                 $diff = array_diff($plugins, $p);
    131                 // pour chaque plugin non encore utilise, on les vire !
    132                 sql_delete('spip_plugins', sql_in('id_plugin', $diff));
    133        
    134                 // pour les autres, on la fixe correctement
    135                 $vmax = 0;
    136                
    137                 // On insere, en encapsulant pour sqlite...
    138                 if (sql_preferer_transaction()) {
    139                         sql_demarrer_transaction();
    140                 }
    141                                
    142                 foreach ($p as $id_plugin) {
    143                         if ($pa = sql_allfetsel('version', 'spip_paquets', 'id_plugin='.$id_plugin)) {
    144                                 foreach ($pa as $v) {
    145                                         if (spip_version_compare($v['version'], $vmax, '>')) {
    146                                                 $vmax = $v['version'];
    147                                         }
    148                                 }
    149                         }
    150                         sql_updateq('spip_plugins', array('vmax'=>$vmax), 'id_plugin=' . intval($id_plugin));
    151                 }
    152                
    153                 if (sql_preferer_transaction()) {
    154                         sql_terminer_transaction();
    155                 }
    156         }
    157 }
    158 
    159113
    160114
     
    335289                svp_corriger_obsolete_paquets( array_keys($id_plugin_concernes) );
    336290        }
    337 
    338         if (count($cle_plugins)) {
    339                 svp_corriger_vmax_plugins(array_values($cle_plugins));
    340         }
    341291}
    342292
     
    529479        }
    530480}
     481
     482
     483
     484
     485/**
     486 * Supprime les plugins devenus orphelins dans cette liste.
     487 *
     488 * @param array $plugins liste d'identifiant de plugins
     489**/
     490function svp_supprimer_plugins_orphelins($plugins) {
     491        // tous les plugins encore lies a des depots...
     492        // la vmax est a retablir...
     493        if ($plugins) {
     494                $p = sql_allfetsel('DISTINCT(p.id_plugin)', array('spip_plugins AS p', 'spip_paquets AS pa'), array(sql_in('p.id_plugin', $plugins), 'p.id_plugin=pa.id_plugin'));
     495                $p = array_map('array_shift', $p);
     496                $diff = array_diff($plugins, $p);
     497                // pour chaque plugin non encore utilise, on les vire !
     498                sql_delete('spip_plugins', sql_in('id_plugin', $diff));
     499                return $p; // les plugins encore en vie !
     500        }
     501}
     502
     503
    531504?>
Note: See TracChangeset for help on using the changeset viewer.