Changeset 54402 in spip-zone


Ignore:
Timestamp:
Nov 13, 2011, 8:16:44 PM (8 years ago)
Author:
eric@…
Message:

Commit non fonctionnel pour les plugin.xml à deux balises.

Location:
_plugins_/plugonet
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/plugonet/inc/plugonet_traiter.php

    r54359 r54402  
    5050                                if (($traitement == 'generation_paquetxml')
    5151                                AND !$erreurs[$nom]['information_pluginxml']) {
    52                                         // Puisqu'on sait extraire les infos du plugin.xml, .on construit le contenu
     52                                        // Puisqu'on sait extraire les infos du plugin.xml, on construit le contenu
    5353                                        // du fichier paquet.xml a partir de ces infos
    5454                                        list($paquet_xml, $commandes[$nom], $prefixe, $descriptions) = plugin2paquet($plugins);
     
    9898function plugin2paquet($plugins) {
    9999
    100         // Pour accelerer on simplifie le cas majaritaire ou le tableau ne contient qu'un seul element
     100        // Pour accelerer on simplifie le cas majoritaire ou le tableau ne contient qu'un seul element
    101101        $balises_spip = '';
    102         $commandes = array();
     102        $paquet = $commandes = array();
    103103        if (count($plugins) == 1 ) {
    104                 $cle_min_min = $cle_min_max = 0;
    105                 $plugins[$cle_min_min]['auteur'] = $plugins[$cle_min_min]['auteur'][0];
    106                 $plugins[$cle_min_min]['licence'] = $plugins[$cle_min_min]['licence'][0];
    107                 if ($plugins[$cle_min_min]['compatibilite'])
    108                         $plugins[$cle_min_min]['compatibilite_paquet'] = $plugins[$cle_min_min]['compatibilite'];
     104                $paquet = $plugins[0];
     105                $paquet['compatibilite_paquet'] = ($paquet['compatibilite']) ? $paquet['compatibilite'] : '';
    109106        }
    110107        else {
     
    137134                // On initialise les informations non techniques du bloc de compatibilite la moins elevee avec celles
    138135                // du bloc dont la borne min de compatibilite SPIP est la plus elevee.
    139                 $plugins[$cle_min_min]['prefix'] = $plugins[$cle_min_max]['prefix'];
    140                 $plugins[$cle_min_min]['categorie'] = $plugins[$cle_min_max]['categorie'];
    141                 $plugins[$cle_min_min]['logo'] = $plugins[$cle_min_max]['logo'];
    142                 $plugins[$cle_min_min]['version'] = $plugins[$cle_min_max]['version'];
    143                 $plugins[$cle_min_min]['etat'] = $plugins[$cle_min_max]['etat'];
    144                 $plugins[$cle_min_min]['schema'] = $plugins[$cle_min_max]['schema'];
    145                 $plugins[$cle_min_min]['meta'] = $plugins[$cle_min_max]['meta'];
    146                 $plugins[$cle_min_min]['documentation'] = $plugins[$cle_min_max]['documentation'];
    147                 $plugins[$cle_min_min]['nom'] = $plugins[$cle_min_max]['nom'];
    148                 $plugins[$cle_min_min]['auteur'] = $plugins[$cle_min_max]['auteur'][0];
    149                 $plugins[$cle_min_min]['licence'] = $plugins[$cle_min_max]['licence'][0];
    150                 $plugins[$cle_min_min]['slogan'] = $plugins[$cle_min_max]['slogan'];
    151                 $plugins[$cle_min_min]['description'] = $plugins[$cle_min_max]['description'];
     136                $paquet['prefix'] = $plugins[$cle_min_max]['prefix'];
     137                $paquet['categorie'] = $plugins[$cle_min_max]['categorie'];
     138                $paquet['logo'] = $plugins[$cle_min_max]['logo'];
     139                $paquet['version'] = $plugins[$cle_min_max]['version'];
     140                $paquet['etat'] = $plugins[$cle_min_max]['etat'];
     141                $paquet['schema'] = $plugins[$cle_min_max]['schema'];
     142                $paquet['meta'] = $plugins[$cle_min_max]['meta'];
     143                $paquet['documentation'] = $plugins[$cle_min_max]['documentation'];
     144                $paquet['nom'] = $plugins[$cle_min_max]['nom'];
     145                $paquet['auteur'] = $plugins[$cle_min_max]['auteur'];
     146                $paquet['licence'] = $plugins[$cle_min_max]['licence'];
     147                $paquet['slogan'] = $plugins[$cle_min_max]['slogan'];
     148                $paquet['description'] = $plugins[$cle_min_max]['description'];
     149
     150                // On fusionne les informations necessaires
     151                // les traitements effectues sont les suivants :
     152                // -- nom, prefix, documentation, version, etat, version_base, description : *rien*, on conserve ces informations en l'etat
     153                // -- options, fonctions, install, path, pipeline, bouton, onglet : *rien*, meme si certaines pourraient etre fusionnees ces infos ne sont pas stockees
     154                // -- auteur, licence : *rien*, l'heuristique pour fusionner ces infos est trop compliquee aujourdhui car c'est du texte libre
     155                // -- categorie, logo : si la valeur du bloc selectionne est vide on essaye d'en trouver une non vide dans les autres blocs
     156                // -- compatible : on constuit l'intervalle global de compatibilite SPIP
     157                if (!$paquet['categorie'] AND $plugins[$cle_min_min]['categorie'])
     158                        $paquet['categorie'] = $plugins[$cle_min_min]['categorie'];
     159                if (!$paquet['logo'] AND $plugins[$cle_min_min]['logo'])
     160                        $paquet['logo'] = $plugins[$cle_min_min]['logo'];
    152161                // On initialise la compatibilite avec la fusion des intervalles de compatibilite SPIP
    153                 $plugins[$cle_min_min]['compatibilite_paquet'] = $compatibilite_paquet;
    154 
    155                 // Le bloc de compatibilite la moins elevee correspond aux attributs et sous-balises primaires
    156                 // de la balise paquet. Les autres blocs generent les balises spip contenant uniquement les
    157                 // donnees dits techniques
    158                 // -- On commence avec les balises spip
    159                 foreach ($plugins as $_cle => $_plugin) {
    160                         if ($_cle <> $cle_min_min) {
    161                                 list($spip, $commandes_spip,) = plugin2balise($_plugin, 'spip');
     162                $paquet['compatibilite_paquet'] = $compatibilite_paquet;
     163
     164                // -- necessite, utilise, lib, chemin, pipeline, bouton, onglet : on indexe chaque liste de dependances
     165                //    par l'intervalle de compatibilite sans regrouper les doublons pour l'instant
     166                $fusion = fusionner_balises_techniques($plugins, $cle_min_min, $cle_min_max);
     167
     168                // Maintenant que les balises techniques sont fusionnees, il faut :
     169                // -- generer les balises spip qui ne contiennnent que les balises techniques d'un inetrvalle de compatibilite spip donne
     170                // -- completer la balise paquet avec les balises techniques communes
     171                foreach ($fusion as $_cle => $_fusion) {
     172                        if ($_cle == 0) {
     173                                // C'est la partie commune qui doit etre incluse dans la balise paquet
     174                                $paquet = array_merge($paquet, $_fusion[$_cle]);
     175                        }
     176                        else {
     177                                // Generation des balises spip
     178                                list($spip, $commandes_spip,) = plugin2balise($_fusion, 'spip');
    162179                                $balises_spip .= "\n\n$spip";
    163180                                $commandes['balise_spip'][$_plugin['compatibilite']] = $commandes_spip;
     
    166183        }
    167184       
    168         // -- On continue avec la balise paquet
     185        // -- On conclut avec la balise paquet
    169186        list($paquet_xml, $commandes_paquet, $descriptions) = plugin2balise(
    170                                                                                         $plugins[$cle_min_min],
     187                                                                                        $paquet,
    171188                                                                                        'paquet',
    172189                                                                                        $balises_spip);
     
    176193                        $paquet_xml,
    177194                        $commandes,
    178                         $plugins[$cle_min_min]['prefix'],
     195                        $paquet['prefix'],
    179196                        $descriptions);
    180197}
     
    212229                list($commentaire, $descriptions) = plugin2balise_commentaire($D['nom'], $D['description'], $D['slogan'], $D['prefix']);
    213230       
    214                 $auteur = plugin2balise_copy($D['auteur'], 'auteur');
    215                 $licence = plugin2balise_copy($D['licence'], 'licence');
     231                $auteur = plugin2balise_copy($D['auteur'][0], 'auteur');
     232                $licence = plugin2balise_copy($D['licence'][0], 'licence');
    216233                $traduire = is_array($D['traduire']) ? plugin2balise_traduire($D) :'';
    217234        }
     
    659676}
    660677
    661 function intervalle2bornes($intervalle) {
     678function intervalle2bornes($intervalle='') {
    662679        include_spip('inc/plugin');
    663680
     
    764781        return $licence;
    765782}
     783
     784function fusionner_balises_techniques($plugins, $cle_min_min, $cle_min_max) {
     785        global $balises_techniques_plugin;
     786
     787        $fusion = array();
     788        if (!$plugins)
     789                return $fusion;
     790
     791        foreach ($balises_techniques_plugin as $_btech) {
     792                // On initialise le tableau de sortie avec la balise la plus recente dans cette boucle uniquement.
     793                // De cette façon, le tableau ne contiendra que des balises techniques
     794                if (isset($plugins[$cle_min_max][$_btech]))
     795                        $fusion[$_btech] = $plugins[$cle_min_max][$_btech];
     796
     797                if (!isset($fusion[$_btech]) AND !isset($plugins[$cle_min_min][$_btech])) {
     798                        // Aucun des tableaux ne contient cette balise technique : on la positionne a un array vide
     799                        $fusion[$_btech] = array();
     800                }
     801                else if (!isset($fusion[$_btech]) OR !$fusion[$_btech]) {
     802                        if ($plugins[$cle_min_min][$_btech]) {
     803                                // La balise technique est vide dans le tableau de fusion mais non vide dans la deuxieme balise plugin
     804                                // On range cette balise dans le tableau fusion de sa compatibilite et on cree la cle commune vide
     805                                $fusion[$_btech][$plugins[$cle_min_min]['compatibilite']] = $plugins[$cle_min_min][$_btech];
     806                                $fusion[$_btech][0] = array();
     807                        }
     808                }
     809                else if (!isset($plugins[$cle_min_min][$_btech]) OR !$plugins[$cle_min_min][$_btech]) {
     810                        // La balise technique est non vide dans le tableau de fusion mais vide dans la deuxieme balise plugin
     811                        // On deplace cette balise dans le tableau fusion de sa compatibilite et on cree la cle commune vide
     812                        $balise = $fusion[$_btech];
     813                        unset($fusion[$_btech]);
     814                        $fusion[$_btech][$plugins[$cle_min_max]['compatibilite']] = $balise;
     815                        $fusion[$_btech][0] = array();
     816                }
     817                else {
     818                        // Les deux tableaux contiennent une balise technique non vide : il faut fusionner cette balise technique !
     819                        // On parcourt le premier tableau (fusion) en verifiant une egalite avec le deuxieme tableau
     820                        foreach ($fusion[$_btech] as $_cle0 => $_balise0) {
     821                                $balise_commune = false;
     822                                foreach ($plugins[$cle_min_min][$_btech] as $_cle1 => $_balise1) {
     823                                        if (balise_identique($_balise0, $_balise1)) {
     824                                                // On classe cette balise dans le bloc commun (index 0) et on la supprime dans les
     825                                                // 2 tableaux en cours de comparaison
     826                                                unset($fusion[$_btech][$_cle0]);
     827                                                $fusion[$_btech][0][] = $_balise1;
     828                                                unset($plugins[$cle_min_min][$_btech][$_cle1]);
     829                                                $balise_commune = true;
     830                                                break;
     831                                        }
     832                                }
     833                                if (!$balise_commune) {
     834                                        $fusion[$_btech][$plugins[$cle_min_max]['compatibilite']][] = $_balise0;
     835                                        unset($fusion[$_btech][$_cle0]);
     836                                }
     837                                if (!isset($fusion[$_btech][0]))
     838                                        $fusion[$_btech][0] = array();
     839                        }
     840
     841                        // On traite maintenant les balises restantes du deuxieme tableau
     842                        if ($plugins[$cle_min_min][$_btech]) {
     843                                foreach ($plugins[$cle_min_min][$_btech] as $_balise2) {
     844                                        $fusion[$_btech][$plugins[$cle_min_min]['compatibilite']][] = $_balise2;
     845                                }
     846                        }
     847                }
     848        }
     849
     850        return $fusion;
     851}
     852
     853
     854function balise_identique($balise1, $balise2) {
     855        if (is_array($balise1)) {
     856                foreach ($balise1 as $_attribut1 => $_valeur1){
     857                        if (!array_key_exists($_attribut1, $balise2))
     858                                return false;
     859                        else
     860                                if ($_valeur1 != $balise2[$_attribut1])
     861                                        return false;
     862                }
     863                return true;
     864        }
     865        else
     866                return ($balise1 == $balise2);
     867}
     868
    766869?>
  • _plugins_/plugonet/plugonet_options.php

    r53691 r54402  
    3232define('_PLUGONET_VERSION_SPIP_MAX', '3.0.99');
    3333
     34// Balises dites techniques contenues dans le fichier plugin.xml
     35$GLOBALS['balises_techniques_plugin'] = array(
     36        'menu', 'chemin', 'lib', 'necessite', 'onglet', 'procure', 'pipeline', 'utilise',
     37        'options', 'fonctions', 'install');
     38
    3439?>
Note: See TracChangeset for help on using the changeset viewer.