Changeset 54127 in spip-zone


Ignore:
Timestamp:
Nov 6, 2011, 5:08:59 PM (8 years ago)
Author:
eric@…
Message:

Mise au point finale de la fusion des balises techniques d'un plugin.xml contenant deux balises <plugin>.
Incrément de version car il faut maintenant modifier l'affichage des squelettes utilisant SVP

Location:
_plugins_/svp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/svp/plugin.xml

    r53717 r54127  
    33        <auteur>Eric Lupinacci</auteur>
    44        <licence>GNU/GPL</licence>
    5         <version>0.9.5</version>
     5        <version>0.9.6</version>
    66        <version_base>0.1</version_base>
    77        <icon>prive/themes/spip/images/svp-64.png</icon>
  • _plugins_/svp/plugins/fusion_plugin.php

    r54036 r54127  
    88// Pour les balise plugin unique cette fonction permet de generer une structure
    99// identique pour les balises dites techniques
     10// On limite le traitement a deux balises plugins maximum, ce qui est le cas de tous les plugin.xml actuellement
    1011function plugins_fusion_plugin($plugins) {
    1112        global $balises_techniques;
     
    5152                // -- compatible : on constuit l'intervalle global de compatibilite SPIP
    5253                // -- necessite, utilise, lib : on construit le tableau par intervalle de compatibilite SPIP
    53                 foreach ($plugins as $_cle => $_plugin) {
    54                         if ($_cle <> $cle_min_max) {
    55                                 // categorie et icon
    56                                 if (!$fusion['categorie'] AND $_plugin['categorie'])
    57                                         $fusion['categorie'] = $_plugin['categorie'];
    58                                 if (!$fusion['logo'] AND $_plugin['logo'])
    59                                         $fusion['logo'] = $_plugin['logo'];
    60                                 // compatible
    61                                 $fusion['compatibilite'] = fusionner_intervalles($fusion['compatibilite'], $_plugin['compatibilite']);
    62                                 // necessite, utilise, lib : on indexe chaque liste de dependances par l'intervalle de compatibilite
    63                                 // sans regrouper les doublons pour l'instant
     54                $cle_min_min = ($cle_min_max==0) ? 1 : 0;
     55                if (!$fusion['categorie'] AND $plugins[$cle_min_min]['categorie'])
     56                        $fusion['categorie'] = $plugins[$cle_min_min]['categorie'];
     57                if (!$fusion['logo'] AND $plugins[$cle_min_min]['logo'])
     58                        $fusion['logo'] = $plugins[$cle_min_min]['logo'];
     59                $fusion['compatibilite'] = fusionner_intervalles($fusion['compatibilite'], $plugins[$cle_min_min]['compatibilite']);
     60
     61                // necessite, utilise, lib : on indexe chaque liste de dependances par l'intervalle de compatibilite
     62                // sans regrouper les doublons pour l'instant
     63                foreach ($balises_techniques as $_btech) {
     64                        if (!isset($fusion[$_btech]) OR !$fusion[$_btech]) {
     65                                if ($plugins[$cle_min_min][$_btech]) {
     66                                        // La balise technique est vide dans le tableau de fusion mais non vide dans la deuxieme balise plugin
     67                                        // On range cette balise dans le tableau fusion de sa compatibilite et on cree la cle commune vide
     68                                        $fusion[$_btech][$plugins[$cle_min_min]['compatibilite']] = $plugins[$cle_min_min][$_btech];
     69                                        $fusion[$_btech][0] = array();
     70                                }
     71                        }
     72                        else if (!isset($plugins[$cle_min_min][$_btech]) OR !$plugins[$cle_min_min][$_btech]) {
     73                                // La balise technique est non vide dans le tableau de fusion mais vide dans la deuxieme balise plugin
     74                                // On deplace cette balise dans le tableau fusion de sa compatibilite et on cree la cle commune vide
     75                                $balise = $fusion[$_btech];
     76                                unset($fusion[$_btech]);
     77                                $fusion[$_btech][$plugins[$cle_min_max]['compatibilite']] = $balise;
     78                                $fusion[$_btech][0] = array();
     79                        }
     80                        else {
     81                                // Les deux tableaux contiennent une balise technique non vide : il faut fusionner cette balise technique !
     82                                // On parcourt le premier tableau (fusion) en verifiant une egalite avec le deuxieme tableau
     83                                foreach ($fusion[$_btech] as $_cle0 => $_balise0) {
     84                                        $balise_commune = false;
     85                                        foreach ($plugins[$cle_min_min][$_btech] as $_cle1 => $_balise1) {
     86                                                if (balise_compare_egalite($_balise0, $_balise1)) {
     87                                                        // On classe cette balise dans le bloc commun (index 0) et on la supprime dans les
     88                                                        // 2 tableaux en cours de comparaison
     89                                                        unset($fusion[$_btech][$_cle0]);
     90                                                        $fusion[$_btech][0][] = $_balise1;
     91                                                        unset($plugins[$cle_min_min][$_btech][$_cle1]);
     92                                                        $balise_commune = true;
     93                                                        break;
     94                                                }
     95                                        }
     96                                        if (!$balise_commune) {
     97                                                $fusion[$_btech][$plugins[$cle_min_max]['compatibilite']][] = $_balise0;
     98                                                unset($fusion[$_btech][$_cle0]);
     99                                        }
     100                                        if (!isset($fusion[$_btech][0]))
     101                                                $fusion[$_btech][0] = array();
     102                                }
     103
     104                                // On traite maintenant les balises restantes du deuxieme tableau
     105                                if ($plugins[$cle_min_min][$_btech])
     106                                        foreach ($plugins[$cle_min_min][$_btech] as $_balise2) {
     107                                                $fusion[$_btech][$plugins[$cle_min_min]['compatibilite']][] = $_balise2;
     108                                        }
    64109                        }
    65110                }
     111
    66112        }
    67113       
     
    69115}
    70116
     117
     118function balise_compare_egalite($balise1, $balise2) {
     119
     120        foreach ($balise1 as $_attribut1 => $_valeur1){
     121                if (!array_key_exists($_attribut1, $balise2))
     122                        return false;
     123                else
     124                        if ($_valeur1 != $balise2[$_attribut1])
     125                                return false;
     126        }
     127
     128        return true;
     129}
     130
    71131?>
  • _plugins_/svp/tests/depot.xml

    r54036 r54127  
    172172                <nom>header_prive</nom>
    173173                <action>insert_head</action>
    174                 <inclure>spip20/fancybox_pipelines.php</inclure>
     174                <inclure>fancybox_pipelines.php</inclure>
    175175        </pipeline>
    176176</plugin>
Note: See TracChangeset for help on using the changeset viewer.