Exemple #1
0
function install_etape_4_dist()
{
    // creer le repertoire cache, qui sert partout !
    if (!@file_exists(_DIR_CACHE)) {
        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
    }
    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
    echo info_progression_etape(4, 'etape_', 'install/');
    echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>";
    echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>";
    // installer les extensions
    include_spip('inc/plugin');
    $afficher = charger_fonction("afficher_liste", 'plugins');
    echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin');
    plugin_installes_meta();
    // mettre a jour si necessaire l'adresse du site
    // securite si on arrive plus a se loger
    include_spip('inc/config');
    appliquer_adresse_site('');
    // aller a la derniere etape qui clos l'install et redirige
    $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive'));
    echo generer_form_ecrire('install', $suite);
    echo install_fin_html();
}
Exemple #2
0
/**
 * mise a jour des donnees si envoi via formulaire
 * 
 * @link http://doc.spip.org/@enregistre_modif_plugin 
 * @global array $GLOBALS['visiteur_session']
 * @global array $GLOBALS['meta']
 * @return void
 */
function enregistre_modif_plugin()
{
    include_spip('inc/plugin');
    // recuperer les plugins dans l'ordre des $_POST
    $test = array();
    foreach (liste_plugin_files() as $file) {
        $test['s' . substr(md5($file), 0, 16)] = $file;
    }
    $plugin = array();
    foreach ($_POST as $choix => $val) {
        if (isset($test[$choix]) && $val == 'O') {
            $plugin[] = $test[$choix];
        }
    }
    spip_log("Changement des plugins actifs par l'auteur " . $GLOBALS['visiteur_session']['id_auteur'] . ": " . join(',', $plugin));
    ecrire_plugin_actifs($plugin);
    // Chaque fois que l'on valide des plugins, on memorise la liste de ces plugins comme etant "interessants", avec un score initial, qui sera decremente a chaque tour : ainsi un plugin active pourra reter visible a l'ecran, jusqu'a ce qu'il tombe dans l'oubli.
    $plugins_interessants = @unserialize($GLOBALS['meta']['plugins_interessants']);
    if (!is_array($plugins_interessants)) {
        $plugins_interessants = array();
    }
    $plugins_interessants2 = array();
    foreach ($plugins_interessants as $plug => $score) {
        if ($score > 1) {
            $plugins_interessants2[$plug] = $score - 1;
        }
    }
    foreach ($plugin as $plug) {
        $plugins_interessants2[$plug] = 10;
    }
    // score initial
    ecrire_meta('plugins_interessants', serialize($plugins_interessants2));
}
function install_etape_4_dist()
{
    // creer le repertoire cache, qui sert partout !
    if (!@file_exists(_DIR_CACHE)) {
        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
    }
    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
    echo info_progression_etape(4, 'etape_', 'install/');
    echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>";
    echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>";
    // installer les extensions
    include_spip('inc/plugin');
    $afficher = charger_fonction("afficher_liste", 'plugins');
    echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin');
    // si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape
    // car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour)
    // au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin
    // et procede alors a l'installation
    if (!isset($GLOBALS['meta']['version_installee']) or $GLOBALS['spip_version_base'] == str_replace(',', '.', $GLOBALS['meta']['version_installee'])) {
        plugin_installes_meta();
    }
    // mettre a jour si necessaire l'adresse du site
    // securite si on arrive plus a se loger
    include_spip('inc/config');
    appliquer_adresse_site('');
    // aller a la derniere etape qui clos l'install et redirige
    $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive'));
    echo generer_form_ecrire('install', $suite);
    echo install_fin_html();
}
Exemple #4
0
/**
 * Calcule la description de chaque paquet local
 *
 * Les paquets peuvent être stockés à 3 endroits :
 * plugins, plugins-dist, plugins-supp définis par les constantes respectives
 * _DIR_PLUGINS, _DIR_PLUGINS_DIST, _DIR_PLUGINS_SUPP
 *
 * @param array $erreurs_xml
 *     Les erreurs XML éventuelles des paquet.xml se retrouvent dedans s'il y en a
 * @return array
 *     Descriptions des paquets (intégrant un hash), stockés par
 *     constante, puis par chemin.
 *     array[_DIR_PLUGIN*][$chemin] = description
**/
function svp_descriptions_paquets_locaux(&$erreurs_xml = array())
{
    include_spip('inc/plugin');
    liste_plugin_files(_DIR_PLUGINS);
    liste_plugin_files(_DIR_PLUGINS_DIST);
    $get_infos = charger_fonction('get_infos', 'plugins');
    $paquets_locaux = array('_DIR_PLUGINS' => $get_infos(array(), false, _DIR_PLUGINS), '_DIR_PLUGINS_DIST' => $get_infos(array(), false, _DIR_PLUGINS_DIST));
    if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
        liste_plugin_files(_DIR_PLUGINS_SUPPL);
        $paquets_locaux['_DIR_PLUGINS_SUPPL'] = $get_infos(array(), false, _DIR_PLUGINS_SUPPL);
    }
    // creer la liste des signatures
    foreach ($paquets_locaux as $const_dir => $paquets) {
        foreach ($paquets as $chemin => $paquet) {
            // on propose le paquet uniquement s'il n'y a pas eu d'erreur de lecture XML bloquante
            if (!isset($paquet['erreur'])) {
                $paquets_locaux[$const_dir][$chemin]['signature'] = md5($const_dir . $chemin . serialize($paquet));
            } else {
                // Erreur XML !
                unset($paquets_locaux[$const_dir][$chemin]);
                spip_log("Impossible de lire la description XML de {$chemin} . Erreurs :", 'svp.' . _LOG_ERREUR);
                spip_log($paquet['erreur'], 'svp.' . _LOG_ERREUR);
                $erreurs_xml[] = $paquet['erreur'][0];
            }
        }
    }
    return $paquets_locaux;
}
Exemple #5
0
function zengarden_charge_themes($dir = _DIR_THEMES, $tous = false, $force = false)
{
    $themes = array();
    include_spip('inc/plugin');
    $files = liste_plugin_files($dir);
    if (count($files)) {
        $get_infos = charger_fonction('get_infos', 'plugins');
        $t = $get_infos($files, $force, $dir);
        $themes = array();
        foreach ($files as $d) {
            if (isset($t[$d])) {
                if (isset($t[$d]['categorie']) and $t[$d]['categorie'] == 'theme' and ($tous or $t[$d]['etat'] == 'stable')) {
                    $t[$d]['tri'] = strtolower(basename($d));
                    $themes[substr($dir . $d, strlen(_DIR_RACINE))] = $t[$d];
                }
            }
            unset($t[$d]);
        }
    }
    return $themes;
}
Exemple #6
0
function install_etape_4_dist()
{

	// creer le repertoire cache, qui sert partout !
	if(!@file_exists(_DIR_CACHE)) {
		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
		$rep = sous_repertoire(_DIR_TMP, $rep, true,true);
	}


	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
	echo info_progression_etape(4,'etape_','install/');

	echo "<p>"
			._L('Les extensions ci-dessous sont charg&#233;es et activ&#233;es dans le r&#233;pertoire @extensions@.', array('extensions' => joli_repertoire(_DIR_EXTENSIONS)))
			."</p>";

	// installer les extensions
	include_spip('inc/plugin');
	$afficher = charger_fonction("afficher_liste",'plugins');
	echo $afficher(self(), liste_plugin_files(_DIR_EXTENSIONS),array(), _DIR_EXTENSIONS,'afficher_nom_plugin');

	installe_plugins();

	echo info_etape(_T('info_derniere_etape'),
			_T('info_utilisation_spip')
	);

	// mettre a jour si necessaire l'adresse du site
	// securite si on arrive plus a se loger
	include_spip('inc/config');
	$_POST['adresse_site'] = '';
	appliquer_modifs_config();

	// aller a la derniere etape qui clos l'install et redirige
	$suite =  "\n<input type='hidden' name='etape' value='fin' />"
	  . bouton_suivant(_T('login_espace_prive'));

	echo generer_form_ecrire('install', $suite);	echo install_fin_html();
}
Exemple #7
0
/**
 * Crée le code HTML de la liste des plugins verrouillés
 *
 * @uses liste_plugin_files()
 * 
 * @param array $actifs
 *     Liste des plugins actifs
 * @return string
 *     Code HTML
**/
function affiche_les_plugins_verrouilles($actifs)
{
    if (!($liste = liste_plugin_files(_DIR_PLUGINS_DIST))) {
        return '';
    }
    $afficher = charger_fonction("afficher_liste", 'plugins');
    $liste = $afficher(self(), $liste, array(), $actifs, _DIR_PLUGINS_DIST);
    return "<div id='plugins_dist'>" . debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist') . "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST))) . '<br />' . _T('plugin_info_plugins_dist_2') . "</p>" . $liste . fin_cadre_trait_couleur(true) . "</div>\n";
}
Exemple #8
0
/**
 * Construire la liste des infos strictement necessaires aux plugins a activer
 * afin de les memoriser dans une meta pas trop grosse
 * http://code.spip.net/@liste_plugin_valides
 *
 * @param array $liste_plug
 * @param bool $force
 * @return array
 */
