Changeset 99161 in spip-zone


Ignore:
Timestamp:
Aug 14, 2016, 10:05:29 AM (3 years ago)
Author:
marcimat@…
Message:

Homogénéisation du tableau de description des dépendances (nécessite, librairie, utilise et procure)
qui dans certains cas étaient décrites dans un tableau intermédiaire d'index 0, et parfois non.

En fait SVP lorsqu'il analyse les paquet/plugin.xml présents dans une archivelist.xml met
ces informations de dépendances dans un index 0, et parfois en plus semble t'il dans un index
de compatibilité de version de spip SI la balise <spip> est présente dans le paquet/plugin.xml en question.

Cependant que lorsqu'on récupère les informations de paquet.xml présents dans plugins/ ou plugins-dist/
par la fonction prévue par SPIP, les informations de dépendances ne sont pas indéxées elles dans cette clé 0,
inutile d'ailleurs car on ne récupère que les infos correspondante à notre version de SPIP utilisée.

Pour harmoniser, un morceau de code était utilisé dans SVP, mais un peu tard. Cela faisait que
la fonction plugins_preparer_sql_paquet() recevait à l'ajout d'un dépot des paquets avec des dépendances utilisant la clé [0],
mais actualisait ensuite les paquets locaux sans cet index ensuite lors de l'appel à svp_actualiser_paquets_locaux().

Et l'ajout récent du code relatif à la balise <procure> montrait des notices PHP dans la fonction preparer_sql (avant ce
problème n'était pas visible).

En déplaçant un peu plus tôt le code qui harmonise tout dans l'index 0 et en ajoutant 'procure' au passage dedans, ce problème rentre dans l'ordre.

Je pense que cela pouvait entrainer des erreurs dans le calcul de l'ordre d'installation / désinstallation des plugins locaux.
En relation donc avec https://core.spip.net/issues/3689

Location:
_core_/plugins/svp
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/svp/inc/svp_depoter_local.php

    r93656 r99161  
    137137
    138138        // On ne va modifier QUE les paquets locaux qui ont change
    139         // Et cela en comparant les md5 des informations fouries.
     139        // Et cela en comparant les md5 des informations fournies.
    140140        $signatures = array();
    141141
     
    252252                                $paquet['description'] = (isset($multis['description'])) ? $multis['description'] : '';
    253253                        }
     254
     255                        // On met les neccesite, utilise, procure, dans la clé 0
     256                        // pour être homogène avec le résultat d'une extraction de paquet xml
     257                        // dans une source d'archives. cf svp_phraser_plugin()
     258                        $paquet = svp_adapter_structure_dependances($paquet);
     259
    254260
    255261                        $le_paquet = $paquet_base;
     
    362368                        $insert_paquets[$c]['id_plugin'] = $cle_plugins[$p['prefixe']];
    363369                        $id_plugin_concernes[$insert_paquets[$c]['id_plugin']] = true;
    364 
    365                         // remettre les necessite, utilise, librairie dans la cle 0
    366                         // comme SVP
    367                         if ($dep = unserialize($insert_paquets[$c]['dependances']) and is_array($dep)) {
    368                                 foreach ($dep as $d => $contenu) {
    369                                         if ($contenu) {
    370                                                 $new = array();
    371                                                 foreach ($contenu as $n) {
    372                                                         unset($n['id']);
    373                                                         $new[strtolower($n['nom'])] = $n;
    374                                                 }
    375                                                 $dep[$d] = array($new);
    376                                         }
    377                                 }
    378                                 $insert_paquets[$c]['dependances'] = serialize($dep);
    379                         }
    380 
    381370                }
    382371
     
    387376}
    388377
     378
     379/**
     380 * Adapte la structure des dépendances d'un paquet xml lu par SPIP
     381 * à une structure attendue par SVP.
     382 *
     383 * C'est à dire, met les necessite, utilises, lib, procure dans une sous clé 0
     384 *
     385 * @note
     386 *     Cette clé 0 indique la description principale du paquet.xml
     387 *     mais d'autres clés semblent pouvoir si la balise `<spip>` est présente dedans
     388 *
     389 * @see svp_phraser_plugin() côté SVP
     390 * @see plugins_fusion_paquet() côté SVP
     391 *
     392 * @see plugins_get_infos_dist() côté SPIP (extractions de tous les paquets d'un dossier)
     393 *
     394 * @param array $paquet Description d'un paquet
     395 * @return array Description d'un paquet adaptée
     396**/
     397function svp_adapter_structure_dependances($paquet) {
     398        // mettre les necessite, utilise, librairie dans la cle 0
     399        foreach (array('necessite', 'utilise', 'lib', 'procure') as $dep) {
     400                if (!empty($paquet[$dep])) {
     401                        $paquet[$dep] = array($paquet[$dep]);
     402                }
     403        }
     404        return $paquet;
     405}
    389406
    390407/**
  • _core_/plugins/svp/paquet.xml

    r96189 r99161  
    22        prefix="svp"
    33        categorie="maintenance"
    4         version="1.1.2"
     4        version="1.1.3"
    55        etat="stable"
    66        compatibilite="[3.2.0-dev;]"
  • _core_/plugins/svp/plugins/preparer_sql_paquet.php

    r93661 r99161  
    102102        $champs['dependances'] = serialize($dependances);
    103103
     104        // Calculer le champ 'procure' (tableau sérialisé prefixe => version)
    104105        $champs['procure'] = '';
    105         if (isset($plugin['procure']) and $plugin['procure']) {
     106        if (!empty($plugin['procure'][0])) {
    106107                $champs['procure'] = array();
    107                 foreach ($plugin['procure'] as $procure) {
     108                foreach ($plugin['procure'][0] as $procure) {
    108109                        $p = strtoupper($procure['nom']);
    109                         if (!isset($champs['procure'][$p])
     110                        if (
     111                                !isset($champs['procure'][$p])
    110112                                or spip_version_compare($procure['version'], $champs['procure'][$p], '>')
    111113                        ) {
  • _core_/plugins/svp/plugins/preparer_sql_plugin.php

    r93661 r99161  
    9696        $champs['dependances'] = serialize($dependances);
    9797
     98        // Calculer le champ 'procure' (tableau sérialisé prefixe => version)
    9899        $champs['procure'] = '';
    99         if (isset($plugin['procure']) and $plugin['procure']) {
     100        if (!empty($plugin['procure'][0])) {
    100101                $champs['procure'] = array();
    101                 foreach ($plugin['procure'] as $procure) {
     102                foreach ($plugin['procure'][0] as $procure) {
    102103                        $p = strtoupper($procure['nom']);
    103                         if (!isset($champs['procure'][$p])
     104                        if (
     105                                !isset($champs['procure'][$p])
    104106                                or spip_version_compare($procure['version'], $champs['procure'][$p], '>')
    105107                        ) {
Note: See TracChangeset for help on using the changeset viewer.