Skip to content
Extraits de code Groupes Projets
Valider f9b2879e rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Ticket #3819 : Permettre d'indiquer comme dépendance d'un plugin une extension PHP particulière.

Pour cela, comme on le fait déjà pour la version de PHP, on ajoute chaqque extension PHP chargée
dans les éléments procurés par le simili plugin 'SPIP', sous la clé "php:{nom de l'extension}".

Ainsi il est possible d'écrire dans un paquet.xml :

```
<necessite nom="php:curl" />
<necessite nom="php:xdebug" compatibilite="[2.0.0;]" />
```

Attention certaines extensions n'ont pas de numéro de version. Vérifier avec `php_version('nom extension')`.

Il faut adapter les messages de langue cependant pour éviter de dire qu'un plugin PHP:CURL est absent,
et du coup il y a quelques chaînes de langues en plus.

Il va falloir également adapter les chaînes de langue du plugin SVP.
parent faf80b02
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -646,9 +646,30 @@ function plugin_controler_necessite($liste, $nom, $intervalle, $balise) { ...@@ -646,9 +646,30 @@ function plugin_controler_necessite($liste, $nom, $intervalle, $balise) {
); );
} }
/**
* @param string $intervalle
* L'éventuelle intervalle de compatibilité de la dépendance. ex: [1.1.0;]
* @param string $version
* La version en cours active pour le plugin demandé (ou php ou extension php demandée)
* @param string $nom
* Le plugin (ou php ou extension php) qui est absent
* @param string $balise
* Le type de balise utilisé (necessite ou utilise)
* @return string
* Le message d'erreur.
*/
function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {
// prendre en compte les erreurs de dépendances à PHP
// ou à une extension PHP avec des messages d'erreurs dédiés.
$type = 'plugin';
if ($nom === 'PHP') {
$type = 'php';
} elseif (strncmp($nom, 'PHP:', 4) === 0) {
$type = 'extension_php';
list(,$nom) = explode(':', $nom, 2);
}
if (preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) { if (preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) {
$minimum = $regs[1]; $minimum = $regs[1];
$maximum = $regs[2]; $maximum = $regs[2];
...@@ -658,13 +679,13 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { ...@@ -658,13 +679,13 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {
if (strlen($minimum)) { if (strlen($minimum)) {
if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) { if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) {
return _T("plugin_${balise}_plugin", array( return _T("plugin_${balise}_${type}", array(
'plugin' => $nom, 'plugin' => $nom,
'version' => ' &ge; ' . $minimum 'version' => ' &ge; ' . $minimum
)); ));
} }
if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) { if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) {
return _T("plugin_${balise}_plugin", array( return _T("plugin_${balise}_${type}", array(
'plugin' => $nom, 'plugin' => $nom,
'version' => ' &gt; ' . $minimum 'version' => ' &gt; ' . $minimum
)); ));
...@@ -673,7 +694,7 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { ...@@ -673,7 +694,7 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {
if (strlen($maximum)) { if (strlen($maximum)) {
if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) { if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) {
return _T("plugin_${balise}_plugin", array( return _T("plugin_${balise}_${type}", array(
'plugin' => $nom, 'plugin' => $nom,
'version' => ' &le; ' . $maximum 'version' => ' &le; ' . $maximum
)); ));
...@@ -687,7 +708,10 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { ...@@ -687,7 +708,10 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {
} }
} }
return _T("plugin_necessite_plugin_sans_version", array('plugin' => $nom)); // note : il ne peut pas y avoir d'erreur sur
// - un 'utilise' sans version.
// - un 'php' sans version.
return _T("plugin_necessite_${type}_sans_version", array('plugin' => $nom));
} }
......
...@@ -677,8 +677,11 @@ dans une couleur qui indique leur état :', ...@@ -677,8 +677,11 @@ dans une couleur qui indique leur état :',
'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@',
'plugin_info_upgrade_ok' => 'Mise à jour réussie', 'plugin_info_upgrade_ok' => 'Mise à jour réussie',
'plugin_librairies_installees' => 'Librairies installées', 'plugin_librairies_installees' => 'Librairies installées',
'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.',
'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@',
'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.',
'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.',
'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@',
'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@',
'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.',
'plugin_source' => 'source : ', 'plugin_source' => 'source : ',
...@@ -686,6 +689,8 @@ dans une couleur qui indique leur état :', ...@@ -686,6 +689,8 @@ dans une couleur qui indique leur état :',
'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins',
'plugin_titre_installation' => 'Installation du plugin @plugin@', 'plugin_titre_installation' => 'Installation du plugin @plugin@',
'plugin_titre_modifier' => 'Mes plugins', 'plugin_titre_modifier' => 'Mes plugins',
'plugin_utilise_extension_php' => 'Utilise l’extension PHP @plugin@ en version @version@.',
'plugin_utilise_php' => 'Utilise @plugin@ en version @version@.',
'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.', 'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.',
'plugin_zip_active' => 'Continuez pour l’activer', 'plugin_zip_active' => 'Continuez pour l’activer',
'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.',
......
...@@ -124,8 +124,12 @@ function plugins_get_infos_un($plug, $reload, $dir, &$cache) { ...@@ -124,8 +124,12 @@ function plugins_get_infos_un($plug, $reload, $dir, &$cache) {
$ret['md5_file'] = $md5; $ret['md5_file'] = $md5;
// Si on lit le paquet.xml de SPIP, on rajoute un procure php afin que les plugins puissent // Si on lit le paquet.xml de SPIP, on rajoute un procure php afin que les plugins puissent
// utiliser un necessite php. SPIP procure donc la version php courante du serveur. // utiliser un necessite php. SPIP procure donc la version php courante du serveur.
// chaque librairie php est aussi procurée, par exemple 'php:curl'.
if (isset($ret['prefix']) and $ret['prefix'] == 'spip') { if (isset($ret['prefix']) and $ret['prefix'] == 'spip') {
$ret['procure']['php'] = array('nom' => 'php', 'version' => phpversion()); $ret['procure']['php'] = array('nom' => 'php', 'version' => phpversion());
foreach (get_loaded_extensions() as $ext) {
$ret['procure']['php:' . $ext] = array('nom' => 'php:' . $ext, 'version' => phpversion($ext));
}
} }
$diff = ($ret != $pcache); $diff = ($ret != $pcache);
......
...@@ -238,8 +238,8 @@ class ValidateurXML { ...@@ -238,8 +238,8 @@ class ValidateurXML {
. _T('zxml_vide_balise')); . _T('zxml_vide_balise'));
} }
} else { } else {
$f = $this->fratrie[substr($depth, 2)]; $f = isset($this->fratrie[substr($depth, 2)]) ? $this->fratrie[substr($depth, 2)] : null;
if (!preg_match($regle, $f)) { if (is_null($f) or !preg_match($regle, $f)) {
coordonnees_erreur($this, coordonnees_erreur($this,
" <p>\n<b>$name</b> " " <p>\n<b>$name</b> "
. _T('zxml_succession_fils_incorrecte') . _T('zxml_succession_fils_incorrecte')
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter