Beispiel #1
0
function exec_description_outil_dist() {
cs_log("INIT : exec_description_outil_dist() - Preparation du retour par Ajax (donnees transmises par GET)");
	$script = _request('script');
	$outil = _request('outil');
cs_log(" -- outil = $outil - script = $script");
	cs_minipres(!preg_match('/^\w+$/', $script));
	// ici on commence l'initialisation de tous les outils
	global $outils, $metas_vars, $metas_outils;
	include_spip('cout_utils');
	// remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici);
	include_spip('config_outils');
cs_log(" -- exec_description_outil_dist() - Appel de config_outils.php : nb_outils = ".count($outils));
	// installer les outils
	cs_installe_outils();

cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil, $script) :");
	include_spip('inc/cs_outils');
	$description_outil = charger_fonction('description_outil', 'inc');
	$descrip = cs_initialisation_d_un_outil($outil, $description_outil, true);
	cs_init_plugins();

cs_log(" FIN : exec_description_outil_dist() - Appel maintenant de ajax_retour() pour afficher la ligne de configuration de l'outil");	
	include_spip('inc/texte');
	include_spip('cout_fonctions'); // fonctions pour les pipelines
	ajax_retour(propre($descrip));
}
Beispiel #2
0
function description_outil2($outil_id) {
	if(!strlen($outil_id)) return _T('couteauprive:outils_cliquez');
	global $outils, $metas_vars, $metas_outils;
	include_spip('cout_utils');
	// remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici);
	include_spip('config_outils');
cs_log(" -- description_outil2($outil_id) - Appel de config_outils.php : nb_outils = ".count($outils));

cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil_id) :");
	$description_outil = charger_fonction('description_outil', 'inc');
	$descrip = cs_initialisation_d_un_outil($outil_id, $description_outil, true);

	include_spip('inc/presentation');
	include_spip('inc/texte');
	include_spip('public/parametrer'); // fonctions pour les pipelines

	$s = '<div class="cs-cadre">';

	$outil = $outils[$outil_id]; unset($outils);
	$actif = $outil['actif'];
	$puce = $actif?'puce-verte.gif':'puce-rouge.gif';
	$titre_etat = _T('couteauprive:outil_'.($actif?'actif':'inactif'));
	$nb_var = intval($outil['nb_variables']);

	// cette valeur par defaut n'est pas definie sous SPIP 1.92
	@define('_ID_WEBMESTRES', 1);
	if(!strlen($outil['id']) || !autoriser('configurer', 'outil', 0, NULL, $outil))
		return $s . _T('info_acces_interdit') . '</div>';

	$s .= "<h3 class='titrem'><img src='"._DIR_IMG_PACK."$puce' width='9' height='9' alt=\"$titre_etat\" title=\"$titre_etat\" />&nbsp;" . $outil['nom'] . '</h3>';
	$s .= '<div class="cs_menu_outil">';
	if($nb_var)
		$s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=reset&outil='.$outil_id).'" title="' . _T('couteauprive:par_defaut') . '">' . _T('couteauprive:par_defaut') . '</a>&nbsp;|&nbsp;';
	if(!$actif)
		$s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=hide&outil='.$outil_id).'" title="' . _T('couteauprive:outil_cacher') . '">' . _T('couteauprive:outil_cacher') . '</a>&nbsp;|&nbsp;';
	$act = $actif?'des':'';
	$s .= '<a href="'.generer_url_ecrire(_request('source'),'cmd=switch&outil='.$outil_id).'" title="'._T("couteauprive:outil_{$act}activer_le").'">'._T("couteauprive:outil_{$act}activer")."</a></div>";
	if(strlen($temp = cs_action_fichiers_distants($outil) . cs_action_rapide($outil_id, $actif))) 
		$s .= "<div class='cs_action_rapide' id='cs_action_rapide'>$temp</div>";
	$s .= propre($descrip);
	$serial = serialize(array_keys($outil));
	$p = '';
	if($b=cs_balises_traitees($outil_id, '*, #'))
		$p .=  '<p>' . _T('couteauprive:detail_balise_etoilee', array('bal' => $b.'*')) . '</p>';
	if($actif && isset($outil['code:spip_options']) && strlen($outil['code:spip_options']) && ($outil_id<>'cs_comportement'))
		$p .= '<p>' . _T('couteauprive:detail_spip_options'.(defined('_CS_SPIP_OPTIONS_OK')?'_ok':''), array('lien'=>description_outil_liens_callback(array(1=>'cs_comportement')))) . '</p>';
	if(isset($outil['jquery']) && $outil['jquery']=='oui')
		$p .= '<p>' . _T('couteauprive:detail_jquery2') . '</p>';
	if(isset($outil['auteur']) && strlen($outil['auteur']))
		$p .= '<p>' . _T('auteur') .' '. ($outil['auteur']) . '</p>';
	if(isset($outil['contrib']) && strlen($outil['contrib']))
		$p .= '<p>' . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.$outil['contrib'].']')) . '</p>';

	return $s . propre($p) . detail_outil($outil_id) . '</div>';
}
Beispiel #3
0
function exec_action_rapide_dist() {
	global $type_urls;
cs_log("INIT : exec_action_rapide_dist() - Preparation par Ajax (donnees transmises par GET)");
	// droits du Couteau Suisse
	cs_minipres();
	list($outil, $arg) = explode('|',_request('arg'),2);
	$script = _request('script');
cs_log(" -- script = $script - outil = $outil - arg = $arg");
	// verification du format de l'argument
	cs_minipres(!isset($arg));
	if(!strlen($arg)) $arg = 'retour_nul';
	cs_minipres(!preg_match('/^\w+$/', $script));

	switch ($arg) {
		// retour normal des actions rapides du couteau suisse : affichage du bloc au sein de la description d'un outil
		case 'description_outil':
cs_log(" -- Preparation de l'affichage de la description de l'outil");
			include_spip('inc/cs_outils');
			$res = cs_action_rapide($outil);
cs_log(" FIN : exec_action_rapide_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de '$outil'");	
			ajax_retour($res);
			break;

		// mettre a jour les fichiers distants d'un outil...
		case 'fichiers_distants':
			global $outils;
			include_spip('cout_utils');
			include_spip('config_outils');
			if(autoriser('configurer', 'outil', 0, NULL, $outil)) {
				include_spip('inc/cs_outils');
				cs_initialisation_d_un_outil($outil, charger_fonction('description_outil', 'inc'), false);
				// mise a jour forcee
				$res = cs_action_fichiers_distants($outils[$outil], true);
			}
cs_log(" FIN : exec_action_rapide_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de '$outil'");	
			ajax_retour($res);
			break;

		// pour le reste (ex : 'sauve_pack' en mode non ajax), rien a faire.
		case 'retour_nul':
cs_log("FIN : exec_action_rapide_dist() - Retour nul");
			break;

		default:
			// fonction mon_outil_argument_exec() suite a l'appel de ?exec=action_rapide&arg=mon_outil|argument
cs_log("FIN : exec_action_rapide_dist() - Appel de {$outil}_{$arg}_exec()");
			include_spip('outils/'.$outil.'_action_rapide');
			if(function_exists($fct = $outil.'_'.$arg.'_exec')) $fct();
			break;
	}
}
Beispiel #4
0
function cs_initialisation($forcer=false, $init_includes=true) {
	global $cs_metas_pipelines, $metas_outils;
	static $deja_passe_ici = 0;
	if($log=defined('_LOG_CS'))	{
		$rand = sprintf('[#%04x] ', rand());
		if(!$deja_passe_ici) {
			$mysql = function_exists('mysql_get_client_info')?' - MYSQL v'.mysql_get_client_info():'';
			cs_log("#### 1er PASSAGE $rand################################# - \$forcer = ".intval($forcer)
			. "\n{$rand}PHP v".phpversion()."$mysql - base SPIP v$GLOBALS[spip_version_base] - code SPIP v$GLOBALS[spip_version_code]");
		}
	}
	$deja_passe_ici++;
if($log) cs_log("{$rand}cs_initialisation($forcer) : Passage #$deja_passe_ici");
	// si les metas ne sont pas lus, on les lit
	if (isset($GLOBALS['meta']['tweaks_pipelines'])) {
		$cs_metas_pipelines = unserialize($GLOBALS['meta']['tweaks_pipelines']);
if($log) cs_log("$rand -- cs_metas_pipelines = ".(is_array($cs_metas_pipelines)?join(', ',array_keys($cs_metas_pipelines)):''));

		// liste des actifs & definition des constantes attestant qu'un outil est bien actif : define('_CS_monoutil', 'oui');
		$liste = array();
		foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif']) { $liste[]=$nom; @define('_CS_'.$nom, 'oui'); }
		$liste2 = join(', ', $liste);
if($log) cs_log("$rand -- ".count($liste).' outil(s) actif(s)'.(strlen($liste2)?" = ".$liste2:''));
		// Vanter notre art de la compilation...
		// La globale $spip_header_silencieux permet de rendre le header absent pour raisons de securite
		if (!headers_sent() && (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux']))
				@header('X-Outils-CS: '.$liste2);
if($log) cs_log($rand.($forcer?"\$forcer = true":"cs_initialisation($forcer) : Sortie car les metas sont presents"));
		// Les pipelines sont en meta, tout va bien on peut partir d'ici.
		if (!$forcer) return;
	}
	// ici on commence l'initialisation de tous les outils
	$GLOBALS['cs_init'] = 1;
	global $outils, $metas_vars, $metas_outils;
	include_spip('inc/meta');
	include_spip('cout_utils');
	// remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici);
	include_spip('config_outils');
	// verifier que tous les outils actives sont bien presents
 	foreach($metas_outils as $nom=>$o) 
		if(isset($o['actif']) && $o['actif'] && !isset($outils[$nom])) 
			unset($metas_outils[$nom]);
	ecrire_meta('tweaks_actifs', serialize($metas_outils));
	ecrire_metas();
	// stocker les types de variables declarees
	global $cs_variables;
	$metas_vars['_chaines'] = $cs_variables['_chaines'];
	$metas_vars['_nombres'] = $cs_variables['_nombres'];
	// au cas ou un outil manipule des variables
	$description_outil = charger_fonction('description_outil', 'inc');
	// completer les variables manquantes et incorporer l'activite lue dans les metas
if($log) cs_log("$rand -- foreach(\$outils) : cs_initialisation_d_un_outil()");

	// initialiser chaque outil et construire la liste des contribs
	$contribs = array();
	include_spip('inc/cs_outils');
	foreach($outils as $outil) {
		cs_initialisation_d_un_outil($id = $outil['id'], $description_outil, false);
		if(isset($outil['contrib']) && isset($metas_outils[$id]['actif']) && $metas_outils[$id]['actif'])
			$contribs[] = '<br/> &bull; [@@couteauprive:'.$outil['id'].':nom@@->http://www.spip-contrib.net/?article'.$outil['contrib'].']';
	}
	// installer $cs_metas_pipelines
	$cs_metas_pipelines = array();
if($log) cs_log("$rand -- cs_initialise_includes()... cout_fonctions.php sera peut-etre inclus.");
	// creer les includes (config/mes_options, mes_options et mes_fonctions) et le fichier de controle pipelines.php
	if($init_includes) cs_initialise_includes(count($metas_outils));
	// verifier le fichier d'options _FILE_OPTIONS (ecrire/mes_options.php ou config/mes_options.php)
	// De'sactive' par de'faut. Activer l'outil "Comportements du Couteau Suisse" pour ge'rer cette option.
	cs_verif_FILE_OPTIONS($metas_outils['cs_comportement']['actif'] && $metas_vars['spip_options_on'], true);
	// sauver la configuration
	cs_sauve_configuration();
	// en metas : outils actifs
if($log) cs_log("$rand -- ecriture metas");
	ecrire_meta('tweaks_actifs', serialize($metas_outils));
	// en metas : variables d'outils
	ecrire_meta('tweaks_variables', serialize($metas_vars));
	// en metas : code inline pour les pipelines, mes_options et mes_fonctions;
	ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines));
	// en metas : les liens sur spip-contrib
	ecrire_meta('tweaks_contribs', serialize($contribs));
	ecrire_metas();
	$GLOBALS['cs_init'] = 0;
if($log) cs_log("{$rand}cs_initialisation($forcer) : Sortie");
}
Beispiel #5
0
function exec_admin_couteau_suisse() {
cs_log("INIT : exec_admin_couteau_suisse()");
	global $spip_lang_right;
	global $outils, $afficher_outil, $metas_vars, $metas_outils;

	// cette valeur par defaut n'est pas definie sous SPIP 1.92
	@define('_ID_WEBMESTRES', 1);
	cs_minipres();
	$cmd = _request('cmd');
	$exec = _request('exec');

	include_spip('inc/cs_outils');
	cs_init_plugins();

	// id de l'auteur en session
	if(defined('_SPIP19300')) $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur'];
		else global $connect_id_auteur;

	// reset general
	if($cmd=='resetall'){
		spip_log("Reset General du Couteau Suisse par l'auteur id=$connect_id_auteur");
		foreach(array_keys($GLOBALS['meta']) as $meta) {
			if(strpos($meta, 'tweaks_') === 0) effacer_meta($meta);
			if(strpos($meta, 'cs_') === 0) effacer_meta($meta);
		}
		$metas_vars = $metas_outils = array();
		// ici, pas d'initialisation...
		include_spip('cout_lancement');
		cout_exec_redirige('cmd=resetjs');
	}
	// installation personnalisee
	if(strlen($pack = _request('pack')) && isset($GLOBALS['cs_installer'][$pack]['outils'])) {
		if($cmd=='install'){
			spip_log("Installation personnalisee de '$pack' par l'auteur id=$connect_id_auteur");
			// installer le pack et rediriger
			cout_install_pack($pack, true);
		} elseif($cmd=='delete'){
			spip_log("Suppression de '$pack' par l'auteur id=$connect_id_auteur");
			$p = preg_quote($pack,'/');
			$r = "[$]GLOBALS\['cs_installer'\]\['$p'\] *=";
			cs_ecrire_config(
				array("/$r/", "/# [^\\n\\r]+[\\n\\r]+if\(0\) {$r}.*?# $p #[\\n\\r]+/s"),
				array('if(0) \0', ''));
			// simplement prendre en compte la supression
			cout_exec_redirige('cmd=pack', false);
		}
	}
	// reset des variables d'un outil
	if($cmd=='reset' && strlen($_GET['outil'])){
		spip_log("Reset des variables de '$_GET[outil]' par l'auteur id=$connect_id_auteur");
		global $outils;
		include_spip('cout_utils');
		include_spip('config_outils');
		if(autoriser('configurer', 'outil', 0, NULL, $outils[$_GET['outil']])) {
			include_spip('inc/cs_outils');
			cs_initialisation_d_un_outil($_GET['outil'], charger_fonction('description_outil', 'inc'), true);
			foreach ($outils[$_GET['outil']]['variables'] as $a)
				if(autoriser('configurer', 'variable', 0, NULL, array('nom'=>$a, 'outil'=>$outils[$_GET['outil']])))
					unset($metas_vars[$a]);
				else spip_log("Reset interdit de la variable %$a% !!");
			ecrire_meta('tweaks_variables', serialize($metas_vars));
		}
		// tout recompiler
		cout_exec_redirige("cmd=descrip&outil={$_GET[outil]}#cs_infos");
	}
	// reset de l'affichage
	if($cmd=='showall'){
		spip_log("Reset de tous les affichages du Couteau Suisse par l'auteur id=$connect_id_auteur");
		effacer_meta('tweaks_caches');
		cout_exec_redirige();
	}

	// afficher la description d'un outil ?
	$afficher_outil = ($cmd=='descrip' OR $cmd=='switch')?$_GET['outil']:'';

	// initialisation generale forcee : recuperation de $outils;
	cs_initialisation(true, $cmd!='noinclude');
	cs_installe_outils();

	// mise a jour des donnees si envoi via formulaire
	// sinon fait une passe de verif sur les outils
	if($cmd=='switch' OR $cmd=='hide'){
		enregistre_modif_outils($cmd);
		cout_exec_redirige(strlen($_GET['outil'])?"cmd=descrip&outil={$_GET[outil]}#cs_infos":'');
	}
//	else
//		verif_outils();

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('couteauprive:titre'), "configuration", 'couteau_suisse');

	// pour la  version du plugin
	include_spip('inc/plugin');
	if(isset($GLOBALS['meta']['plugin'])) {
		$t = unserialize($GLOBALS['meta']['plugin']);
		$dir = $t['COUTEAU_SUISSE']['dir'];
		$dir_type = $t['COUTEAU_SUISSE']['dir_type'];
		$bt_dir = $t['BARRETYPOENRICHIE']['dir'];
		$bt_version = $t['BARRETYPOENRICHIE']['version'];
	}
	if(!strlen($dir)) $dir = 'couteau_suisse';
	if(!strlen($bt_dir)) $bt_dir = 'barre_typo_v2';
	$get_infos = defined('_SPIP20100')?charger_fonction('get_infos','plugins'):'plugin_get_infos';
	if (isset($dir_type)) {
		$t = $get_infos($dir, false, constant($dir_type));
	} else {
		$t = $get_infos($dir);
	}
	$cs_version_base = $t['version_base']; $cs_version = $t['version'];
	// mises a jour eventuelles de la base
	installe_un_plugin($dir, $t, $dir_type);
	unset($t);
	if(!strlen($bt_version)) { $bt_version = $get_infos($bt_dir); $bt_version = $bt_version['version']; }
	
	$cs_revision = ((lire_fichier(_DIR_PLUGIN_COUTEAU_SUISSE.'svn.revision',$t)) && (preg_match(',<revision>(\d+)</revision>,',$t,$r)))
		?'<br/>'._T('couteauprive:version_revision', array('revision'=>$r[1])):"";
	include_spip('public/assembler');
	echo recuperer_fond('exec/admin_couteau_suisse_head', array(
		'force' => in_array(_request('var_mode'), array('calcul', 'recalcul'))?'oui':null,
		'cs_version' => $cs_version,
		'exec' => _request('exec'),
	));
	echo "<br /><br /><br />";
	gros_titre(_T('couteauprive:titre'), '', false);
	echo barre_onglets("configuration", 'couteau_suisse');
	echo '<div style="font-size:85%">';
