Valider ed1d00bf rédigé par Eric Lupinacci's avatar Eric Lupinacci
Parcourir les fichiers

Améliorer le message d'erreur de dépendances d'un plugin lors de son activation.

On distingue la balise necessite et utilise dans le message.
On donne l'erreur exacte sur la borne erronée.
parent 56ff2713
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+52 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -353,8 +353,8 @@ function plugins_erreurs($liste_non_classee, $liste, $infos, $msg=array())
		$k = $infos[$dir_type][$plug];
		$plug = constant($dir_type) . $plug;
		if (!isset($msg[$p])) {
		  if (!$msg[$p] = plugin_necessite($k['necessite'], $liste))
		    $msg[$p] = plugin_necessite($k['utilise'], $liste);
		  if (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite'))
		    $msg[$p] = plugin_necessite($k['utilise'], $liste, 'utilise');
		} else {
		  foreach($msg[$p] as $c => $l)
		    $msg[$p][$c] = plugin_controler_lib($l['nom'], $l['lien']);
@@ -394,11 +394,11 @@ function plugin_donne_erreurs($raw=false, $raz=true) {
 * 		Tableau des messages d'erreurs recus. Il sera vide si tout va bien.
 *
**/
function plugin_necessite($n, $liste) {
function plugin_necessite($n, $liste, $balise='necessite') {
	$msg = array();
	foreach($n as $need){
		$id = strtoupper($need['nom']);
		if ($r = plugin_controler_necessite($liste, $id, isset($need['compatibilite']) ? $need['compatibilite'] : '')) {
		if ($r = plugin_controler_necessite($liste, $id, isset($need['compatibilite']) ? $need['compatibilite'] : '', $balise)) {
			$msg[] = $r;
		}
	}
@@ -412,29 +412,64 @@ function plugin_necessite($n, $liste) {
 * 		Liste de description des plugins
 * @param $nom
 * 		Le plugin donc on cherche la presence
 * @param $version
 * @param $intervalle
 * 		L'éventuelle intervalle de compatibilité de la dependance. ex: [1.1.0;]
 * @param $balise
 * 		Permet de définir si on teste un utilise ou un necessite
 * @return string.
 * 		Vide si ok,
 * 		Message d'erreur lorsque la dependance est absente.
**/
function plugin_controler_necessite($liste, $nom, $version)
function plugin_controler_necessite($liste, $nom, $intervalle, $balise)
{
	if (isset($liste[$nom]) AND plugin_version_compatible($version,$liste[$nom]['version'])) {
    if (isset($liste[$nom]) AND plugin_version_compatible($intervalle,$liste[$nom]['version'])) {
   		return '';
   	}
	// retrouver le minimum
	if (preg_match(_EXTRAIRE_INTERVALLE, $version, $regs)) {
    return
        plugin_message_incompatibilite($intervalle, $liste[$nom]['version'], $nom, $balise);
}


function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) {

	if (preg_match(_EXTRAIRE_INTERVALLE,$intervalle,$regs)) {
        $minimum = $regs[1];
		if ($minimum) {
			return _T('plugin_necessite_plugin', array(
       	$maximum = $regs[2];

       	$minimum_inclus = $intervalle{0}=="[";
       	$maximum_inclus = substr($intervalle,-1)=="]";

		if (strlen($minimum)) {
			if ($minimum_inclus AND spip_version_compare($version,$minimum,'<')) {
				return _T("plugin_${balise}_plugin", array(
					'plugin' => $nom,
				'version' => $minimum));
					'version' => ' &ge; ' . $minimum));
			}
			if (!$minimum_inclus AND spip_version_compare($version,$minimum,'<=')) {
				return _T("plugin_${balise}_plugin", array(
					'plugin' => $nom,
					'version' => ' &gt; ' . $minimum));
			}
	return _T('plugin_necessite_plugin_sans_version', array('plugin' => $nom));
		}

		if (strlen($maximum)) {
			if ($maximum_inclus AND spip_version_compare($version,$maximum,'>')) {
				return _T("plugin_${balise}_plugin", array(
					'plugin' => $nom,
					'version' => ' &le; ' . $maximum));
			}
			if (!$maximum_inclus AND spip_version_compare($version,$maximum,'>=')) {
				return _T("plugin_${balise}_plugin", array(
					'plugin' => $nom,
					'version' => ' &lt; ' . $maximum));
			}
		}
	}

	return _T("plugin_necessite_plugin_sans_version", array('plugin' => $nom));
}


function plugin_controler_lib($lib, $url)
{
	/* Feature sortie du core, voir STP
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -670,7 +670,8 @@ dans une couleur qui indique leur état :',
	'plugin_info_upgrade_ok' => 'Mise à jour réussie',
	'plugin_librairies_installees' => 'Librairies installées',
	'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@',
	'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@ minimum.',
    'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.',
    'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.',
    'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@',
	'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.',
	'plugin_source' => 'source : ',