Browse Source

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
master v1.1.3
marcimat@rezo.net 6 years ago
parent
commit
11e63c35e9
  1. 53
      inc/svp_depoter_local.php
  2. 2
      paquet.xml
  3. 8
      plugins/preparer_sql_paquet.php
  4. 8
      plugins/preparer_sql_plugin.php

53
inc/svp_depoter_local.php

@ -136,7 +136,7 @@ function svp_base_modifier_paquets_locaux($paquets_locaux) {
include_spip('inc/svp_depoter_distant');
// On ne va modifier QUE les paquets locaux qui ont change
// Et cela en comparant les md5 des informations fouries.
// Et cela en comparant les md5 des informations fournies.
$signatures = array();
// recuperer toutes les signatures
@ -252,6 +252,12 @@ function svp_base_inserer_paquets_locaux($paquets_locaux) {
$paquet['description'] = (isset($multis['description'])) ? $multis['description'] : '';
}
// On met les neccesite, utilise, procure, dans la clé 0
// pour être homogène avec le résultat d'une extraction de paquet xml
// dans une source d'archives. cf svp_phraser_plugin()
$paquet = svp_adapter_structure_dependances($paquet);
$le_paquet = $paquet_base;
#$le_paquet['traductions'] = serialize($paquet['traductions']);
@ -361,23 +367,6 @@ function svp_base_inserer_paquets_locaux($paquets_locaux) {
foreach ($insert_paquets as $c => $p) {
$insert_paquets[$c]['id_plugin'] = $cle_plugins[$p['prefixe']];
$id_plugin_concernes[$insert_paquets[$c]['id_plugin']] = true;
// remettre les necessite, utilise, librairie dans la cle 0
// comme SVP
if ($dep = unserialize($insert_paquets[$c]['dependances']) and is_array($dep)) {
foreach ($dep as $d => $contenu) {
if ($contenu) {
$new = array();
foreach ($contenu as $n) {
unset($n['id']);
$new[strtolower($n['nom'])] = $n;
}
$dep[$d] = array($new);
}
}
$insert_paquets[$c]['dependances'] = serialize($dep);
}
}
sql_insertq_multi('spip_paquets', $insert_paquets);
@ -387,6 +376,34 @@ function svp_base_inserer_paquets_locaux($paquets_locaux) {
}
/**
* Adapte la structure des dépendances d'un paquet xml lu par SPIP
* à une structure attendue par SVP.
*
* C'est à dire, met les necessite, utilises, lib, procure dans une sous clé 0
*
* @note
* Cette clé 0 indique la description principale du paquet.xml
* mais d'autres clés semblent pouvoir si la balise `<spip>` est présente dedans
*
* @see svp_phraser_plugin() côté SVP
* @see plugins_fusion_paquet() côté SVP
*
* @see plugins_get_infos_dist() côté SPIP (extractions de tous les paquets d'un dossier)
*
* @param array $paquet Description d'un paquet
* @return array Description d'un paquet adaptée
**/
function svp_adapter_structure_dependances($paquet) {
// mettre les necessite, utilise, librairie dans la cle 0
foreach (array('necessite', 'utilise', 'lib', 'procure') as $dep) {
if (!empty($paquet[$dep])) {
$paquet[$dep] = array($paquet[$dep]);
}
}
return $paquet;
}
/**
* Fait correspondre l'état des métas des plugins actifs & installés
* avec ceux en base de données dans spip_paquets pour le dépot local

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="svp"
categorie="maintenance"
version="1.1.2"
version="1.1.3"
etat="stable"
compatibilite="[3.2.0-dev;]"
logo="svp-64.png"

8
plugins/preparer_sql_paquet.php

@ -101,12 +101,14 @@ function plugins_preparer_sql_paquet($plugin) {
$dependances['utilise'] = $plugin['utilise'];
$champs['dependances'] = serialize($dependances);
// Calculer le champ 'procure' (tableau sérialisé prefixe => version)
$champs['procure'] = '';
if (isset($plugin['procure']) and $plugin['procure']) {
if (!empty($plugin['procure'][0])) {
$champs['procure'] = array();
foreach ($plugin['procure'] as $procure) {
foreach ($plugin['procure'][0] as $procure) {
$p = strtoupper($procure['nom']);
if (!isset($champs['procure'][$p])
if (
!isset($champs['procure'][$p])
or spip_version_compare($procure['version'], $champs['procure'][$p], '>')
) {
$champs['procure'][$p] = $procure['version'];

8
plugins/preparer_sql_plugin.php

@ -95,12 +95,14 @@ function plugins_preparer_sql_plugin($plugin) {
$dependances['utilise'] = $plugin['utilise'];
$champs['dependances'] = serialize($dependances);
// Calculer le champ 'procure' (tableau sérialisé prefixe => version)
$champs['procure'] = '';
if (isset($plugin['procure']) and $plugin['procure']) {
if (!empty($plugin['procure'][0])) {
$champs['procure'] = array();
foreach ($plugin['procure'] as $procure) {
foreach ($plugin['procure'][0] as $procure) {
$p = strtoupper($procure['nom']);
if (!isset($champs['procure'][$p])
if (
!isset($champs['procure'][$p])
or spip_version_compare($procure['version'], $champs['procure'][$p], '>')
) {
$champs['procure'][$p] = $procure['version'];

Loading…
Cancel
Save