Valider 5754c59a rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Corriger le défaut principal d'ergonomie du panneau plugin :

Distinguer l'etat selectionné et l'etat actif des plugins.
On peut selectionner un plugin qui n'est pas activé pour des raisons de dépendance.
Dans ce cas il reste tout de même dans la liste principale du premier panneau, avec une erreur (tant que ne le deselectionne pas).
Il suffit alors de selectionner en plus le plugin manquant pour que tous soient activés.

Pour ce faire, on stocke dans une meta les plugins qui avaient été selectionnés mais n'ont pas pu être activés, pour les représenter tels quels. 
+ quelques amenagement de fonctions pour faciliter cela.

A noter qu'on modifie la signature des fonctions afficher_liste et afficher_plugin pour pouvoir leur passer un etat "selectionné" en plus de l'état "actif"
parent 10053da6
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+16 −32
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,6 +42,9 @@ function admin_plug_args($quoi, $erreur, $format)
{
	if (!$quoi) $quoi = 'actifs';
	// empecher l'affichage des erreurs dans le bandeau, on le donne ensuite
	// format brut par plugin
	$GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false);
	// format resume mis en forme
	$erreur_activation = plugin_donne_erreurs();
	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
@@ -68,26 +71,22 @@ function admin_plug_args($quoi, $erreur, $format)
	}

	// la mise a jour de cette meta a ete faite par ecrire_plugin_actifs
	$actifs = $lcpa = unserialize($GLOBALS['meta']['plugin']);
	$actifs = unserialize($GLOBALS['meta']['plugin']);
	$lcpa = $actifs + unserialize($GLOBALS['meta']['plugin_attente']);

	// Les affichages se basent sur le repertoire, pas sur le nom
	foreach ($actifs as $prefix => $infos)
	  $actifs[$prefix] = $infos['dir'];
	foreach ($lcpa as $prefix => $infos) {
	  if ($infos['dir_type'] == '_DIR_PLUGINS')
	    $lcpa[$prefix] = $infos['dir'];
	  else unset($lcpa[$prefix]);
	}
	$actifs = liste_chemin_plugin($actifs, '');
	$lcpa = liste_chemin_plugin($lcpa);
	
	// on installe les plugins maintenant,
	// cela permet aux scripts d'install de faire des affichages (moches...)
	plugin_installes_meta();

	$lpf = liste_plugin_files();

	echo "<div class='liste-plugins formulaire_spip'>";
	echo debut_cadre_trait_couleur('plugin-24.gif',true,'',_T('plugins_liste'), 'plugins');

	if ($quoi!=='actifs'){
		$lpf = liste_plugin_files();
		if ($lpf)
			echo "<p>"._T('texte_presente_plugin')."</p>";
		else {
@@ -95,28 +94,13 @@ function admin_plug_args($quoi, $erreur, $format)
				echo  "<p>"._T('plugin_info_automatique_ftp',array('rep'=>joli_repertoire(_DIR_PLUGINS)))
							. " &mdash; "._T('plugin_info_automatique_creer')."</p>";
		}
		$lcpaffiche = $lpf;
	}

	else {
		// la liste
	if ($quoi=='actifs'){
		// $quoi=='actifs'
		$lcpaffiche = $lcpa;
	}
	elseif ($quoi=='tous')
		$lcpaffiche = $lpf;
	else {
		$dir_auto = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS));
		$lcpaffiche = array();
		$plugins_interessants = @array_keys(unserialize($GLOBALS['meta']['plugins_interessants']));
		if (!is_array($plugins_interessants))
		  $plugins_interessants = array();

		foreach ($lpf as $f)
			if (!strpos($f, '/')
			OR ($dir_auto AND substr($f, 0, strlen($dir_auto)) == $dir_auto)
			OR in_array($f, $lcpa)
			OR in_array($f, $plugins_interessants))
				$lcpaffiche[] = $f;
	}

	if ($quoi=='actifs' OR $lpf)
		echo "<h3>".sinon(singulier_ou_pluriel(count($lcpa), 'plugins_actif_un', 'plugins_actifs', 'count'), _T('plugins_actif_aucun'))."</h3>";
@@ -127,7 +111,7 @@ function admin_plug_args($quoi, $erreur, $format)
		$format = 'repertoires';

	$afficher = charger_fonction("afficher_$format",'plugins');
	$corps = $afficher(self(),$lcpaffiche, $lcpa);
	$corps = $afficher(self(),$lcpaffiche, $lcpa, $actifs);
	if ($corps)
	  $corps .= "\n<br />\n<div class='boutons' style='display:none;'>"
	    .  "<input type='submit' class='submit save' value='"._T('bouton_enregistrer')