function liste_plugin_valides($liste_plug, $force = false)
{
    $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST);
    $get_infos = charger_fonction('get_infos', 'plugins');
    $infos = array('_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST), '_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS));
    // creer une premiere liste non ordonnee mais qui ne retient
    // que les plugins valides, et dans leur derniere version en cas de doublon
    $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT);
    $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche'];
    $infos['_DIR_RESTREINT']['SPIP']['chemin'] = array();
    $liste_non_classee = array('SPIP' => array('nom' => 'SPIP', 'etat' => 'stable', 'version' => $GLOBALS['spip_version_branche'], 'dir_type' => '_DIR_RESTREINT', 'dir' => ''));
    foreach ($liste_ext as $plug) {
        if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) {
            plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
        }
    }
    foreach ($liste_plug as $plug) {
        if (isset($infos['_DIR_PLUGINS'][$plug])) {
            plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
        }
    }
    if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
        $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL);
        foreach ($liste_plug as $plug) {
            if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) {
                plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL');
            }
        }
    }
    plugin_fixer_procure($liste_non_classee, $infos);
    return array($infos, $liste_non_classee);
}
Exemple #9
0
function liste_plugin_valides($liste_plug, $force = false)
{
    $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST);
    $get_infos = charger_fonction('get_infos', 'plugins');
    $infos = array('_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST), '_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS));
    // creer une premiere liste non ordonnee mais qui ne retient
    // que les plugins valides, et dans leur derniere version en cas de doublon
    $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT);
    $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche'];
    $infos['_DIR_RESTREINT']['SPIP']['chemin'] = array();
    $liste_non_classee = array('SPIP' => array('nom' => 'SPIP', 'etat' => 'stable', 'version' => $GLOBALS['spip_version_branche'], 'dir_type' => '_DIR_RESTREINT', 'dir' => ''));
    foreach ($liste_ext as $plug) {
        if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) {
            plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
        }
    }
    foreach ($liste_plug as $plug) {
        if (isset($infos['_DIR_PLUGINS'][$plug])) {
            plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
        }
    }
    if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
        $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL);
        foreach ($liste_plug as $plug) {
            if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) {
                plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL');
            }
        }
    }
    // les procure de core.xml sont consideres comme des plugins proposes,
    // mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer,
    // donc avec le meme prefixe)
    foreach ($infos['_DIR_RESTREINT']['']['procure'] as $procure) {
        $p = strtoupper($procure['nom']);
        if (!isset($liste_non_classee[$p])) {
            $procure['etat'] = '?';
            $procure['dir_type'] = '_DIR_RESTREINT';
            $procure['dir'] = $procure['nom'];
            $liste_non_classee[$p] = $procure;
            // on fournit une information minimale pour ne pas perturber la compilation
            $infos['_DIR_RESTREINT'][$procure['nom']] = array('prefix' => $procure['nom'], 'nom' => $procure['nom'], 'etat' => $procure['etat'], 'version' => $procure['version'], 'chemin' => array(), 'necessite' => array(), 'utilise' => array(), 'lib' => array(), 'menu' => array(), 'onglet' => array());
        }
    }
    return array($infos, $liste_non_classee);
}
Exemple #10
0
function actualise_plugins_actifs($pipe_recherche = false){
	if (!spip_connect()) return false;
	$plugin_actifs = liste_chemin_plugin_actifs();
	$plugin_liste = liste_plugin_files();
	$plugin_new = array_intersect($plugin_actifs,$plugin_liste);
	$actifs_avant = $GLOBALS['meta']['plugin'];
	ecrire_plugin_actifs($plugin_new,$pipe_recherche);
	// retourner -1 si la liste des plugins actifs a change
	return (strcmp($GLOBALS['meta']['plugin'],$actifs_avant)==0) ? 1 : -1;
}
function maj_auto_action_rapide() {
	global $spip_version_affichee, $spip_version_base;
	$arg_chargeur = $spip_version_base>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2
	$time = time();
	$timeout = ini_get('max_execution_time');
	$timeout = $timeout?min(30,floor($timeout/2)):10;
	$style = 'style="padding:0.4em;"';
	// verification des mises a jour de SPIP>=2.1
	include_spip('inc/presentation');
	list($m1,$m2) = preg_split('/\D+/', $GLOBALS['spip_version_branche']);
	$html1 = (function_exists('info_maj_spip') && ($html1=info_maj_spip()))
		?"<fieldset><legend $style>"._T('couteauprive:help2', array('version'=>'SPIP '.$spip_version_affichee)).'</legend>'.propre("\n|{{{$html1}}}|")
			.(preg_match(",$m1\.$m2\.\d+,",$html1)?'<p>'._T('couteau:maj_spip').'</p>':'').'</fieldset>'
		:'';
	// verification de l'ecran de securite
	if(defined('_ECRAN_SECURITE')) {
		$maj = maj_auto_rev_distante(_MAJ_ECRAN_SECU,false,",(\d+\.\d+(\.\d+)?),",0,true);
		if($maj{0}!="-" && _ECRAN_SECURITE!=$maj) {
			include_spip('inc/description_outil');
			$html1 .= "\n<fieldset><legend $style>"._T('couteauprive:help2', array('version'=>_T('couteauprive:ecran_securite:nom').' '._ECRAN_SECURITE)).'</legend>'
				. description_outil_liens(_T("couteauprive:ecran_maj_ko2", array("n"=>"<span style=\"color:red; font-weight:bold;\">$maj</span>"))).'</fieldset>';
		}
	}
	// verification des plugins
	include_spip('inc/plugin');
	$plugins_actifs = array_values(liste_chemin_plugin_actifs());
	// tous, mais les actifs d'abord...
	$plugins = array_unique(array_merge($plugins_actifs, liste_plugin_files()));
	$html_actifs = $html_inactifs = array();
	foreach ($plugins as $p) /*if(preg_match(',^auto/,', $p))*/ {
		$actif = in_array($p, $plugins_actifs, true);
		$auto = preg_match(',^auto/,', $p);
		$infos = plugin_get_infos_maj($p, $stop=time()-$time>$timeout);
		$maj_lib = $checked = '';
		if($stop)
			$maj_lib = '<span class="cs_relancer">'.'Temps serveur &eacute;coul&eacute; : [poursuivre->#].'.'</span>';
		elseif($infos['maj_dispo']) { 
			$maj_lib = _T('couteau:maj_rev_ok', 
				array('revision' => $infos['rev_rss'], 'url'=>$infos['url_origine'], 'zip'=>$infos['zip_trac']));
			$checked = " class='maj_checked'"; }
		elseif($infos['rev_rss']>0 && $infos['rev_local'])
			$maj_lib = _T('couteau:maj'.($infos['svn']?'_svn':'_ok'),
				array('zip'=>$infos['zip_trac'], 'url'=>$infos['url_origine']));
		elseif($auto) {
			$maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine']));
			$checked = " class='maj_checked'"; }
		elseif($infos['rev_local'] && $infos['rev_rss']<=0)
			$maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine']));
		// eventuels liens morts
		$maj_lib = preg_replace(',\[([^[]+)->\],', '$1', $maj_lib);
		$nom = preg_replace(",[\n\r]+,",' ',$infos['nom']). '&nbsp;(v' .$infos['version'] . ')' . ($maj_lib?"\n_ {{".$maj_lib.'}}':'');
		$rev = $infos['rev_local']?_T('couteau:maj_rev', array('revision' => $infos['rev_local'])):'';
		if(strlen($infos['commit'])) $rev .= (strlen($rev)?'<br/>':'') . cs_date_court($infos['commit']);
		if($infos['svn']) $rev .= '<br/>SVN';		
		if(!strlen($rev)) $rev = '&nbsp;';
		$zip_log = (strlen($infos['zip_log']) && $infos['zip_log']!=$infos['zip_trac'])
			?"<label><input type='radio' value='$infos[zip_log]'$checked name='$arg_chargeur'/>[->$infos[zip_log]]</label>":'';
		$bouton = '&nbsp;';
		if($auto && !$stop) $bouton = strlen($infos['zip_trac'])
			?"<input type='radio' value='$infos[zip_trac]'$checked name='$arg_chargeur'/>"
			:'<center style="margin-top:0.6em;font-weight:bold;"><acronym title="'._T('couteau:maj_zip_ko').'">&#63;</acronym></center>';
		if(strlen($zip_log)) {
			if (!$stop)
				$nom .= "\n_ "._T('couteau:maj_verif') . "\n_ $zip_log\n_ {$bouton}[->$infos[zip_trac]]<label>";
			$bouton = '&nbsp;';
		}
		${$actif?'html_actifs':'html_inactifs'}[] = "|$bouton|$nom|$rev|";
	}
	
	$html1 = "\n<div $style id='maj_auto_div'>$html1<fieldset><legend $style>"
		. _T('couteau:maj_liste').'</legend>'
		. propre(
			(count($html_actifs)? "\n|{{" . _T('couteau:plug_actifs') . "}}|<|<|\n" . join("\n",$html_actifs) . "\n" : '')
			. (count($html_inactifs)? "\n|{{" . _T('couteau:plug_inactifs') . "}}|<|<|\n" . join("\n",$html_inactifs) . "\n" : '')
		  )
		. "<div style='text-align: right;'><input class='fondo' type='submit' value=\""
		. attribut_html(_T('couteau:maj_maj'))
		. '" /><p><i>'._T('couteau:maj_verif2').'</i></p></div></fieldset></div>'
		. http_script("
jQuery(document).ready(function() {
	var ch = jQuery('#maj_auto_div .maj_checked');
	var re = jQuery('.cs_relancer a');
	if(ch.length) ch[0].checked = true;
	else if(!re.length){
		jQuery('#maj_auto_div :submit').parent().remove();
		jQuery('#maj_auto_div :radio').attr('disabled','disabled');
	}
	if(!jQuery('#maj_auto_div :radio:checked').length)
		jQuery('#maj_auto_div :radio:first')[0].checked = true;
	re.click(function() {
		cs_href_click(jQuery('#maj_auto')[0], true);
		return false;
	});
});");
	$html2 = "\n<div class='cs_sobre'><input class='cs_sobre' type='submit' value=\"["
		. attribut_html(_T('couteau:maj_actu'))	. ']" /></div>';

// premier formulaire non ajax, lancant directement charger_plugin
	return redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', "cmd=descrip&outil=maj_auto#cs_infos", $html1)
// second formulaire ajax : lien d'actualisation forcee
		. ajax_action_auteur('action_rapide', 'maj_auto_forcer', 'admin_couteau_suisse', "arg=maj_auto|description_outil&cmd=descrip#cs_action_rapide", $html2);
}
Exemple #12
0
function affiche_les_extensions($liste_plugins_actifs){
	$res = "";
	if ($liste_extensions = liste_plugin_files(_DIR_EXTENSIONS)) {
		$res .= "<div id='extensions'>";
		$res .= debut_cadre_trait_couleur('',true,'',_T('plugins_liste_extensions'),
		'liste_extensions');
		$res .= "<p>"
			._T('plugin_info_extension_1', array('extensions' => joli_repertoire(_DIR_EXTENSIONS)))
			. '<br />'. _T('plugin_info_extension_2')
			."</p>";

		$format = 'liste';
		$afficher = charger_fonction("afficher_$format",'plugins');
		$res .= $afficher(self(), $liste_extensions,$liste_plugins_actifs, _DIR_EXTENSIONS);

		$res .= fin_cadre_trait_couleur(true);
		$res .= "</div>\n";
	}
	return $res;
}