// verification d'une base venant de SPIP 1.8
$res = spip_query("DESCRIBE spip_meta valeur");
$resultat = function_exists('spip_fetch_array')?spip_fetch_array($res):sql_fetch($res);
if($resultat['Type']!='text') echo "<p style=\"color:red;\">Attention : votre base semble ancienne et le Couteau Suisse ne va pas bien fonctionner.</p><p>La table 'spip_meta' a pour type de valeur '$resultat[Type]' au lieu de 'text'.</p>";
// verification de la barre typo V2
$mini = '2.5.3';
if(strlen($bt_version) and (version_compare($bt_version,$mini,'<'))) echo "<p>"._T('couteauprive:erreur:bt', array('version'=>$bt_version, 'mini'=>$mini))."</p>";
echo "<script type=\"text/javascript\"><!-- 
if(!window.jQuery) document.write('".str_replace('/','\/',addslashes(propre('<p>'._T('couteauprive:erreur:jquery').'</p>')))."');
//--></script>";
	echo '</div>';

	// chargement des outils
	include_spip('inc/cs_outils'); 
	list($outils_affiches_actifs, $liste_outils) = liste_outils();
	// cadre de gauche
	echo debut_gauche('', true);
	// pour la liste des docs sur spip-contrib
	$contribs = isset($GLOBALS['meta']['tweaks_contribs'])?unserialize($GLOBALS['meta']['tweaks_contribs']):array();
	foreach($contribs as $i=>$v) $contribs[$i] = preg_replace_callback('/@@(.*?)@@/', 'cs_couper_25', $v);
	sort($contribs);
	$aide = '';
	if(isset($GLOBALS['cs_installer'])) foreach(array_keys($GLOBALS['cs_installer']) as $pack)
		$aide .= "\n_ " . _T('couteauprive:pack_du', array('pack'=>"{[{$pack}|"._T('couteauprive:pack_installe').'->' . generer_url_ecrire($exec,'cmd=install&pack='.urlencode($pack)) . ']}'));
	// si le plugin est installe par procedure automatique, on permet la mise a jour directe (SPIP >= 2.0)
	$arg_chargeur = $GLOBALS['spip_version_base']>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2
	$form_update = preg_match(',plugins/auto/couteau_suisse/$,',_DIR_PLUGIN_COUTEAU_SUISSE)?
		"<input type='hidden' name='$arg_chargeur' value='http://files.spip.org/spip-zone/couteau_suisse.zip' />"
		. "<br/><div class='cs_sobre'><input type='submit' value='&bull; " . attribut_html(_T('couteauprive:version_update')) . "' class='cs_sobre' title='" . attribut_html(_T('couteauprive:version_update_title')) . "' /></div>"
		:"";
	// un lien si le plugin plugin "Telechargeur" est present (SPIP < 2.0)
	if(!strlen($form_update) && defined('_DIR_PLUGIN_CHARGEUR'))
		$form_update = "<br/>&bull; <a title='" . attribut_html(_T('couteauprive:version_update_chargeur_title')) . "' href='../spip.php?action=charger&plugin=couteau_suisse&url_retour=".urlencode(generer_url_ecrire('admin_couteau_suisse'))."'>"._T('couteauprive:version_update_chargeur').'</a>';
	// compilation du bandeau gauche
	$aide =	_T('couteauprive:help2', array(
			'version' => $cs_version.$cs_revision.'<br/>'.
				(defined('_CS_PAS_DE_DISTANT')?'('._T('couteauprive:version_distante_off').')':'<span class="cs_version">'._T('couteauprive:version_distante').'</span>')
				))
		. $form_update
		. '<br/>&bull;&nbsp;['._T('couteauprive:pack_titre') . '|' . _T('couteauprive:pack_alt') . '->' . generer_url_ecrire($exec,'cmd=pack#cs_infos') . "]\n\n"
		. _T('couteauprive:help3', array(

			'reset' => generer_url_ecrire($exec,'cmd=resetall'),
			'hide' => generer_url_ecrire($exec,'cmd=showall'),
			'contribs' => join('', $contribs),
			'install' => $aide
	));
	if(function_exists('redirige_action_post')) $aide = redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', '', $aide); // SPIP >= 2.0
	$aide = '<div class="cs_aide">'._T('couteauprive:help')."\n\n$aide</div>";
	echo debut_boite_info(true), propre($aide), fin_boite_info(true);
	$aide = cs_aide_raccourcis();
	if(strlen($aide))
		echo debut_boite_info(true), $aide, fin_boite_info(true);
	$aide = cs_aide_pipelines($outils_affiches_actifs);
	if(strlen($aide))
		echo debut_boite_info(true), $aide, fin_boite_info(true);
	echo pipeline('affiche_gauche',array('args'=>array('exec'=>$exec),'data'=>''));

	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>$exec),'data'=>'')),
		debut_droite('', true),
		debut_cadre_trait_couleur(find_in_path('img/couteau-24.gif'),true,'','&nbsp;'._T('couteauprive:outils_liste')),
		_T('couteauprive:outil_intro'),
		"\n<table border='0' cellspacing='0' cellpadding='5' style='width:100%;'><tr><td class='sansserif'>";

	$_GET['source'] = $exec;
	echo '<div class="conteneur">', $liste_outils,
		'</div><br class="conteneur" /><div class="cs_patience"><br />'.http_img_pack('searching.gif','*','').' ...</div>';
	flush();
	echo '<div class="conteneur"><div id="cs_infos" class="cs_infos">',
		$cmd=='pack'?cs_description_pack():description_outil2($afficher_outil),
		'</div><script type="text/javascript"><!--
var cs_descripted = "', $afficher_outil, '";
document.write("<style type=\'text/css\'>#csjs{display:none;}<\/style>");
//--></script><div id="csjs" style="color:red;"><br/>', _T('couteauprive:erreur:js'),'</div>
<noscript><style type="text/css">#csjs{display:none;}</style><div style="color:red;"><br/>', _T('couteauprive:erreur:nojs'),
$_GET['modif']=='oui'?'<br/>'._T('couteauprive:vars_modifiees').'.':'','</div></noscript>',
		'</div></td></tr></table>',
		'<style type="text/css">.cs_patience{display:none;}</style>',
		fin_cadre_trait_couleur(true),

		pipeline('affiche_milieu',array('args'=>array('exec'=>$exec),'data'=>'')),
		fin_gauche(), fin_page();
cs_log(" FIN : exec_admin_couteau_suisse()");
}