@@ -183,7 +167,7 @@ function affiche_les_extensions($actifs)
	if ((!$liste = liste_plugin_files(_DIR_EXTENSIONS))) return '';

	$afficher = charger_fonction("afficher_liste",'plugins');
	$liste = $afficher(self(), $liste, $actifs, _DIR_EXTENSIONS);
	$liste = $afficher(self(), $liste, array(), $actifs, _DIR_EXTENSIONS);

	return 
		"<div id='extensions'>"
+39 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -149,18 +149,20 @@ function plugin_valide_resume(&$liste, $plug, $infos, $dir)
}

/**
 * Liste les chemins vers les plugins actifs du dossier fourni en argument
 * a partir d'une liste d'elelements construits par plugin_valide_resume
 * extrait les chemins d'une liste de plugin
 * selectionne au passage ceux qui sont dans $dir_plugins uniquement
 * si valeur non vide
 * 
 * @param array $liste
 * @param string $dir_plugins
 * @return array
 */
// http://doc.spip.org/@liste_chemin_plugin_actifs
function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){
	include_spip('plugins/installer');
	$liste = liste_plugin_actifs();
function liste_chemin_plugin($liste, $dir_plugins=_DIR_PLUGINS){
	foreach ($liste as $prefix=>$infos) {
		if (defined($infos['dir_type']) 
		AND constant($infos['dir_type'])==$dir_plugins)
		if (!$dir_plugins
			OR (
				defined($infos['dir_type'])
		    AND constant($infos['dir_type'])==$dir_plugins))
			$liste[$prefix] = $infos['dir'];
		else
			unset($liste[$prefix]);
@@ -168,6 +170,18 @@ function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){
	return $liste;
}

/**
 * Liste les chemins vers les plugins actifs du dossier fourni en argument
 * a partir d'une liste d'elelements construits par plugin_valide_resume
 *
 * @return array
 */
// http://doc.spip.org/@liste_chemin_plugin_actifs
function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){
	include_spip('plugins/installer');
	return liste_chemin_plugin(liste_plugin_actifs(), $dir_plugins);
}

// Pour tester utilise, il faut connaitre tous les plugins 
// qui seront forcement pas la a la fin,
// car absent de la liste des plugins actifs.
@@ -242,18 +256,19 @@ function plugins_erreurs($liste_non_classee, $liste, $infos, $msg=array())
	ecrire_meta('plugin_erreur_activation',	serialize($erreurs));
}

function plugin_donne_erreurs() {
	if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) return '';
function plugin_donne_erreurs($raw=false, $raz=true) {
	if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) return $raw?array():'';
	$list = @unserialize($GLOBALS['meta']['plugin_erreur_activation']);
	// Compat ancienne version
	if (!$list)
	  $list = $GLOBALS['meta']['plugin_erreur_activation'];
	else {
	  $list = $raw?array():$GLOBALS['meta']['plugin_erreur_activation'];
	elseif(!$raw) {
	  foreach($list as $plug => $msg)
	    $list[$plug] = "<li>" . _T('plugin_impossible_activer', array('plugin' => $plug))
		  . "<ul><li>" . implode("</li><li>", $msg) . "</li></ul></li>";
	  $list ="<ul>" . join("\n", $list) . "</ul>";
	}
	if ($raz)
		effacer_meta('plugin_erreur_activation');
	return $list;
}
@@ -304,7 +319,14 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') {
	sous_repertoire(_DIR_CACHE, '', false,true);
	if (!spip_connect()) return false;
	if ($operation!='raz') {
		$plugin_valides = array_intersect(liste_chemin_plugin_actifs(),liste_plugin_files());
		$plugin_valides = liste_chemin_plugin_actifs();
		// si des plugins sont en attentes (coches mais impossible a activer)
		// on les reinjecte ici
		if (isset($GLOBALS['meta']['plugin_attente'])
		  AND $a = unserialize($GLOBALS['meta']['plugin_attente']))
		$plugin_valides = $plugin_valides + liste_chemin_plugin($a);

		$plugin_valides = array_intersect($plugin_valides,liste_plugin_files());
		if ($operation=='ajoute')
			$plugin = array_merge($plugin_valides,$plugin);
		elseif ($operation=='enleve')
@@ -336,6 +358,8 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') {

	effacer_meta('message_crash_plugins');
	ecrire_meta('plugin',serialize($plugin_valides));
	$liste = array_diff_assoc($liste,$plugin_valides);
	ecrire_meta('plugin_attente',serialize($liste));
	ecrire_meta('plugin_header',substr(strtolower(implode(",",$header)),0,900));
	// generer charger_plugins_chemin.php
	plugins_precompile_chemin($plugin_valides, $ordre);
+11 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/charsets');

// http://doc.spip.org/@affiche_liste_plugins
function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_actifs, $dir_plugins=_DIR_PLUGINS,$afficher_un = 'afficher_plugin'){
function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_checked, $liste_plugins_actifs, $dir_plugins=_DIR_PLUGINS,$afficher_un = 'afficher_plugin'){
	$get_infos = charger_fonction('get_infos','plugins');
	$ligne_plug = charger_fonction($afficher_un,'plugins');

@@ -27,7 +27,13 @@ function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_ac
	$exposed = urldecode(_request('plugin'));

	$block_par_lettre = false;//count($liste_plugins)>10;
	$fast_liste_plugins_actifs = array();
	$fast_liste_plugins_checked = array();
	if (is_array($liste_plugins_actifs))
		$fast_liste_plugins_actifs = array_flip($liste_plugins_actifs);
	if (is_array($liste_plugins_checked))
		$fast_liste_plugins_checked = array_flip($liste_plugins_checked);

	$res = '';
	$block = '';
	$initiale = '';
@@ -40,10 +46,11 @@ function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_ac
			$block_actif = false;
		}
		// le rep suivant
		$actif = @isset($fast_liste_plugins_actifs[$plug]);
		$actif = isset($fast_liste_plugins_actifs[$plug]);
		$checked = isset($fast_liste_plugins_checked[$plug]);
		$block_actif = $block_actif | $actif;
		$expose = ($exposed AND ($exposed==$plug OR $exposed==$dir_plugins . $plug OR $exposed==substr($dir_plugins,strlen(_DIR_RACINE)) . $plug));
		$block .= $ligne_plug($url_page, $plug, $actif, $expose, "item", $dir_plugins)."\n";
		$block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, "item", $dir_plugins)."\n";
	}
	$res .= $block_par_lettre ? affiche_block_initiale($initiale,$block,$block_actif): $block;
	$class = basename($dir_plugins);
