Changeset 48470 in spip-zone


Ignore:
Timestamp:
Jun 3, 2011, 7:10:38 PM (10 years ago)
Author:
eric@…
Message:

On ajoute un champ branches_spip dans les tables paquets et plugins afin d'optimiser le critère de tri par branches :

  • ajout d'une fonction de compilation des branches supportées
  • ajout de la mise a jour des champs correspondants

Reste à mettre à jour le critère.

Location:
_plugins_/svp
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/svp/base/svp_declarer.php

    r48293 r48470  
    3939                "date_modif"    => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // la plus recente des paquets du plugin
    4040                "compatibilite_spip"    => "varchar(24) DEFAULT '' NOT NULL", // union des intervalles des paquets du plugin
     41                "branches_spip" => "varchar(255) DEFAULT '' NOT NULL", // union des branches spip supportees par les paquets du plugin
    4142        );
    4243       
     
    5758                "version_base"  => "varchar(24) DEFAULT '' NOT NULL",
    5859                "compatibilite_spip"    => "varchar(24) DEFAULT '' NOT NULL",
     60                "branches_spip" => "varchar(255) DEFAULT '' NOT NULL", // branches spip supportees (cf meta)
    5961                "description"   => "text DEFAULT '' NOT NULL",
    6062                "auteur"                => "text DEFAULT '' NOT NULL",
  • _plugins_/svp/inc/svp_depoter.php

    r48293 r48470  
    509509                                // On finalise le plugin en cours et on passe au suivant
    510510                                if ($plugin_en_cours != $paquet['id_plugin']) {
     511                                        // On deduit maintenant les branches de la compatibilite globale
     512                                        $complements['branches_spip'] = compiler_branches_spip($complements['compatibilite_spip']);
    511513                                        // On met a jour le plugin en cours
    512514                                        if ($plugin_en_cours != 0)
     
    516518                                        // On passe au plugin suivant
    517519                                        $plugin_en_cours = $paquet['id_plugin'];
    518                                         $complements = array('compatibilite_spip' => '', 'date_crea' => 0, 'date_modif' => 0);
     520                                        $complements = array('compatibilite_spip' => '', 'branches_spip' => '', 'date_crea' => 0, 'date_modif' => 0);
    519521                                }
    520522                               
    521                                 // On compile les compléments du plugin avec le paquet courant
     523                                // On compile les compléments du plugin avec le paquet courant sauf les branches
     524                                // qui sont deduites en fin de compilation de la compatibilite
    522525                                if ($paquet['date_modif'] > $complements['date_modif'])
    523526                                        $complements['date_modif'] = $paquet['date_modif'];
     
    554557                        'version_base' => $champs_aplat['version_base'],
    555558                        'compatibilite_spip' => $champs_aplat['compatibilite_spip'],
     559                        'branches_spip' => $champs_aplat['branches_spip'],
    556560                        'etat' => $champs_aplat['etat'],
    557561                        'etatnum' => $champs_aplat['etatnum'],
  • _plugins_/svp/inc/svp_intervaller.php

    r48126 r48470  
    3535}
    3636
    37 function extraire_bornes($intervalle) {
     37function extraire_bornes($intervalle, $initialiser=false) {
    3838        static $borne_vide = array('valeur' => '', 'incluse' => false);
    39         $bornes = array('min' => $borne_vide, 'max' => $borne_vide);
     39        static $borne_inf_init = array('valeur' => _SVP_VERSION_SPIP_MIN, 'incluse' => true);
     40        static $borne_sup_init = array('valeur' => _SVP_VERSION_SPIP_MAX, 'incluse' => true);
     41
     42        if ($initialiser)
     43                $bornes = array('min' => $borne_inf_init, 'max' => $borne_sup_init);
     44        else
     45                $bornes = array('min' => $borne_vide, 'max' => $borne_vide);
    4046
    4147        if ($intervalle
     
    5056                }
    5157        }
     58
    5259       
    5360        return $bornes;
     
    5966                        . ($bornes['max']['incluse'] ? ']' : ($dtd=='paquet' ? '[' : ')'));
    6067}
     68
     69
     70function compiler_branches_spip($intervalle) {
     71        global $infos_branches_spip;
     72        $liste_branches_spip = array_keys($GLOBALS['infos_branches_spip']);
     73               
     74        $bornes = extraire_bornes($intervalle, false);
     75        // On traite d'abord les cas ou l'intervalle est :
     76        // - vide
     77        // - non vide mais avec les deux bornes vides
     78        // Dans ces cas la compatibilite est totale, on renvoie toutes les branches
     79        if (!$intervalle OR (!$bornes['min']['valeur'] AND !$bornes['max']['valeur']))
     80                return implode(',', $liste_branches_spip);
     81
     82        // On force l'initialisation des bornes et on les nettoie des suffixes d'etat
     83        $bornes = extraire_bornes($intervalle, true);
     84        $borne_inf = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i','\\1',$bornes['min']['valeur']));
     85        $borne_sup = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i','\\1',$bornes['max']['valeur']));
     86
     87        // On determine les branches inf et sup issues du phrasage de l'intervalle
     88        // -- on initialise la branche inf de l'intervalle que l'on va preciser ensuite
     89        $t = explode('.', $borne_inf);
     90        $branche_inf = $t[0] . '.' . $t[1];
     91        // -- pour eviter toutes erreur fatale on verifie que la branche est bien dans la liste des possibles
     92        // -- -> si non, on renvoie vide
     93        if (!in_array($branche_inf, $liste_branches_spip))
     94                return '';
     95        // -- on complete la borne inf de l'intervalle de x.y en x.y.z et on determine la vraie branche
     96        if (!$t[2]) {
     97                if ($bornes['min']['incluse'])
     98                        $borne_inf = $infos_branches_spip[$branche_inf][0];
     99                else {
     100                        $branche_inf = $liste_branches_spip[array_search($branche_inf, $liste_branches_spip)+1];
     101                        $borne_inf = $infos_branches_spip[$branche_inf][0];
     102                }
     103        }
     104       
     105        // -- on initialise la branche sup de l'intervalle que l'on va preciser ensuite
     106        $t = explode('.', $borne_sup);
     107        $branche_sup = $t[0] . '.' . $t[1];
     108        // -- pour eviter toutes erreur fatale on verifie que la branche est bien dans la liste des possibles
     109        // -- -> si non, on renvoie vide
     110        if (!in_array($branche_sup, $liste_branches_spip))
     111                return '';
     112        // -- on complete la borne sup de l'intervalle de x.y en x.y.z et on determine la vraie branche
     113        if (!$t[2]) {
     114                if ($bornes['max']['incluse'])
     115                        $borne_sup = $infos_branches_spip[$branche_sup][1];
     116                else {
     117                        $branche_sup = $liste_branches_spip[array_search($branche_sup, $liste_branches_spip)-1];
     118                        $borne_sup = $infos_branches_spip[$branche_sup][1];
     119                }
     120        }
     121
     122        // -- on verifie que les bornes sont bien dans l'ordre :
     123        //    -> sinon on retourne la branche sup uniquement
     124        if (spip_version_compare($borne_inf, $borne_sup, '>='))
     125                return $branche_sup;
     126
     127        // A ce stade, on a un intervalle ferme en bornes ou en branches
     128        // Il suffit de trouver les branches qui y sont incluses, sachant que les branches inf et sup
     129        // le sont a coup sur maintenant
     130        $index_inf = array_search($branche_inf, $liste_branches_spip);
     131        $index_sup = array_search($branche_sup, $liste_branches_spip);
     132        $liste = array();
     133        for ($i = $index_inf; $i <= $index_sup; $i++) {
     134                $liste[] = $liste_branches_spip[$i];
     135        }
     136
     137        return implode(',', $liste);
     138}
     139
    61140?>
  • _plugins_/svp/plugins/preparer_sql_plugin.php

    r48411 r48470  
    1515function plugins_preparer_sql_plugin($plugin)
    1616{
     17        include_spip('inc/svp_intervaller');
     18       
    1719        $champs = array();
    1820        if (!$plugin)
     
    7072        $champs['nom'] = normaliser_nom($plugin['nom'], 'fr', false);
    7173
    72         // Extraction de la compatibilite SPIP
     74        // Extraction de la compatibilite SPIP et construction de la liste des branches spip supportees
    7375        $champs['compatibilite_spip'] = ($plugin['compatible']) ? $plugin['compatible'] : '';
     76        $champs['branches_spip'] = ($plugin['compatible']) ? compiler_branches_spip($plugin['compatible']) : '';
    7477       
    7578        // Construction du tableau des dependances necessite, lib et utilise
  • _plugins_/svp/svp_options.php

    r48145 r48470  
    3434define('_SVP_REGEXP_BALISE_PAQUET', '#<paquet[^>]*>(.*)</paquet>#Uims');
    3535
     36// Liste des categories de plugin
     37// --> A METTRE DANS SPIP !!!
     38$GLOBALS['categories_plugin'] = array(
     39        'auteur',
     40        'communication',
     41        'date',
     42        'divers',
     43        'edition',
     44        'maintenance',
     45        'multimedia',
     46        'navigation',
     47        'outil',
     48        'performance',
     49        'statistique',
     50        'squelette',
     51        'theme',
     52        'aucune'
     53);
     54
    3655// Version SPIP minimale quand un plugin ne le precise pas
     56// -- Version SPIP correspondant a l'apparition des plugins
    3757define('_SVP_VERSION_SPIP_MIN', '1.9.0');
    38 // Intervalles de compatibilite SPIP
    39 define('_SVP_COMPATIBILITE_SPIP_TOUT', '[1.9.0;[');
    40 define('_SVP_COMPATIBILITE_SPIP_NA', '];[');
     58// -- Pour l'instant on ne connait pas la borne sup exacte
     59define('_SVP_VERSION_SPIP_MAX', '3.0.99');
     60
     61// Liste des branches significatives de SPIP et de leurs bornes (versions min et max)
     62// A mettre a jour en fonction des sorties
     63$GLOBALS['infos_branches_spip'] = array(
     64        '1.9' => array(_SVP_VERSION_SPIP_MIN,'1.9.2'),
     65        '2.0' => array('2.0.0','2.0.15'),
     66        '2.1' => array('2.1.0','2.1.10'),
     67        '3.0' => array('3.0.0',_SVP_VERSION_SPIP_MAX)
     68);
    4169
    4270?>
Note: See TracChangeset for help on using the changeset viewer.