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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+29 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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) {

	// 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)) {
		$minimum = $regs[1];
		$maximum = $regs[2];
@@ -658,13 +679,13 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {

		if (strlen($minimum)) {
			if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) {
				return _T("plugin_${balise}_plugin", array(
				return _T("plugin_${balise}_${type}", array(
					'plugin' => $nom,
					'version' => ' &ge; ' . $minimum
				));
			}
			if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) {
				return _T("plugin_${balise}_plugin", array(
				return _T("plugin_${balise}_${type}", array(
					'plugin' => $nom,
					'version' => ' &gt; ' . $minimum
				));
@@ -673,7 +694,7 @@ function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {

		if (strlen($maximum)) {
			if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) {
				return _T("plugin_${balise}_plugin", array(
				return _T("plugin_${balise}_${type}", array(
					'plugin' => $nom,
					'version' => ' &le; ' . $maximum
				));
@@ -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));
}


+5 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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_upgrade_ok' => 'Mise à jour réussie',
	'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_php' => 'Nécessite @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_spip' => 'Nécessite SPIP en version @version@ minimum.',
	'plugin_source' => 'source : ',
@@ -686,6 +689,8 @@ dans une couleur qui indique leur état :',
	'plugin_titre_automatique_ajouter' => 'Ajouter des plugins',
	'plugin_titre_installation' => 'Installation du plugin @plugin@',
	'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_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.',
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -124,8 +124,12 @@ function plugins_get_infos_un($plug, $reload, $dir, &$cache) {
	$ret['md5_file'] = $md5;
	// 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.
	// chaque librairie php est aussi procurée, par exemple 'php:curl'.
	if (isset($ret['prefix']) and $ret['prefix'] == 'spip') {
		$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);

+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -238,8 +238,8 @@ class ValidateurXML {
						. _T('zxml_vide_balise'));
				}
			} else {
				$f = $this->fratrie[substr($depth, 2)];
				if (!preg_match($regle, $f)) {
				$f = isset($this->fratrie[substr($depth, 2)]) ? $this->fratrie[substr($depth, 2)] : null;
				if (is_null($f) or !preg_match($regle, $f)) {
					coordonnees_erreur($this,
						" <p>\n<b>$name</b> "
						. _T('zxml_succession_fils_incorrecte')