+11 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -16,7 +16,7 @@ include_spip('inc/texte');
include_spip('inc/plugin'); // pour plugin_est_installe

// http://doc.spip.org/@ligne_plug
function plugins_afficher_plugin_dist($url_page, $plug_file, $actif, $expose=false, $class_li="item", $dir_plugins=_DIR_PLUGINS) {
function plugins_afficher_plugin_dist($url_page, $plug_file, $checked, $actif, $expose=false, $class_li="item", $dir_plugins=_DIR_PLUGINS) {

	static $id_input = 0;
	static $versions = array();
@@ -26,15 +26,23 @@ function plugins_afficher_plugin_dist($url_page, $plug_file, $actif, $expose=fal
	$info = $get_infos($plug_file, $force_reload, $dir_plugins);
	$prefix = $info['prefix'];
	$cfg = "";
	$checkable = ($dir_plugins!==_DIR_EXTENSIONS);

	if (!plugin_version_compatible($info['compatible'], $GLOBALS['spip_version_branche'])){
		$erreur = http_img_pack("plugin-dis-32.png",_T('plugin_info_non_compatible_spip')," class='picto_err'",_T('plugin_info_non_compatible_spip'));
		$class_li .= " disabled";
		$checkable = false;
	}
	elseif (isset($info['erreur'])) {
		$class_li .= " error";
		$erreur = http_img_pack("plugin-err-32.png",_T('plugin_info_erreur_xml')," class='picto_err'",_T('plugin_info_erreur_xml'))
		  . "<div class='erreur'>" . join('<br >', $info['erreur']) . "</div>";
		$checkable = false;
	}
	elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins.$plug_file])){
		$class_li .= " error";
		$erreur = http_img_pack("plugin-err-32.png",_T('plugin_impossible_activer', array('plugin' => $info['nom']))," class='picto_err'",_T('plugin_impossible_activer', array('plugin' => $info['nom'])))
		  . "<div class='erreur'>" . implode("<br />",$GLOBALS['erreurs_activation_raw'][$dir_plugins.$plug_file]) . "</div>";
	}
	else
		$cfg = $actif ? plugin_bouton_config($plug_file,$info,$dir_plugins) : "";
@@ -44,8 +52,8 @@ function plugins_afficher_plugin_dist($url_page, $plug_file, $actif, $expose=fal

	$class_li .= ($actif?" actif":"") . ($expose?" on":"");
	return "<li id='$prefix$id' class='$class_li'>"
	. (($erreur OR $dir_plugins===_DIR_EXTENSIONS)
	   ? '': plugin_checkbox(++$id_input, $plug_file, $actif))
	. ((!$checkable AND !$checked)
	   ? '': plugin_checkbox(++$id_input, $plug_file, $checked))
	.  plugin_resume($info, $dir_plugins, $plug_file, $url_page)
	. $cfg
	. $erreur
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -28,7 +28,7 @@
.liste-plugins .liste-items .item.actif:hover {background:#e8e8e8;}
.liste-plugins .liste-items .item.on {background:[#(#ENV{claire}|couleur_eclaircir)];}
.liste-plugins .liste-items .item.disabled {filter:alpha(opacity=60); -moz-opacity:0.6; opacity: 0.6;}
.liste-plugins .liste-items .item.error {margin:0;}
.liste-plugins .liste-items .item.error {margin:0;background-image:none;}

.liste-plugins .liste-items .item .resume {min-height:32px;}