source: spip-zone/_plugins_/couteau_suisse/config_outils.php @ 65347

Last change on this file since 65347 was 65347, checked in by patfr@…, 7 years ago

MAJ auto : mode réparation compatible SPIP3
Une demande de mise à jour d'un plugin n'ayant pas de nouvelle version disponible (nouvelle release ou non) provoque le remplacement de ses fichiers.
+ Rajeunissement des librairies de SPIP2 ('icon' devenue 'logo', et mode return dans redirection brutale apres decompression d'archive)

File size: 61.2 KB
Line 
1<?php
2
3#-----------------------------------------------------#
4#  Plugin  : Couteau Suisse - Licence : GPL           #
5#  Auteur  : Patrice Vanneufville, 2006               #
6#  Contact : patrice¡.!vanneufville¡@!laposte¡.!net   #
7#  Infos : http://www.spip-contrib.net/?article2166   #
8#-----------------------------------------------------#
9if(!defined("_ECRIRE_INC_VERSION")) return;
10
11// Noter :
12// outils/mon_outil.php : inclus par les pipelines de l'outil
13// outils/mon_outil_options.php : inclus par couteau_suisse_options.php
14// outils/mon_outil_fonctions.php : inclus par couteau_suisse_fonctions.php
15
16cs_log("inclusion de config_outils.php");
17//-----------------------------------------------------------------------------//
18//                               options                                       //
19//-----------------------------------------------------------------------------//
20
21// typographie sur les #TITRE et #NOM d'objets
22// cet outil est place en tete car il modifie le pivot de #TITRE et #NOM
23add_outil( array(
24        'id' => 'titres_typographies',
25        'categorie'   => 'typo-corr',
26        // constante generique pour SPIP 3.0 :
27        'code:spip_options' => 'define(\'_TRAITEMENT_TYPO_SANS_NUMERO\', \'PtoBR(propre(supprimer_numero(%s), $connect, $Pile[0]))\');',
28        // pour etre compatible avec les autres outils, on provoque un changement de pivot (propre a la place de typo) :
29        /* inserer :
30                $table_des_traitements['TITRE'][]= 'PtoBR(propre(%s))';
31                $table_des_traitements['TITRE']['mots']= 'PtoBR(propre(%s))';
32                etc...
33                note : $table_des_traitements['TITRE']['forums'] est protege plus tard */
34        'traitement:TITRE:post_propre,
35         traitement:TITRE/mots:post_propre,
36         traitement:TITRE/forums:post_propre,
37         traitement:NOM:post_propre' => 'PtoBR',
38        'auteur' => 'Ma&iuml;eul Rouquette',
39));
40
41add_variables( array(
42        'nom' => 'alinea',
43        'check' => 'couteauprive:autobr_oui',
44        'defaut' => 1,
45        'code:%s' => "define('_CS_AUTOBR_TRAIT', 1);",
46) ,array(
47        'nom' => 'alinea2',
48        'check' => 'couteauprive:autobr_non',
49        'defaut' => 0,
50        'code:%s' => "define('_CS_AUTOBR_RACC', 1);",
51) ,array(
52        'nom' => 'alinea3',
53        'radio' => array(1 => 'item_oui', 0 => 'item_non'), //'couteauprive:par_defaut'),
54        'defaut' => 0,
55        'code:%s' => "define('_AUTOBR', '');",
56        'code:!%s' => "// (desactive alinea2) ",
57));
58add_outil( array(
59        'id' => 'autobr',
60        'code:options' => defined('_SPIP30000')?"%%alinea3%%%%alinea2%%\n":'%%alinea%%%%alinea2%%',
61        'categorie' => 'typo-corr',
62        'description' => defined('_SPIP30000')?'<:autobr:1:>[[%alinea3%]]<alinea3 valeur="1">[[%alinea2%<br /><q3><:autobr:2:></q3>]]</alinea3>'
63                :'<:autobr::>[[%alinea%]][[->%alinea2%<br /><q3><:autobr:2:></q3>]]',
64        // traitement automatique des TEXTE/articles, et TEXTE/forums (standard pour SPIP>=2.1)
65        'traitement:TEXTE/articles:pre_propre'
66         .(!defined('_SPIP20100')?',traitement:TEXTE/forums:pre_propre':'') => 'autobr_pre_propre',
67        'pipelinecode:pre_typo' => 'if(%%alinea2%%) { include_spip(\'outils/autobr\'); $flux = autobr_alinea($flux); }',
68        'pipeline:nettoyer_raccourcis_typo' => 'autobr_nettoyer_raccourcis',
69        'pipeline:porte_plume_cs_pre_charger' => 'autobr_CS_pre_charger',
70        'pipeline:porte_plume_lien_classe_vers_icone' => 'autobr_PP_icones',
71        'code:fonctions' => "// pour le traitement TEXTE/articles et la balise #INTRODUCTION
72include_spip('outils/autobr');
73\$GLOBALS['cs_introduire'][] = 'autobr_nettoyer_raccourcis';",
74        'pipelinecode:pre_description_outil' => 'if($id=="autobr") {
75                if(defined("_SPIP30000")) $texte=str_replace("@BALISES@",cs_balises_traitees("autobr"),$texte);
76                $texte=str_replace(array("@ARTICLES@","@RUBRIQUES@","@FORUMS@"),
77                        array(cs_raccourcis_presents(array("article/texte", "article/descriptif", "article/chapo"),"%<alinea>%"), cs_raccourcis_presents(array("rubrique/texte"),"%<alinea>%"), cs_raccourcis_presents(array("forum/texte"),"%<alinea>%")), $texte);
78}',
79)); 
80
81// ici on a besoin d'une case input. La variable est : dossier_squelettes
82// a la toute premiere activation de l'outil, la valeur sera : $GLOBALS['dossier_squelettes']
83add_variable( array(
84        'nom' => 'dossier_squelettes',
85        'format' => _format_CHAINE,
86        'defaut' => "\$GLOBALS['dossier_squelettes']",
87        'code' => "\$GLOBALS['dossier_squelettes']=%s;",
88));
89add_outil( array(
90        'id' => 'dossier_squelettes',
91        'code:spip_options' => '%%dossier_squelettes%%',
92        'categorie' => 'admin',
93));
94
95add_outil( array(
96        'id' => 'supprimer_numero',
97        /* inserer :
98                $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s))';
99                $table_des_traitements['TITRE']['mots']= 'typo(supprimer_numero(%s))';
100                etc... */
101        'traitement:TITRE:pre_typo,
102         traitement:TITRE/mots:pre_typo,
103         traitement:TITRE/forums:pre_typo,
104         traitement:NOM:pre_typo,
105         traitement:TYPE/mots:pre_typo' => 'supprimer_numero',
106        'categorie' => 'public',
107        'version-max' => '17743', // SPIP 3.0 : plus la peine
108));
109
110add_variable( array(
111        'nom' => 'paragrapher',
112        'format' => _format_NOMBRE,
113        'radio' => array(1 => 'item_oui', 0 => 'item_non', -1 => 'couteauprive:par_defaut'),
114        'defaut' => "-1",
115        'code:%s>=0' => "\$GLOBALS['toujours_paragrapher']=%s;",
116));
117add_outil( array(
118        'id' => 'paragrapher2',
119        'code:spip_options' => '%%paragrapher%%',
120        'categorie' => 'admin',
121));
122
123add_outil( array(
124        'id' => 'forcer_langue',
125        'code:spip_options' => "\$GLOBALS['forcer_lang']=true;",
126        'categorie' => 'public',
127));
128
129add_variable( array(
130        'nom' => 'webmestres',
131        'format' => _format_CHAINE,
132        'defaut' => '"1"',
133        'code:strlen(%s)' => "define('_ID_WEBMESTRES', %s);",
134        'code:!strlen(%s)' => "define('_ID_WEBMESTRES', 1);",
135));
136add_outil( array(
137        'id' => 'webmestres',
138        'code:spip_options' => '%%webmestres%%',
139        'categorie' => 'admin',
140        // non supporte avant la version 1.92
141        'version-min' => '1.9200',
142        'autoriser' => "autoriser('webmestre')",
143        'pipelinecode:pre_description_outil' => 'if($id=="webmestres")
144                $texte=str_replace(array("@_CS_LISTE_WEBMESTRES@","@_CS_LISTE_ADMINS@"),get_liste_administrateurs(),$texte);',
145));
146
147add_outil( array(
148        'id' => 'insert_head',
149        'code:options' => "\$GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head';",
150        'categorie' => 'spip',
151));
152
153// ici on a besoin d'une case input. La variable est : suite_introduction
154// a la toute premiere activation de l'outil, la valeur sera : '&nbsp;(...)'
155add_variables( array(
156        'nom' => 'suite_introduction',
157        'format' => _format_CHAINE,
158        'defaut' => '"&nbsp;(...)"',
159        'code' => "define('_INTRODUCTION_SUITE', %s);\n",
160), array(
161        'nom' => 'lgr_introduction',
162        'format' => _format_NOMBRE,
163        'defaut' => 100,
164        'code:%s && %s!=100' => "define('_INTRODUCTION_LGR', %s);\n",
165), array(
166        'nom' => 'lien_introduction',
167        'format' => _format_NOMBRE,
168        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
169        'defaut' => 0,
170        'code' => "define('_INTRODUCTION_LIEN', %s);",
171));
172add_outil( array(
173        'id' => 'introduction',
174        'code:options' => "%%lgr_introduction%%%%suite_introduction%%%%lien_introduction%%",
175        'categorie' => 'spip',
176));
177
178// ici on a besoin de deux boutons radio : _T('icone_interface_simple') et _T('icone_interface_complet')
179add_variable( array(
180        'nom' => 'radio_set_options4',
181        'format' => _format_CHAINE,
182        'radio' => array('basiques' => 'icone_interface_simple', 'avancees' => 'icone_interface_complet'),
183        'defaut' => '"avancees"',
184        'label' => '@_CS_CHOIX@',
185        'code' => "\$_GET['set_options']=\$GLOBALS['set_options']=%s;",
186));
187add_outil( array(
188        'id' => 'set_options',
189        'auteur'         => 'Vincent Ramos',
190        'code:options' => "%%radio_set_options4%%",
191        'categorie' => 'interface',
192        // pipeline pour retirer en JavaScript le bouton de controle de l'interface
193        'pipeline:header_prive' => 'set_options_header_prive',
194        // non supporte a partir de la version 1.93
195        'version-max' => '1.9299',
196));
197
198// ici on a besoin de trois boutons radio : _T('couteauprive:js_jamais'), _T('couteauprive:js_defaut') et _T('couteauprive:js_toujours')
199add_variable( array(
200        'nom' => 'radio_filtrer_javascript3',
201        'format' => _format_NOMBRE,
202        'radio' => array(-1 => 'couteauprive:js_jamais', 0 => 'couteauprive:js_defaut', 1 => 'couteauprive:js_toujours'),
203        'defaut' => 0,
204        'label' => '@_CS_CHOIX@',
205        // si la variable est non nulle, on code...
206        'code:%s' => "\$GLOBALS['filtrer_javascript']=%s;",
207));
208add_outil( array(
209        'id' => 'filtrer_javascript',
210        'code:options' => "%%radio_filtrer_javascript3%%",
211        'categorie' => 'securite',
212        'version-min' => '1.9200',
213));
214
215// ici on a besoin d'une case input. La variable est : forum_lgrmaxi
216// a la toute premiere activation de l'outil, la valeur sera : 0 (aucune limite)
217add_variable( array(
218        'nom' => 'forum_lgrmaxi',
219        'format' => _format_NOMBRE,
220        'defaut' => 0,
221        'code:%s' => "define('_FORUM_LONGUEUR_MAXI', %s);",
222));
223add_outil( array(
224        'id' => 'forum_lgrmaxi',
225        'code:spip_options' => "%%forum_lgrmaxi%%",
226        'categorie' => 'securite',
227        'version-min' => '1.9200',
228));
229
230
231add_variables( array(
232        'nom' => 'logo_Hmax',
233        'format' => _format_NOMBRE,
234        'defaut' => 0,
235        'code:%s' => "@define('_LOGO_MAX_HEIGHT', %s);\n",
236), array(
237        'nom' => 'logo_Wmax',
238        'format' => _format_NOMBRE,
239        'defaut' => 0,
240        'code:%s' => "@define('_LOGO_MAX_WIDTH', %s);\n",
241), array(
242        'nom' => 'logo_Smax',
243        'format' => _format_NOMBRE,
244        'defaut' => 0,
245        'code:%s' => "@define('_LOGO_MAX_SIZE', %s);\n",
246), array(
247        'nom' => 'img_Hmax',
248        'format' => _format_NOMBRE,
249        'defaut' => 0,
250        'code:%s' => "@define('_IMG_MAX_HEIGHT', %s);\n",
251), array(
252        'nom' => 'img_Wmax',
253        'format' => _format_NOMBRE,
254        'defaut' => 0,
255        'code:%s' => "@define('_IMG_MAX_WIDTH', %s);\n",
256), array(
257        'nom' => 'img_Smax',
258        'format' => _format_NOMBRE,
259        'defaut' => 0,
260        'code:%s' => "@define('_IMG_MAX_SIZE', %s);\n",
261), array(
262        'nom' => 'doc_Smax',
263        'format' => _format_NOMBRE,
264        'defaut' => 0,
265        'code:%s' => "@define('_DOC_MAX_SIZE', %s);\n",
266), array(
267        'nom' => 'img_GDmax',
268        'format' => _format_NOMBRE,
269        'defaut' => 0,
270        'code:%s' => "@define('_IMG_GD_MAX_PIXELS', %s);\n",
271), array(
272        'nom' => 'img_GDqual',
273        'format' => _format_NOMBRE,
274        'defaut' => 85,
275        'code:%s' => "@define('_IMG_GD_QUALITE', %s);\n",
276        'label' => '@_CS_CHOIX@',
277), array(
278        'nom' => 'copie_Smax',
279        'format' => _format_NOMBRE,
280        'defaut' => 16,
281        'code' => "@define('_COPIE_LOCALE_MAX_SIZE', %s*1048576);",
282));
283add_outil( array(
284        'id' => 'SPIP_tailles',
285        'code:spip_options' => "%%logo_Hmax%%%%logo_Wmax%%%%logo_Smax%%%%img_Hmax%%%%img_Wmax%%%%img_Smax%%%%doc_Smax%%%%img_GDmax%%%%img_GDqual%%%%copie_Smax%%",
286        'categorie' => 'securite',
287));
288
289add_outil( array(
290        'id' => 'previsualisation',
291        'categorie' => 'interface',
292        'auteur' => '[C&eacute;dric Morin->http://www.yterium.net]',
293        'pipeline:pre_boucle' => 'previsu_redac_pre_boucle',
294        'pipeline:boite_infos' => 'previsu_redac_boite_infos',
295        // fichier distant pour les pipelines
296        'distant_pipelines' => 'http://zone.spip.org/trac/spip-zone/export/53447/_plugins_/previsu_redaction/previsu_redac_pipelines.php',
297        'version-min' => '1.9300', // SPIP 2.0 : oui
298        'version-max' => '17743', // SPIP 3.0 : non
299));
300
301add_variable( array(
302        'nom' => 'mot_masquer',
303        'format' => _format_CHAINE,
304        'defaut' => "'masquer'",
305        'code' => "define('_MOT_MASQUER', %s);",
306        'commentaire' => '!sql_countsel("spip_mots", "titre="._q(%s))?"<spanred>"._T("couteauprive:erreur_mot", array("mot"=>%s))."</span>":""',
307));
308add_outil( array(
309        'id' => 'masquer',
310        'categorie' => 'spip',
311        'auteur' => 'Nicolas Hoizey, St&eacute;phanie Caron',
312        'pipeline:pre_boucle' => 'masquer_pre_boucle',
313        // fichier distant pour le pipeline
314        'distant_pipelines' => 'http://zone.spip.org/trac/spip-zone/export/62063/_plugins_/masquer/masquer_pipelines.php',
315        'code:options' => "%%mot_masquer%%",
316        'code:fonctions' => 'if (!function_exists("critere_tout_voir_dist")){
317  function critere_tout_voir_dist($idb, &$boucles, $crit) {
318    $boucle = &$boucles[$idb];
319    $boucle->modificateur["tout_voir"] = true;
320  }
321}',
322        'version-min' => '1.9300',
323        'pipelinecode:pre_description_outil' => 'if($id=="masquer") {
324        include_spip("lib/masquer/distant_pipelines_masquer_pipelines");
325        $texte=str_replace(array("@_RUB@","@_ART@"),
326                array((function_exists("masquer_liste_rubriques") && $x=masquer_liste_rubriques(true))?"[->rub".join("], [->rub", $x)."]":couteauprive_T("variable_vide"),
327                        (function_exists("masquer_liste_articles") && $x=masquer_liste_articles(true))?"[->art".join("], [->art", $x)."]":couteauprive_T("variable_vide"))
328        ,$texte); }',
329));
330
331add_variables( array(
332        'nom' => 'auteur_forum_nom',
333        'check' => 'couteauprive:auteur_forum_nom',
334        'defaut' => 1,
335), array(
336        'nom' => 'auteur_forum_email',
337        'check' => 'couteauprive:auteur_forum_email',
338        'defaut' => 0,
339), array(
340        'nom' => 'auteur_forum_deux',
341        'check' => 'couteauprive:auteur_forum_deux',
342        'defaut' => 0,
343));
344// chaine de langue en extension sous SPIP>=3.0
345$cs_temp = defined('_SPIP30000')?'forum:':'';
346add_outil( array(
347        'id' => 'auteur_forum',
348        'categorie'      => 'securite',
349        'jquery'        => 'oui',
350        'code:jq_init' => 'cs_auteur_forum.apply(this);',
351        'code:js' => "var cs_verif_email = %%auteur_forum_email%%;\nvar cs_verif_nom = %%auteur_forum_nom%%;\nvar cs_verif_deux = %%auteur_forum_deux%%;",
352        'pipelinecode:pre_description_outil' => 'if($id=="auteur_forum") $texte=str_replace(array("@_CS_FORUM_NOM@","@_CS_FORUM_EMAIL@"),
353        array(preg_replace(\',:$,\',"",_T("'.$cs_temp.'forum_votre_nom")),preg_replace(\',:$,\',"",_T("'.$cs_temp.'forum_votre_email"))),$texte);',
354));
355/* Astuce de b_b en php (a tester !)
356        'pipeline:formulaire_verifier' => 'nom_obligatoire',
357function nom_obligatoire($flux){
358        $form = $flux['args']['form'];
359        if ($form=='forum'){
360                if (!sinon($GLOBALS['visiteur_session']['nom'],$GLOBALS['visiteur_session']['session_nom'])){
361                        $flux['data']['message_erreur'] .= _T('nom_obligatoire');
362                        $flux['data']['session_nom'] = _T('nom_obligatoire');
363                        unset($flux['data']['previsu']);
364                }
365        }
366        return $flux;
367}*/
368
369// ici on a besoin de trois boutons radio : _T('couteauprive:par_defaut'), _T('couteauprive:sf_amont') et _T('couteauprive:sf_tous')
370add_variable( array(
371        'nom' => 'radio_suivi_forums3',
372        'format' => _format_CHAINE,
373        'radio' => array('defaut' => 'couteauprive:par_defaut', '_SUIVI_FORUMS_REPONSES' => 'couteauprive:sf_amont', '_SUIVI_FORUM_THREAD' => 'couteauprive:sf_tous'),
374        'defaut' => '"defaut"',
375        'label' => '@_CS_CHOIX@',
376        // si la variable est differente de 'defaut' alors on codera le define
377        'code:%s!=="defaut"' => "define(%s, true);",
378));
379add_outil( array(
380        'id' => 'suivi_forums',
381        'code:options' => "%%radio_suivi_forums3%%",
382        'categorie' => 'admin',
383        // effectif que dans la version 1.92 (cf : plugin notifications)
384        'version-min' => '1.9200',
385        'version-max' => '1.9299',
386));
387
388add_variables( array(
389        'nom' => 'spam_mots',
390        'format' => _format_CHAINE,
391        'lignes' => 8,
392        'defaut' => '"sucking blowjob superbabe ejakulation fucking (asses)"',
393        'code' => "define('_spam_MOTS', %s);",
394), array(
395        'nom' => 'spam_ips',
396        'format' => _format_CHAINE,
397        'lignes' => 6,
398        'defaut' => '""',
399        'code' => "define('_spam_IPS', %s);",
400));
401add_outil( array(
402        'id' => 'spam',
403        'code:options' => "%%spam_mots%%\n%%spam_ips%%",
404        // sauvegarde de l'IP pour tests
405        'code:spip_options' => '$ip_=$ip;',
406        'categorie' => 'securite',
407));
408
409// a placer apres l'outil 'spam' pour compatibilite IP
410add_outil( array(
411        'id' => 'no_IP',
412        'code:spip_options' => '$ip = substr(md5($ip),0,16);',
413        'categorie' => 'securite',
414));
415
416add_outil( array(
417        'id' => 'flock',
418        'code:spip_options' => "define('_SPIP_FLOCK',false);",
419        'categorie' => 'admin',
420        'version-min' => '1.9300',
421));
422
423add_variables( array(
424        'nom' => 'ecran_actif',
425        'label' => '@_CS_CHOIX@',
426        'check' => 'couteauprive:ecran_activer',
427        'defaut' => 1,
428        // code d'appel en realpath() pour config/mes_options.php (SPIP < 2.1)
429        'code:%s' => "// bug SPIP 1.92, 2.0 et 2.1
430if(isset(\$_REQUEST['exec']) && strncmp('admin_couteau_suisse',\$_REQUEST['exec'],20)==0) \$_REQUEST['exec']='admin_couteau_suisse';
431".((!defined('_SPIP20100'))?"if(!defined('_ECRAN_SECURITE') && @file_exists(\$f=\"".str_replace('\\','/',realpath(dirname(__FILE__)))."/lib/ecran_securite/distant_ecran_securite.php\")) include \$f;":''),
432), array(
433        'nom' => 'ecran_load',
434        'format' => _format_NOMBRE,
435        'defaut' => 4,
436        'code:%s' => "define('_ECRAN_SECURITE_LOAD',%s);\n",
437));
438add_outil( array(
439        'id' => 'ecran_securite',
440        'code:spip_options' => '%%ecran_load%%%%ecran_actif%%',
441        'categorie' => 'securite',
442        'distant' => 'http://zone.spip.org/trac/spip-zone/browser/_core_/securite/ecran_securite.php?format=txt',
443        'pipeline:fichier_distant' => defined('_SPIP20100')?'ecran_securite_fichier_distant':'', 
444        'pipelinecode:pre_description_outil' => 'if($id=="ecran_securite") $flux["non"] = !%%ecran_actif%% || !$flux["actif"];',
445        'pipeline:pre_description_outil' => 'ecran_securite_pre_description_outil',
446        'description' => "<:ecran_securite::>{{@_ECRAN_SECURITE@}}@_ECRAN_SUITE@",
447));
448
449add_variables( array(
450        'nom' => 'log_couteau_suisse',
451        'check' => 'couteauprive:cs_log_couteau_suisse',
452        'defaut' => 0,
453        'commentaire' => '(!defined("_SPIP30000") || _LOG_FILTRE_GRAVITE>=_LOG_INFO)?""
454                        :_T("couteauprive:cs_comportement_ko", array("gr1"=>"{{"._LOG_FILTRE_GRAVITE."}}","gr2"=>"{{"._LOG_INFO." (INFO)}}"))',
455), array(
456        'nom' => 'spip_options_on',
457        'check' => 'couteauprive:cs_spip_options_on',
458        'defaut' => 0,
459        'commentaire' => 'cs_outils_concernes("code:spip_options");',
460), array(
461        'nom' => 'distant_off',
462        'check' => 'couteauprive:cs_distant_off',
463        'defaut' => 0,
464        'code:%s' => "define('_CS_PAS_DE_DISTANT','oui');",
465), array(
466        'nom' => 'distant_outils_off',
467        'check' => 'couteauprive:cs_distant_outils_off',
468        'defaut' => 0,
469        'code:%s' => "define('_CS_PAS_D_OUTIL_DISTANT','oui');",
470        'commentaire' => 'cs_outils_concernes("fichiers_distants",%s);',
471));
472add_outil( array(
473        'id' => 'cs_comportement',
474        'code:spip_options' => "%%distant_off%% %%distant_outils_off%%",
475        'pipelinecode:pre_description_outil' => 'if($id=="cs_comportement") {
476$tmp=(!%%spip_options_on%%||!$flux["actif"]||defined("_CS_SPIP_OPTIONS_OK"))?"":"<spanred>"._T("couteauprive:cs_spip_options_erreur")."</span>";
477$texte=str_replace(
478        array("@_CS_FILE_OPTIONS_ERR@","@_CS_DIR_TMP@","@_CS_DIR_LOG@","@_CS_FILE_OPTIONS@"),
479        array($tmp,cs_root_canonicalize(_DIR_TMP),cs_root_canonicalize(defined("_DIR_LOG")?_DIR_LOG:_DIR_TMP),show_file_options()),
480        $texte);
481}',
482));
483
484add_variables( array(
485        'nom' => 'filtre_gravite',
486        'format' => _format_NOMBRE,
487        'radio' => array(0 => '_EMERGENCY (0)', 1 => '_ALERT (1)', 2 => '_CRITICAL (2)', 3 => '_ERROR (3)', 4 => '_WARNING (4)', 5 => '_NOTICE (5)', 6 => '_INFO (6)', 7 => '_DEBUG (7)', 8 => '_TRACE :'),
488        'radio/ligne' => 3,
489        'defaut' => 5,
490        'code:%s<8' => "defined('_LOG_FILTRE_GRAVITE') || define('_LOG_FILTRE_GRAVITE',%s);",
491        'code:%s==8' => "defined('_LOG_FILTRE_GRAVITE') || define('_LOG_FILTRE_GRAVITE',_LOG_FILTRE_GRAVITE_TRACE);",
492), array(
493        'nom' => 'filtre_gravite_trace',
494        'format' => _format_NOMBRE,
495        'defaut' => 8,
496        'code:%s>=0' => "define('_LOG_FILTRE_GRAVITE_TRACE',%s);",
497), array(
498        'nom' => 'log_brut',
499        'check' => 'couteauprive:log_brut',
500        'defaut' => 0,
501        'code:%s' => "defined('_LOG_BRUT') || define('_LOG_BRUT',%s);",
502), array(
503        'nom' => 'dir_log',
504        'format' => _format_CHAINE,
505        'defaut' => '',
506        'code:strlen(%s)' => "defined('_DIR_LOG') || define('_DIR_LOG', _ROOT_RACINE.%s);",
507        'action' => '%s = strlen(%s=trim(%s))?cs_root_canonicalize(%s."/", _DIR_RACINE):"";',
508), array(
509        'nom' => 'file_log',
510        'format' => _format_CHAINE,
511        'taille' => 10,
512        'defaut' => "'spip'",
513        'code:%s' => "defined('_FILE_LOG') || define('_FILE_LOG',%s);",
514), array(
515        'nom' => 'file_log_suffix',
516        'format' => _format_CHAINE,
517        'taille' => 10,
518        'defaut' => "'.log'",
519        'code:%s' => "defined('_FILE_LOG_SUFFIX') || define('_FILE_LOG_SUFFIX',%s);",
520), array(
521        'nom' => 'max_log',
522        'format' => _format_NOMBRE,
523        'defaut' => 100, // lignes
524        'code:%s>0 && %s<>100' => "defined('_MAX_LOG') || define('_MAX_LOG',%s);",
525), array(
526        'nom' => 'log_fileline',
527        'check' => 'couteauprive:log_fileline',
528        'defaut' => 0,
529        'code:%s>0 && %s<>100' => "defined('_LOG_FILELINE') || define('_LOG_FILELINE',%s);",
530), array(
531        'nom' => 'taille_des_logs',
532        'format' => _format_NOMBRE,
533        'defaut' => 100, // Ko (0 : pas de log)
534        'code:%s>=0 && %s<>100' => "\$GLOBALS['taille_des_logs']=%s;",
535), array(
536        'nom' => 'nombre_de_logs',
537        'format' => _format_NOMBRE,
538        'defaut' => 4, // (0 : pas de log)
539        'code:%s>=0 && %s<>4' => "\$GLOBALS['nombre_de_logs']=%s;",
540));
541add_outil( array(
542        'id' => 'spip_log',
543        'description' => '<:spip_log::>' . (defined('_SPIP30000')?'[[->@puce@ %log_fileline%]][[->@puce@ %log_brut%]]<:spip_log:2:>[[%filtre_gravite%]][[radio->%filtre_gravite_trace%]]':'') . '<:spip_log:3:>',
544        'code:spip_options' => (defined('_SPIP30000')?'%%filtre_gravite_trace%%%%filtre_gravite%%%%log_brut%%%%log_fileline%%':'')
545                . '%%dir_log%%%%file_log%%%%file_log_suffix%%%%max_log%%%%taille_des_logs%%%%nombre_de_logs%%',
546        'categorie' =>'devel',
547        'pipelinecode:pre_description_outil' => 'if($id=="spip_log")
548        $texte=str_replace(array("@DIR_LOG@","@SPIP_OPTIONS@"),
549        array("<code>".cs_root_canonicalize(_DIR_LOG)."</code>",!defined("_CS_SPIP_OPTIONS_OK")?"<br/>"._T("couteauprive:detail_spip_options2"):""),$texte);',
550));
551
552add_outil( array(
553        'id' => 'test_i18n',
554        'code:spip_options' => '$GLOBALS["test_i18n"] = true ;',
555        'categorie' => 'devel',
556        'pipelinecode:pre_description_outil' => 'if($id=="test_i18n") $texte.=_T("Lorem_ipsum_dolor");',
557));
558
559add_outil( array(
560        'id' => 'xml',
561        'code:options' => "\$GLOBALS['xhtml']='sax';",
562        'auteur' => 'Ma&iuml;eul Rouquette',
563        'categorie' =>'devel',
564        'version-min' => '1.9200',
565));
566
567add_outil( array(
568        'id' => 'f_jQuery',
569        'code:spip_options' => "\$GLOBALS['spip_pipeline']['insert_head'] = str_replace('|f_jQuery', '', \$GLOBALS['spip_pipeline']['insert_head']);",
570        'auteur' => 'Fil',
571        'categorie' =>'public',
572        'version-min' => '1.9200',
573));
574
575add_variables( array(
576        'nom' => 'prive_travaux',
577        'format' => _format_NOMBRE,
578        'radio' => array(0 => 'couteauprive:tous', 1 => 'couteauprive:admins_seuls'),
579        'defaut' => 0,
580        'code:%s' => "define('_en_travaux_PRIVE', %s);\n",
581), array(
582        'nom' => 'admin_travaux',
583        'format' => _format_NOMBRE,
584        'radio' => array(0 => 'couteauprive:tous', 1 => 'couteauprive:sauf_admin', 2 => 'couteauprive:sauf_admin_redac', 3 => 'couteauprive:sauf_identifies'),
585        'radio/ligne' => 1,
586        'defaut' => 0,
587        'code' => "define('_en_travaux_PUBLIC', %s);\n",
588), array(
589        'nom' => 'avertir_travaux',
590        'check' => 'couteauprive:travaux_masquer_avert',
591        'defaut' => 0,
592        'code:%s' => "define('_en_travaux_SANSMSG', %s);\n",
593), array(
594        'nom' => 'message_travaux',
595        'format' => _format_CHAINE,
596        'defaut' => "_T('couteauprive:travaux_prochainement')",
597        'lignes' => 3,
598        'code' => "\$tr_message=%s;\n",
599), array(
600        'nom' => 'titre_travaux',
601        'format' => _format_NOMBRE,
602        'radio' => array(1 => 'couteauprive:travaux_titre', 0 => 'couteauprive:travaux_nom_site'),
603        'defaut' => 1,
604        'code:%s' => "define('_en_travaux_TITRE', %s);",
605), array(
606        'nom' => 'cache_travaux',
607        'format' => _format_NOMBRE,
608        'check' => 'couteauprive:travaux_nocache',
609        'defaut' => 1,
610        'code:%s' => "define('_NO_CACHE',1);", // SPIP >=2.0
611));
612add_outil( array(
613        'id' => 'en_travaux',
614        'code:options' => "%%message_travaux%%%%prive_travaux%%%%admin_travaux%%%%avertir_travaux%%%%titre_travaux%%",
615        'categorie' => 'devel',
616        'auteur' => "Arnaud Ventre pour l'id&eacute;e originale",
617        'pipeline:affichage_final' => 'en_travaux_affichage_final',
618        'pipelinecode:pre_description_outil' => 'if($id=="en_travaux") $texte=str_replace(array("@_CS_TRAVAUX_TITRE@","@_CS_NOM_SITE@"),
619        array("["._T("info_travaux_titre")."]","[".$GLOBALS["meta"]["nom_site"]."]"),$texte);',
620        'description' => '<:en_travaux::>[[%message_travaux%]][[%titre_travaux%]][[%admin_travaux%]][[-><admin_travaux valeur="1/2/3">%avertir_travaux%</admin_travaux>]][[->%cache_travaux%]][[%prive_travaux%]]',
621));
622
623add_variables( array(
624        'nom' => 'bp_tri_auteurs',
625        'check' => 'couteauprive:bp_tri_auteurs',
626        'defaut' => 1,
627        'code:%s' => "define('boites_privees_TRI_AUTEURS', %s);\n",
628), array(
629        'nom' => 'bp_urls_propres',
630        'check' => 'couteauprive:bp_urls_propres',
631        'defaut' => 1,
632        'code:%s' => "define('boites_privees_URLS_PROPRES', %s);\n",
633), array(
634        'nom' => 'cs_rss',
635        'check' => 'couteauprive:rss_var',
636        'defaut' => 1,
637        'code:%s' => "define('boites_privees_CS', %s);\n",
638), array(
639        'nom' => 'format_spip',
640        'check' => 'couteauprive:format_spip',
641        'defaut' => 1,
642        'code:%s' => "define('boites_privees_ARTICLES', %s);\n",
643), array(
644        'nom' => 'stat_auteurs',
645        'check' => 'couteauprive:stat_auteurs',
646        'defaut' => 1,
647        'code:%s' => "define('boites_privees_AUTEURS', %s);\n",
648), array(
649        'nom' => 'qui_webmasters',
650        'check' => 'couteauprive:qui_webmestres',
651        'defaut' => 1,
652        'code:%s' => "define('boites_privees_WEBMASTERS', %s);\n",
653));
654add_outil( array(
655        'id' => 'boites_privees',
656        'auteur'=>'Pat, Joseph LARMARANGE (format SPIP)',
657        'contrib' => 2564,
658        'code:options' => "%%cs_rss%%%%format_spip%%%%stat_auteurs%%%%qui_webmasters%%%%bp_urls_propres%%%%bp_tri_auteurs%%",
659        'categorie' => 'interface',
660        'pipeline:affiche_milieu' => 'boites_privees_affiche_milieu',
661        'pipeline:affiche_droite' => 'boites_privees_affiche_droite',
662        'pipeline:affiche_gauche' => 'boites_privees_affiche_gauche',
663        // controle de la boucle AUTEURS afin de respecter l'ordre des auteurs stockes en base
664        'pipeline:pre_boucle' => defined('_SPIP20100')?'boites_privees_pre_boucle':'',
665        'code:fonctions' => 'include_spip("outils/boites_privees");',
666        // Pour la constante _CS_RSS_SOURCE
667#       'pipelinecode:pre_description_outil' => 'if($id=="boites_privees") include_spip("cout_define");',
668));
669
670// TODO : compat SPIP 3.0 ?
671add_variables( array(
672        'nom' => 'max_auteurs_page',
673        'format' => _format_NOMBRE,
674        'defaut' => 30,
675        'code:%s' => "@define('MAX_AUTEURS_PAR_PAGE', %s);\n",
676), array(
677        'nom' => 'auteurs_0',   'check' => 'info_administrateurs',      'defaut' => 1,  'code:%s' => "'0minirezo',",
678), array(
679        'nom' => 'auteurs_1',   'check' => 'info_redacteurs',   'defaut' => 1,  'code:%s' => "'1comite',",
680), array(
681        'nom' => 'auteurs_5',   'check' => defined('_SPIP30000')?'texte_statut_poubelle':'info_statut_site_4',  'defaut' => 1,  'code:%s' => "'5poubelle',",
682), array(
683        'nom' => 'auteurs_6',   'check' => 'info_visiteurs',    'defaut' => 0,  'code:%s' => "'6forum',",
684), array(
685        'nom' => 'auteurs_n',   'check' => 'couteauprive:nouveaux',     'defaut' => 0,  'code:%s' => "'nouveau',",
686), array(
687        'nom' => 'auteurs_tout_voir',
688        'format' => _format_NOMBRE,
689        'radio' => array(1 => 'couteauprive:statuts_tous', 0 => 'couteauprive:statuts_spip'),
690        'radio/ligne' => 1,
691        'defaut' => 0,
692        'label' => '@_CS_CHOIX@',
693//      'code:!%s' => "@define('AUTEURS_DEFAUT', join(\$temp_auteurs,','));",
694        'code:!%s' => "if(_request('exec')=='auteurs' && !_request('statut')) \$_GET['statut'] = join(\$temp_auteurs,',');",
695        'code:%s' => "if(_request('exec')=='auteurs' && !_request('statut')) \$_GET['statut'] = '!foo';",
696));
697add_outil( array(
698        'id' => 'auteurs',
699        'code:options' => "%%max_auteurs_page%%\$temp_auteurs=array(%%auteurs_0%%%%auteurs_1%%%%auteurs_5%%%%auteurs_6%%%%auteurs_n%%); %%auteurs_tout_voir%% unset(\$temp_auteurs);",
700        'categorie' => 'interface',
701        'version-min' => '1.9300',
702//      'pipeline:affiche_milieu' => 'auteurs_affiche_milieu',
703));
704
705//-----------------------------------------------------------------------------//
706//                               fonctions                                     //
707//-----------------------------------------------------------------------------//
708
709add_outil( array(
710        'id' => 'verstexte',
711        'auteur' => 'C&eacute;dric MORIN',
712        'categorie' => 'spip',
713));
714
715add_outil( array(
716        'id' => 'orientation',
717        'auteur'         => 'Pierre Andrews (Mortimer) &amp; IZO',
718        'categorie' => 'spip',
719));
720
721add_variable( array(
722        'nom' => 'balise_decoupe',
723        'format' => _format_NOMBRE,
724        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
725        'defaut' => 0,
726        'code:%s' => "define('_decoupe_BALISE', %s);\n",
727));
728add_outil( array(
729        'id' => 'decoupe',
730        'contrib'       => 2135,
731        // Le separateur <span class="csfoo xxxx"></span> est supprime en fin de calcul de page
732        'code:options' => "%%balise_decoupe%%define('_onglets_FIN', '<span class=\"csfoo ongl\"></span>');\n@define('_decoupe_SEPARATEUR', '++++');
733if(!defined('_SPIP19300') && isset(\$_GET['var_recherche'])) {
734        include_spip('inc/headers');
735        redirige_par_entete(str_replace('var_recherche=', 'decoupe_recherche=', \$GLOBALS['REQUEST_URI']));
736}",
737        // construction des onglets
738        'code:jq_init' => "onglets_init.apply(this);",
739        // pour les balises #TEXTE : $table_des_traitements['TEXTE'] = 'cs_decoupe(propre(%s))';
740        // pour les articles, breves et rubriques : $table_des_traitements['TEXTE']['articles'] = 'cs_decoupe(propre(%s))';
741        'traitement:TEXTE:post_propre,
742         traitement:TEXTE/articles:post_propre,
743         traitement:TEXTE/forums:post_propre,
744         traitement:TEXTE/breves:post_propre,
745         traitement:TEXTE/rubriques:post_propre' => 'cs_decoupe',
746        // pour les balises #TEXTE : $table_des_traitements['TEXTE'] = 'propre(cs_onglets(%s))';
747        // pour les articles, breves et rubriques : $table_des_traitements['TEXTE']['articles'] = 'propre(cs_onglets(%s))';
748        'traitement:TEXTE:pre_propre,
749         traitement:TEXTE/articles:pre_propre,
750         traitement:TEXTE/forums:pre_propre,
751         traitement:TEXTE/breves:pre_propre,
752         traitement:TEXTE/rubriques:pre_propre' => 'cs_onglets',
753        'categorie' => 'typo-racc',
754        'pipeline:nettoyer_raccourcis_typo' => 'decoupe_nettoyer_raccourcis',
755        'pipeline:porte_plume_cs_pre_charger' => 'decoupe_CS_pre_charger',
756        'pipeline:porte_plume_lien_classe_vers_icone' => 'decoupe_PP_icones',
757));
758
759// couplage avec l'outil 'decoupe', donc 'sommaire' doit etre place juste apres :
760// il faut inserer le sommaire dans l'article et ensuite seulement choisir la page
761add_variables( array(
762        'nom' => 'prof_sommaire',
763        'format' => _format_NOMBRE,
764        'defaut' => 1,
765        'code:%s>=2 && %s<=4' => "define('_sommaire_PROFONDEUR', %s);\n",
766), array(
767        'nom' => 'lgr_sommaire',
768        'format' => _format_NOMBRE,
769        'defaut' => 30,
770        'code:%s>=9 && %s<=99' => "define('_sommaire_NB_CARACTERES', %s);\n",
771), array(
772        'nom' => 'auto_sommaire',
773        'format' => _format_NOMBRE,
774        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
775        'defaut' => 1,
776        'code:%s' => "define('_sommaire_AUTOMATIQUE', %s);\n",
777), array(
778        'nom' => 'jolies_ancres',
779        'format' => _format_NOMBRE,
780        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
781        'defaut' => 0,
782        'code:%s' => "define('_sommaire_JOLIES_ANCRES', %s);\n",
783), array(
784        'nom' => 'balise_sommaire',
785        'format' => _format_NOMBRE,
786        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
787        'defaut' => 0,
788        'code:%s' => "define('_sommaire_BALISE', %s);",
789));
790include_spip('inc/filtres');
791add_outil( array(
792        'id' => 'sommaire',
793        'contrib'       => 2378,
794        // Le separateur <span class="csfoo xxxx"></span> est supprime en fin de calcul de page
795        'code:options' => "define('_sommaire_REM', '<span class=\"csfoo somm\"></span>');\ndefine('_CS_SANS_SOMMAIRE', '[!sommaire]');\ndefine('_CS_AVEC_SOMMAIRE', '[sommaire]');\n%%prof_sommaire%%%%lgr_sommaire%%%%auto_sommaire%%%%jolies_ancres%%%%balise_sommaire%%",
796        'code:jq' => 'if(jQuery("div.cs_sommaire").length) {
797                // s\'il y a un sommaire, on cache la navigation haute sur les pages
798                jQuery("div.decoupe_haut").css("display", "none");
799                // utilisation des cookies pour conserver l\'etat du sommaire si on quitte la page
800                if(cs_CookiePlugin) jQuery.getScript(cs_CookiePlugin, cs_sommaire_cookie);
801        }',
802        'code:jq_init' => 'cs_sommaire_init.apply(this);',
803        // inserer : $table_des_traitements['TEXTE']['articles']= 'sommaire_d_article(propre(%s))';
804        // idem pour les breves et les rubriques
805        'traitement:TEXTE/articles:post_propre,
806         traitement:TEXTE/breves:post_propre,
807         traitement:TEXTE/rubriques:post_propre' => 'sommaire_d_article',
808        'traitement:CS_SOMMAIRE:post_propre' => 'sommaire_d_article_balise',
809        'categorie' => 'typo-corr',
810        'pipeline:nettoyer_raccourcis_typo' => 'sommaire_nettoyer_raccourcis',
811        'pipeline:pre_description_outil' => 'sommaire_description_outil',
812        'pipeline:pre_propre' => 'sommaire_intertitres',
813));
814
815// intertitres typo, outil compatible avec 'sommaire' :
816add_variables( array(
817        'nom' => 'i_align',
818        'radio' => array('left' => '_left', 'right' => '_right', 'center' => '_center'),
819        'defaut' => "'left'",
820), array(
821        'nom' => 'i_padding',
822        'format' => _format_NOMBRE,
823        'defaut' => 0,
824), array(
825        'nom' => 'i_hauteur',
826        'format' => _format_NOMBRE,
827        'defaut' => 0,
828), array(
829        'nom' => 'i_largeur',
830        'format' => _format_NOMBRE,
831        'defaut' => 600,
832), array(
833        'nom' => 'i_taille',
834        'format' => _format_NOMBRE,
835        'defaut' => 16,
836), array(
837        'nom' => 'i_couleur',
838        'format' => _format_CHAINE,
839        'defaut' => "'black'",
840), array(
841        'nom' => 'i_police',
842        'format' => _format_CHAINE,
843        'defaut' => "'dustismo.ttf'",
844));
845add_outil( array(
846        'id' => 'titres_typo',
847        'categorie'   => 'typo-corr',
848        'code:options' => 'define("_titres_typo_ARG", "couleur=%%i_couleur%%,taille=%%i_taille%%,police=%%i_police%%,largeur=%%i_largeur%%,hauteur_ligne=%%i_hauteur%%,padding=%%i_padding%%,align=%%i_align%%");',
849        defined('_SPIP19300')?'pipeline:pre_propre':'pipeline:pre_typo'   => 'titres_typo_pre_typo',
850        'pipelinecode:pre_description_outil' => 'if($id=="titres_typo")
851                $texte=str_replace("@_CS_FONTS@",join(" - ",get_liste_fonts()),$texte);',       
852));
853
854//-----------------------------------------------------------------------------//
855//                               PUBLIC                                        //
856//-----------------------------------------------------------------------------//
857
858// TODO : gestion du jQuery dans la fonction a revoir ?
859add_outil( array(
860        'id' => 'desactiver_flash',
861        'auteur'         => 'C&eacute;dric MORIN',
862        'categorie'      => 'public',
863        'jquery'        => 'oui',
864        // fonction InhibeFlash_init() codee dans desactiver_flash.js : executee lors du chargement de la page et a chaque hit ajax
865        'code:jq_init' => 'InhibeFlash_init.apply(this);',
866));
867
868add_variables( array(
869        'nom' => 'radio_target_blank3',
870        'format' => _format_NOMBRE,
871        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
872        'defaut' => 0,
873        'code' => '$GLOBALS["tweak_target_blank"]=%s;',
874), array(
875        'nom' => 'url_glossaire_externe2',
876        'format' => _format_CHAINE,
877        'defaut' => '""',
878        'code:strlen(%s)' => '$GLOBALS["url_glossaire_externe"]=%s;',
879), array(
880        'nom' => 'enveloppe_mails',
881        'format' => _format_NOMBRE,
882        'radio' => array(1 => 'item_oui', 0 => 'item_non', -1 => 'couteauprive:par_defaut'),
883        'defaut' => -1,
884        // Code pour le CSS
885        'code:%s>0' => 'a.spip_mail:before{content:"\002709" !important;}',
886        'code:%s===0' => 'a.spip_mail:before{content:"" !important;}',
887));
888add_outil( array(
889        'id' => 'SPIP_liens',
890        'categorie' => 'public',
891        'contrib'       => 2443,
892        'jquery'        => 'oui',
893        'description' => '<:SPIP_liens::>'.(defined('_SPIP19300')?'<:SPIP_liens:1:>':''),
894        'code:options' => "%%radio_target_blank3%%\n%%url_glossaire_externe2%%",
895        'code:jq_init' => 'if(%%radio_target_blank3%%) { if(!cs_prive) jQuery("a.spip_out,a.spip_url,a.spip_glossaire",this).attr("target", "_blank"); }',
896        'code:css' => defined('_SPIP19300')?'[[%enveloppe_mails%]]':NULL,
897));
898
899add_variables( array(
900        'nom' => 'tout_rub',
901        'check' => 'icone_rubriques',
902        'defaut' => 0,
903), array(
904        'nom' => 'tout_aut',
905        'check' => 'icone_auteurs',
906        'defaut' => 0,
907));
908add_outil( array(
909        'id' => 'aff_tout',
910        'categorie' => 'public',
911        'auteur' => 'b_b',
912        'description' => '<:aff_tout::>[[%tout_rub%]][[->%tout_aut%]]',
913        'pipelinecode:pre_boucle' =>
914'if(%%tout_rub%%) {if($flux->type_requete == \'rubriques\' && !isset($flux->modificateur[\'criteres\'][\'statut\']))
915        $flux->modificateur[\'criteres\'][\'statut\'] = true;}
916if(%%tout_aut%%) {if($flux->type_requete == \'auteurs\' && !isset($flux->modificateur[\'criteres\'][\'statut\']))
917        $flux->modificateur[\'criteres\'][\'statut\'] = true;}',
918));
919
920//-----------------------------------------------------------------------------//
921//                               NOISETTES                                     //
922//-----------------------------------------------------------------------------//
923
924add_outil( array(
925        'id' => 'visiteurs_connectes',
926        'auteur' => "Phil d'apr&egrave;s spip-contrib",
927        'categorie' => 'public',
928        'contrib'       => 3412,
929        'code:options' => "
930function cs_compter_visiteurs(){ return count(preg_files(_DIR_TMP.'visites/','.')); }
931function action_visiteurs_connectes(){ echo cs_compter_visiteurs(); return true; }",
932        'version-min' => '1.9200', // pour la balise #ARRAY
933        'pipelinecode:pre_description_outil' => 'if($id=="visiteurs_connectes") if($GLOBALS["meta"]["activer_statistiques"]!="oui")
934                $texte.="\n\n<spanred>"._T("couteauprive:visiteurs_connectes:inactif")."</span>";',
935
936        //      une mise a jour toutes les 120 sec ?
937/*      'code:js' => 'function Timer_visiteurs_connectes(){
938                jQuery("span.cs_nb_visiteurs").load("spip.php?action=visiteurs_connectes");
939                setTimeout("Timer_visiteurs_connectes()",120000);                                       
940}',
941        'code:jq' => ' if(jQuery("span.cs_nb_visiteurs").length) Timer_visiteurs_connectes(); ',
942        'jquery' => 'oui',*/
943));
944
945//-----------------------------------------------------------------------------//
946//                               TYPO                                          //
947//-----------------------------------------------------------------------------//
948
949add_outil( array(
950        'id' => 'toutmulti',
951        'categorie'      => 'typo-racc',
952        'pipeline:pre_typo' => 'ToutMulti_pre_typo',
953));
954
955add_variable( array(    // variable utilisee par 'pipelinecode:insert_head'
956        'nom' => 'puceSPIP',
957        'check' => 'couteauprive:puceSPIP',
958        'defaut' => 0,
959        'label' => '@_CS_CHOIX@',
960));
961add_outil( array(
962        'id' => 'pucesli',
963        'auteur'         => "J&eacute;r&ocirc;me Combaz pour l'id&eacute;e originale",
964        'categorie'      => 'typo-corr',
965        'pipelinecode:pre_typo' => 'if(strpos($flux, "-")!==false OR strpos($flux, "*")!==false) $flux = cs_echappe_balises("", "pucesli_remplace", $flux);',
966        'code:options' => 'function pucesli_remplace($texte) {
967        if(%%puceSPIP%%) {$texte = preg_replace(\'/^[*]\s*/m\', \'- \', $texte);}
968        return preg_replace(\'/^-\s*(?![-*#])/m\', \'-* \', $texte);
969}
970if(%%puceSPIP%%) {function pucesli_raccourcis() {return _T(\'couteauprive:puceSPIP_aide\');}}',
971));
972
973add_outil( array(
974    'id' => 'citations_bb',
975    'auteur'    => 'Bertrand Marne, Romy T&ecirc;tue',
976    'categorie' => 'typo-corr',
977        'code:css'      => '/* Specifie des paires de guillemets sur plusieurs niveaux pour chaque langue */
978/* Cf.: http://www.yoyodesign.org/doc/w3c/css2/generate.html#quotes-specify */
979q { quotes: \'"\' \'"\' "\'" "\'" }
980/* Guillemets selon la langue du texte */
981:lang(fr) q { quotes: "\00AB\A0" "\A0\00BB" "\201C" "\201D" "\2018" "\2019"; }
982:lang(en) q { quotes: "\201C" "\201D" "\2018" "\2019" }
983:lang(es) q { quotes: "\00AB" "\00BB" "\201C" "\201D"; }
984:lang(it) q { quotes: "\00AB\A0" "\A0\00BB" "\201C" "\201D"; }
985:lang(de) q { quotes: "\00BB" "\00AB" ">" "<" }
986:lang(no) q { quotes: "\00AB\A0" "\A0\00BB" "<" ">" }
987/* Insere des guillemets avant et apres le contenu d\'un element Q */
988q:before { content: open-quote; }
989q:after { content: close-quote; }
990/* IE */
991* html q { font-style: italic; }
992*+html q { font-style: italic; }', 
993    'pipelinecode:pre_propre' => 'if(strpos($flux, "<qu")!==false) $flux=cs_echappe_balises("", "citations_bb_rempl", $flux);',
994        // Remplacer <quote> par <q> quand il n'y a pas de retour a la ligne (3 niveaux, preg sans l'option s)
995    'code:options' => 'function citations_bb_rempl($texte){
996        $texte = preg_replace($a="/<quote>(.*?)<\/quote>/", $b="<q>\$1</q>", $texte);
997        if(strpos($texte, "<qu")!==false) {
998                $texte = preg_replace($a, $b, $texte);
999                if(strpos($texte, "<qu")!==false) $texte = preg_replace($a, $b, $texte);
1000        }
1001        return $texte;
1002}',
1003)); 
1004
1005add_variable( array(
1006        'nom' => 'decoration_styles',
1007        'format' => _format_CHAINE,
1008        'lignes' => 8,
1009        'defaut' => '"span.sc = font-variant:small-caps;
1010span.souligne = text-decoration:underline;
1011span.barre = text-decoration:line-through;
1012span.dessus = text-decoration:overline;
1013span.clignote = text-decoration:blink;
1014span.surfluo = background-color:#ffff00; padding:0px 2px;
1015span.surgris = background-color:#EAEAEC; padding:0px 2px;
1016fluo = surfluo"',
1017        'code:trim(%s)' => 'function _decoration_BALISES() { return trim(%s); }',
1018));
1019add_outil( array(
1020        'id' => 'decoration',
1021        'auteur'         => 'izo@aucuneid.net, Pat',
1022        'contrib'       => 2427,
1023        'categorie'      => 'typo-racc',
1024        'code:options' => "%%decoration_styles%%",
1025        'pipeline:pre_typo' => 'decoration_pre_typo',
1026        'pipeline:bt_toolbox' => 'decoration_BarreTypo',
1027        'pipeline:porte_plume_barre_pre_charger' => 'decoration_PP_pre_charger',
1028        'pipeline:porte_plume_lien_classe_vers_icone' => 'decoration_PP_icones',
1029));
1030
1031add_variables( array(
1032        'nom' => 'couleurs_fonds',
1033        'format' => _format_NOMBRE,
1034        'radio' => array(1 => 'item_oui', 0 => 'item_non' ),
1035        'defaut' => 1,
1036        'code' => "define('_COULEURS_FONDS', %s);\n",
1037), array(
1038        'nom' => 'set_couleurs',
1039        'format' => _format_NOMBRE,
1040        'radio' => array(0 => 'couteauprive:toutes_couleurs', 1 => 'couteauprive:certaines_couleurs'),
1041        'radio/ligne' => 1,
1042        'defaut' => 0,
1043        'code' => "define('_COULEURS_SET', %s);\n",
1044), array(
1045        'nom' => 'couleurs_perso',
1046        'format' => _format_CHAINE,
1047        'lignes' => 3,
1048        'defaut' => '"gris, rouge"',
1049        'code' => "define('_COULEURS_PERSO', %s);",
1050));
1051add_outil( array(
1052        'id' => 'couleurs',
1053        'auteur'         => 'Aur&eacute;lien PIERARD (id&eacute;e originale), Pat',
1054        'categorie'      => 'typo-racc',
1055        'contrib'       => 2427,
1056        'pipeline:pre_typo' => 'couleurs_pre_typo',
1057        'pipeline:nettoyer_raccourcis_typo' => 'couleurs_nettoyer_raccourcis',
1058        'pipeline:bt_toolbox' => 'couleurs_BarreTypo',
1059        'pipeline:porte_plume_barre_pre_charger' => 'couleurs_PP_pre_charger',
1060        'pipeline:porte_plume_lien_classe_vers_icone' => 'couleurs_PP_icones',
1061        'pipeline:pre_description_outil' => 'couleurs_pre_description_outil',
1062        'code:options' => "%%couleurs_fonds%%%%set_couleurs%%%%couleurs_perso%%",
1063        'code:fonctions' => "// aide le Couteau Suisse a calculer la balise #INTRODUCTION
1064include_spip('outils/couleurs');
1065\$GLOBALS['cs_introduire'][] = 'couleurs_nettoyer_raccourcis';
1066",
1067));
1068
1069// outil essentiellement français. D'autres langues peuvent etre ajoutees dans outils/typo_exposants.php
1070add_variable( array(
1071        'nom' => 'expo_bofbof',
1072        'format' => _format_NOMBRE,
1073        'radio' => array(1 => 'item_oui', 0 => 'item_non' ),
1074        'defaut' => 0,
1075        'code:%s' => "define('_CS_EXPO_BOFBOF', %s);",
1076));
1077add_outil( array(
1078        'id' => 'typo_exposants',
1079        'auteur'         => 'Vincent Ramos, Pat',
1080        'categorie'      => 'typo-corr',
1081        'contrib'       => 1564,
1082        'code:options' => '%%expo_bofbof%%',
1083        'pipeline:post_typo' => 'typo_exposants',
1084        'code:css' => 'sup, sup.typo_exposants { font-size:78%; font-variant:inherit; vertical-align:23%; }',
1085));
1086
1087add_outil( array(
1088        'id' => 'guillemets',
1089        'auteur'         => 'Vincent Ramos',
1090        'categorie'      => 'typo-corr',
1091        'pipeline:post_typo' => 'typo_guillemets',
1092));
1093
1094add_variables( array(
1095        'nom' => 'liens_interrogation',
1096        'format' => _format_NOMBRE,
1097        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
1098        'defaut' => 1,
1099        'code:%s' => "\$GLOBALS['liens_interrogation']=true;\n",
1100), array(
1101        'nom' => 'liens_orphelins',
1102        'format' => _format_NOMBRE,
1103        'radio' => array(-1 => 'item_non', 0 => 'couteauprive:basique', 1 => 'couteauprive:etendu', -2 => 'couteauprive:par_defaut'),
1104        'defaut' => 0,
1105        'code' => '$GLOBALS["liens_orphelins"]=%s;',
1106                // empeche SPIP de convertir les URLs orphelines (URLs brutes)
1107        'code:%s<>-2' => defined('_SPIP19300')?"\n// Pas de traitement automatique des liens orphelins :\n\$GLOBALS['spip_pipeline']['pre_liens']=str_replace('|traiter_raccourci_liens','',\$GLOBALS['spip_pipeline']['pre_liens']);
1108@define('_EXTRAIRE_LIENS',',^\$,');":'',
1109), array(
1110        'nom' => 'long_url',
1111        'format' => _format_NOMBRE,
1112        'defaut' => 40,
1113        'code:%s' => "define('_MAX_LONG_URL', %s);",
1114), array(
1115        'nom' => 'coupe_url',
1116        'format' => _format_NOMBRE,
1117        'defaut' => 35,
1118        'code:%s' => "define('_MAX_COUPE_URL', %s);",
1119));
1120// attention : liens_orphelins doit etre place avant mailcrypt ou liens_en_clair
1121add_outil( array(
1122        'id' => 'liens_orphelins',
1123        'categorie'      => 'typo-corr',
1124        'contrib'       => 2443,
1125        'code:options' => '%%liens_interrogation%%',
1126        'code:spip_options' => '%%liens_orphelins%%%%long_url%%%%coupe_url%%',
1127        'pipeline:pre_propre' => 'liens_orphelins_pipeline',
1128        'traitement:EMAIL' => 'expanser_liens(liens_orphelins',
1129        'pipeline:pre_typo'   => 'interro_pre_typo',
1130        'pipeline:post_propre'   => 'interro_post_propre',
1131        'description' => defined('_SPIP19300')?'<:liens_orphelins::><liens_orphelins valeur="0/1/-2"><:liens_orphelins:1:></liens_orphelins>':'<:liens_orphelins::>',
1132));
1133
1134add_outil( array(
1135        'id' => 'filets_sep',
1136        'auteur'         => 'FredoMkb',
1137        'categorie'      => 'typo-racc',
1138        'contrib'       => 1563,
1139        'pipeline:pre_typo' => 'filets_sep',
1140        'pipeline:bt_toolbox' => 'filets_sep_BarreTypo',
1141        'pipeline:porte_plume_barre_pre_charger' => 'filets_PP_pre_charger',
1142        'pipeline:porte_plume_lien_classe_vers_icone' => 'filets_PP_icones',
1143));
1144
1145add_outil( array(
1146        'id' => 'smileys',
1147        'auteur'         => "Sylvain, Pat",
1148        'categorie'      => 'typo-corr',
1149        'contrib'       => 1561,
1150        'code:css' => "table.cs_smileys td {text-align:center; font-size:90%; font-weight:bold;}",
1151        'pipeline:pre_typo' => 'cs_smileys_pre_typo',
1152        'pipeline:bt_toolbox' => 'cs_smileys_BarreTypo',
1153        'pipeline:porte_plume_barre_pre_charger' => 'cs_smileys_PP_pre_charger',
1154        'pipeline:porte_plume_lien_classe_vers_icone' => 'cs_smileys_PP_icones',
1155));
1156
1157add_outil( array(
1158        'id' => 'chatons',
1159        'auteur'         => "BoOz, Pat",
1160        'categorie'      => 'typo-racc',
1161        'pipeline:pre_typo' => 'chatons_pre_typo',
1162        'pipeline:bt_toolbox' => 'chatons_BarreTypo',
1163        'pipeline:porte_plume_barre_pre_charger' => 'chatons_PP_pre_charger',
1164        'pipeline:porte_plume_lien_classe_vers_icone' => 'chatons_PP_icones',
1165));
1166
1167add_variables( array(
1168        'nom' => 'glossaire_groupes',
1169        'format' => _format_CHAINE,
1170        'defaut' => "'Glossaire'",
1171        'code' => "\$GLOBALS['glossaire_groupes']=%s;\n",
1172        'commentaire' => defined('_SPIP19300')?'fct_glossaire_groupes(%s);
1173function fct_glossaire_groupes($gr){
1174        $s="";
1175        foreach(explode(":",$gr) as $g)
1176                if(!sql_countsel("spip_groupes_mots", "titre="._q($g))) $s.=($s?"<br />":"")._T("couteauprive:erreur_groupe", array("groupe"=>$g));
1177        return $s?"<p style=\"color:red\">$s</p>":"";
1178}':NULL,
1179), array(
1180        'nom' => 'glossaire_limite',
1181        'format' => _format_NOMBRE,
1182        'defaut' => 0,
1183        'code:%s>0' => "define('_GLOSSAIRE_LIMITE', %s);\n",
1184), array(
1185        'nom' => 'glossaire_js',
1186        'radio' => array(0 => 'couteauprive:glossaire_css', 1 => 'couteauprive:glossaire_js'),
1187        'format' => _format_NOMBRE,
1188        'defaut' => 1,
1189        'code:%s' => "define('_GLOSSAIRE_JS', %s);",
1190), array(
1191        'nom' => 'glossaire_abbr',
1192        'check' => 'couteauprive:glossaire_abbr',
1193        'defaut' => 1,
1194        'format' => _format_NOMBRE,
1195        'code:!%s' => "@define('_GLOSSAIRE_ECHAPPER', 'html|code|cadre|frame|script|cite|a');",
1196));
1197add_outil( array(
1198        'id' => 'glossaire',
1199        'categorie'     => 'typo-corr',
1200        'contrib'       => 2206,
1201        'code:options' => "@define('_CS_SANS_GLOSSAIRE', '[!glossaire]');\n%%glossaire_limite%%%%glossaire_groupes%%%%glossaire_js%%%%glossaire_abbr%%",
1202//      'traitement:LIEU:post_propre' => 'cs_glossaire',
1203        // sans oublier les articles, les breves, les forums et les rubriques !
1204        // SPIP ne considere pas que la premiere definition est un tronc commun...
1205        // meme traitement au chapo des articles...
1206        'traitement:TEXTE:post_propre,
1207         traitement:TEXTE/articles:post_propre,
1208         traitement:TEXTE/breves:post_propre,
1209         traitement:TEXTE/forums:post_propre,
1210         traitement:TEXTE/rubriques:post_propre,
1211         traitement:CHAPO:post_propre' => 'cs_glossaire',
1212        // Precaution pour les articles virtuels (SPIP < 3.0)
1213        defined('_SPIP30000')?'foo':'traitement:CHAPO:pre_propre' => 'nettoyer_chapo',
1214        // Mise en forme des titres
1215        'traitement:TITRE/mots:post_typo' => 'cs_glossaire_titres',
1216        'code:css' =>  'a.cs_glossaire:after {display:none;}',
1217        // fonction glossaire_init() codee dans glossaire.js : executee lors du chargement de la page et a chaque hit ajax
1218        'code:jq_init' => 'glossaire_init.apply(this);',
1219        'pipelinecode:nettoyer_raccourcis_typo' => '$flux=str_replace(_CS_SANS_GLOSSAIRE, "", $flux);',
1220));
1221
1222// attention : mailcrypt doit etre place apres liens_orphelins
1223add_variables( array(
1224        'nom' => 'balise_email',
1225        'check' => 'couteauprive:mailcrypt_balise_email',
1226        'defaut' => 1,
1227        'label' => '@_CS_CHOIX@',
1228        'code:%s' => "define('_MAILCRYPT_TRAITE_EMAIL', '1');\n",
1229), array(
1230        'nom' => 'fonds_demailcrypt',
1231        'check' => 'couteauprive:mailcrypt_fonds',
1232        'defaut' => 0,
1233        'label' => '@_CS_CHOIX@',
1234), array(
1235        'nom' => 'fonds_demailcrypt2',
1236        'format' => _format_CHAINE,
1237        'lignes' => 4,
1238        'defaut' => '"saisies-vues/_base:\notifications/formulaire_email:\nnotifications/formulaire_accuse"',
1239        'code' => "if(%%fonds_demailcrypt%%) define('_MAILCRYPT_FONDS_DEMAILCRYPT', %s);",
1240));
1241add_outil( array(
1242        'id' => 'mailcrypt',
1243        'categorie'     => 'securite',
1244        'auteur'        => "Alexis Roussel, Paolo, Pat",
1245        'contrib'       => 2443,
1246        'jquery'        => 'oui',
1247        'code:options' => '%%balise_email%%%%fonds_demailcrypt2%%',
1248        'description' => '<:mailcrypt::>[[%balise_email%]][[->%fonds_demailcrypt%]][[->%fonds_demailcrypt2%]]',
1249        'pipelinecode:post_propre' => "if(strpos(\$flux, '@')!==false) \$flux=cs_echappe_balises('', 'mailcrypt', \$flux);",
1250        'code:js' => "function lancerlien(a,b){ x='ma'+'ilto'+':'+a+'@'+b; return x; }",
1251        // jQuery pour remplacer l'arobase image par l'arobase texte
1252        // ... puis arranger un peu le title qui a ete protege
1253        'code:jq_init' => "jQuery('span.spancrypt', this).attr('class','cryptOK').html('&#6'+'4;');
1254        jQuery(\"a[\"+cs_sel_jQuery+\"title*='..']\", this).each(function () {
1255                this.title = this.title.replace(/\.\..t\.\./,'[@]');
1256        });",
1257        'code:css' => 'span.spancrypt {background:transparent url(' . url_absolue(find_in_path('img/mailcrypt/leure.gif'))
1258                . ') no-repeat scroll 0.1em center; padding-left:12px; text-decoration:none;}',
1259        'traitement:EMAIL' => 'mailcrypt_email_dist',
1260                'pipeline:recuperer_fond'   => 'mailcrypt_recuperer_fond',
1261        // compatibilite avec le plugin facteur
1262        'pipelinecode:facteur_pre_envoi'   => 'include_spip("public/parametrer"); // charger mes_fonctions
1263$flux->Body = maildecrypt($flux->Body);
1264$flux->AltBody = maildecrypt($flux->AltBody);',
1265)); 
1266
1267
1268// attention : liens_en_clair doit etre place apres tous les outils traitant des liens
1269add_outil( array(
1270        'id' => 'liens_en_clair',
1271        'categorie'      => 'spip',
1272        'contrib'       => 2443,
1273        'pipeline:post_propre' => 'liens_en_clair_post_propre',
1274        'code:css' => 'a.spip_out:after {display:none;}',
1275)); 
1276
1277add_variables( array(   // variable utilisee par 'pipelinecode:insert_head'
1278        'nom' => 'scrollTo',
1279        'check' => 'couteauprive:jq_scrollTo',
1280        'defaut' => 1,
1281        'format' => _format_NOMBRE,
1282), array(       // variable utilisee par 'pipelinecode:insert_head'
1283        'nom' => 'LocalScroll',
1284        'check' => 'couteauprive:jq_localScroll',
1285        'defaut' => 1,
1286        'format' => _format_NOMBRE,
1287));
1288add_outil( array(
1289        'id' => 'soft_scroller',
1290        'categorie'     => 'public',
1291        'jquery'        => 'oui',
1292        'pipelinecode:insert_head' => 'if(%%scrollTo%%) {$flux.=\'<script src="\'.find_in_path("outils/jquery.scrollto.js").\'" type="text/javascript"></script>\'."\n";}
1293if(%%LocalScroll%%) {$flux.=\'<script src="\'.find_in_path("outils/jquery.localscroll.js").\'" type="text/javascript"></script>\'."\n";}',
1294        'code:js' => 'function soft_scroller_init() { if(typeof jQuery.localScroll=="function") jQuery.localScroll({hash: true}); }',
1295        'code:jq_init' => 'soft_scroller_init.apply(this);',
1296));
1297
1298// http://www.malsup.com/jquery/corner/
1299add_variables( array(
1300        'nom' => 'jcorner_classes',
1301        'format' => _format_CHAINE,
1302        'lignes' => 10,
1303        'defaut' => defined('_SPIP19300')?'"// coins ronds aux formulaires
1304.formulaire_inscription, .formulaire_forum, .formulaire_ecrire_auteur
1305
1306// colorisation de la dist de SPIP 2.0 en ajoutant un parent
1307\".chapo, .texte\" = wrap(\'<div class=\"jc_parent\" style=\"padding:4px; background-color:#ffe0c0; margin:4px 0;\"><\/div>\')
1308\".menu\" = wrap(\'<div class=\"jc_parent\" style=\"padding:4px; background-color:lightBlue; margin:4px 0;\"><\/div>\')
1309
1310// coins ronds aux parents !
1311.jc_parent"'
1312                :'" // coins ronds pour les menus de navigation
1313.rubriques, .breves, .syndic, .forums, .divers
1314
1315 // en couleurs sur l\'accueil
1316.liste-articles li .texte = css(\'background-color\', \'#E0F0F0\') .corner()
1317
1318// colorisation de la dist de SPIP 1.92 en ajoutant un parent
1319\"#contenu .texte\" = wrap(\'<div class=\"jc_parent\" style=\"padding:4px; background-color:#E0F0F0; margin:4px 0;\"><\/div>\')
1320
1321// coins ronds aux parents !
1322.jc_parent"',
1323        'code:trim(%s)' => 'function _jcorner_CLASSES() { return trim(%s); }',
1324), array(       // variable utilisee par 'pipelinecode:insert_head'
1325        'nom' => 'jcorner_plugin',
1326        'check' => 'couteauprive:jcorner_plugin',
1327        'defaut' => 1,
1328        'format' => _format_NOMBRE,
1329));
1330add_outil( array(
1331        'id' => 'jcorner',
1332        'categorie'     => 'public',
1333        'jquery'        => 'oui',
1334        'contrib'       => 2987,
1335        'code:options' => "%%jcorner_classes%%",
1336        // fichier distant pour le plugin jQuery : http://github.com/malsup/corner/commits/
1337        'distant' => defined('_SPIP20100')
1338                // version 2.12 (23-MAY-2011), jQuery v1.3.2 mini
1339                ?'http://github.com/malsup/corner/raw/7ebb1bfc911faaa029d0b229303187f6c5cc5c07/jquery.corner.js'
1340                // version 2.03 (05-DEC-2009)
1341                :'http://github.com/malsup/corner/raw/46bbbc8706853c879c9224b7ebf5f284f726314d/jquery.corner.js',
1342        'pipelinecode:insert_head' => 'if(%%jcorner_plugin%%) {$flux.=\'<script src="\'.find_in_path("lib/jcorner/distant_jquery.corner.js").\'" type="text/javascript"></script>\'."\n";}',
1343        'pipeline:insert_head' => 'jcorner_insert_head',
1344        // jcorner_init() n'est disponible qu'en partie publique
1345        'code:jq_init' => 'if(typeof jcorner_init=="function") jcorner_init.apply(this);',
1346));
1347
1348add_variables( array(
1349        'nom' => 'insertions',
1350        'format' => _format_CHAINE,
1351        'lignes' => 10,
1352        'defaut' => '"oeuf = &oelig;uf
1353cceuil = ccueil
1354(a priori) = {a priori}
1355(([hH])uits) = $1uit
1356/([cC]h?)oeur/ = $1&oelig;ur
1357/oeuvre/ = &oelig;uvre
1358(O[Ee]uvre([rs]?)) = &OElig;uvre$1
1359/\b([cC]|[mM].c|[rR]ec)on+ais+a((?:n(?:ce|te?)|ble)s?)\b/ = $1onnaissa$2
1360"',
1361        'code' => 'function _insertions_LISTE() { return trim(%s); }',
1362));
1363add_outil( array(
1364        'id' => 'insertions',
1365        'categorie'      => 'typo-corr',
1366        'code:options' => "%%insertions%%",
1367        // sans oublier les articles, les breves, les forums et les rubriques !
1368        // SPIP ne considere pas que la premiere definition est un tronc commun :
1369        'traitement:CHAPO:pre_propre,
1370         traitement:PS:pre_propre,
1371         traitement:TEXTE:pre_propre,
1372         traitement:TEXTE/articles:pre_propre,
1373         traitement:TEXTE/breves:pre_propre,
1374         traitement:TEXTE/forums:post_propre,
1375         traitement:TEXTE/rubriques:pre_propre' => 'insertions_pre_propre',
1376));
1377
1378// le plugin moderation moderee dans le couteau suisse
1379include_spip('inc/charsets');
1380add_outil( array(
1381        'id' => 'moderation_moderee',
1382        'auteur' => 'Yohann(potter64)',
1383        'categorie' => 'admin',
1384        'version-min' => '1.9300',
1385        'code:options' => '%%moderation_admin%%%%moderation_redac%%%%moderation_visit%%',
1386        'code:jq_init' => 'if(window.location.search.match(/page=forum/)!=null) jQuery("legend:contains(\''
1387                .addslashes(unicode2charset(html2unicode(_T((defined('_SPIP30000')?'forum:':'').'bouton_radio_modere_priori')))).'\')", this).next().html(\''
1388                .addslashes(_T('couteauprive:moderation_message')).'\');',
1389        'pipeline:pre_edition' => 'moderation_vip',
1390));
1391add_variables( array(
1392        'nom' => 'moderation_admin',
1393        'check' => 'couteauprive:moderation_admins',
1394        'defaut' => 1,
1395        'code:%s' => "define('_MOD_MOD_0minirezo',%s);",
1396), array(
1397        'nom' => 'moderation_redac',
1398        'check' => 'couteauprive:moderation_redacs',
1399        'defaut' => 0,
1400        'code:%s' => "define('_MOD_MOD_1comite',%s);",
1401), array(
1402        'nom' => 'moderation_visit',
1403        'check' => 'couteauprive:moderation_visits',
1404        'defaut' => 0,
1405        'code:%s' => "define('_MOD_MOD_6forum',%s);",
1406));
1407
1408add_outil( array(
1409        'id' => 'titre_parent',
1410        'categorie' => 'spip',
1411        'contrib' => 2900,
1412        'code:options' => '%%titres_etendus%%',
1413));
1414add_variable( array(
1415        'nom' => 'titres_etendus',
1416        'check' => 'couteauprive:titres_etendus',
1417        'format' => _format_NOMBRE,
1418        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
1419        'defaut' => 0,
1420        'code:%s' => "define('_PARENTS_ETENDUS',%s);",
1421));
1422
1423add_outil( array(
1424        'id' => 'balise_set',
1425        'categorie' => 'spip',
1426));
1427
1428add_outil( array(
1429        'id' => 'corbeille',
1430        'categorie' => 'admin',
1431        'version-min' => '1.9300',
1432        'code:options' => "%%arret_optimisation%%",
1433));
1434add_variable( array(
1435        'nom' => 'arret_optimisation',
1436        'format' => _format_NOMBRE,
1437        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
1438        'defaut' => 0,
1439        'code:%s' => "define('_CORBEILLE_SANS_OPTIM', 1);
1440if(!function_exists('genie_optimiser')) {
1441        // surcharge de la fonction d'optimisation de SPIP (inc/optimiser.php)
1442        function genie_optimiser(\$t='foo'){ if(include_spip('optimiser','genie')) optimiser_base_une_table(); return -(mktime(2,0,0) + rand(0, 3600*4)); }\n}",
1443));
1444
1445add_outil( array(
1446        'id' => 'trousse_balises',
1447        'categorie' => 'spip',
1448        'contrib' => 3005,
1449));
1450
1451add_outil( array(
1452        'id' => 'horloge',
1453        'categorie' => 'spip',
1454        'contrib' => 2998,
1455        'pipelinecode:insert_head,
1456         pipelinecode:header_prive' => '$flux.=\'<script type="text/javascript" src="\'.generer_url_public(\'cout_dates.js\',\'lang=\'.$GLOBALS[\'spip_lang\']).\'"></script>
1457<script type="text/javascript" src="\'.find_in_path("outils/jquery.jclock.js").\'"></script>\'."\n";',
1458        'code:jq_init' => 'jclock_init.apply(this);',
1459));
1460
1461$cs_temp = defined('_SPIP30000')?array(
1462        'distant_action' => 'http://core.spip.org/projects/spip/repository/raw/branches/spip-2.1/ecrire/action/charger_plugin.php',
1463        'distant_inc' => 'http://core.spip.org/projects/spip/repository/raw/branches/spip-2.1/ecrire/inc/charger_plugin.php',
1464):(defined('_SPIP20100')?array():array(
1465        'version-min' => '1.9300',
1466        'distant' => 'http://core.spip.org/projects/spip/repository/raw/branches/spip-2.1/ecrire/genie/mise_a_jour.php',
1467));
1468add_outil(array_merge(array(
1469        'id' => 'maj_auto',
1470        'categorie' => 'securite',
1471        'contrib' => 3223,
1472        'pipelinecode:fichier_distant' => defined('_SPIP30000')
1473                ?'// rajeunissement pour SPIP3 (2e appel du pipeline)
1474if($flux["outil"]=="maj_auto" && isset($flux["texte"]) && strpos($flux["fichier_distant"],"action/charger_plugin.php")!==false)
1475        $flux["texte"] = str_replace(array("\'icon\'","include_spip(\'inc/install\');"), array("\'logo\'", "if(_request(\'cs_retour\')) return array(\'nom\'=>\$retour, \'suite\'=>\$suite, \'fichier\'=>\$fichier, \'tmp\'=>\$status[\'tmpname\']);\n\tinclude_spip(\'inc/install\');"), $flux["texte"]);':'',
1476), $cs_temp));
1477
1478// reglage des differents selecteurs en partie privee
1479add_outil( array(
1480        'id' => 'brouteur',
1481        'categorie' => 'interface',
1482        'code:spip_options' => "%%rubrique_brouteur%%%%select_mots_clefs%%%%select_min_auteurs%%%%select_max_auteurs%%"
1483));
1484add_variable( array(
1485        'nom' => 'rubrique_brouteur',
1486        'format' => _format_NOMBRE,
1487        'defaut' => 20,
1488        'code:%s' => "define('_SPIP_SELECT_RUBRIQUES', %s);"
1489));
1490add_variable( array(
1491        'nom' => 'select_mots_clefs',
1492        'format' => _format_NOMBRE,
1493        'defaut' => 50,
1494        'code:%s<>50' => "define('_MAX_MOTS_LISTE', %s);"
1495));
1496add_variable( array(
1497        'nom' => 'select_min_auteurs',
1498        'format' => _format_NOMBRE,
1499        'defaut' => 30,
1500        'code:%s<>30' => "define('_SPIP_SELECT_MIN_AUTEURS', %s);"
1501));
1502add_variable( array(
1503        'nom' => 'select_max_auteurs',
1504        'format' => _format_NOMBRE,
1505        'defaut' => 30,
1506        'code:%s<>30' => "define('_SPIP_SELECT_MAX_AUTEURS', %s);"
1507));
1508
1509// largeur d'ecran de la partie privee
1510add_variable( array(
1511        'nom' => 'spip_ecran',
1512        'format' => _format_CHAINE,
1513        'radio' => array('defaut' => 'couteauprive:par_defaut', 'large' => 'spip:info_grand_ecran', 'etroit' => 'spip:info_petit_ecran'),
1514        'defaut' => 'defaut',
1515        'label' => '@_CS_CHOIX@',
1516        "code:%s!='defaut'" => "\$GLOBALS['spip_ecran']=\$_COOKIE['spip_ecran']=%s;",
1517));
1518add_outil( array(
1519        'id' => 'spip_ecran',
1520        'categorie' => 'interface',
1521        'code:spip_options' => '%%spip_ecran%%',
1522        'pipelinecode:header_prive' => '$e = _request(\'exec\');
1523if(( $e==\'configurer_preferences\' ||  $e==\'config_preferences\' /* SPIP < 3 */) && "%%spip_ecran%%"!="defaut") {
1524        $flux.=\'<script type="text/javascript"><!--
1525function disable_spip_ecran(){ jQuery("[name=\\"spip_ecran\\"]").attr("disabled", "disabled"); }
1526if(typeof onAjaxLoad=="function") onAjaxLoad(disable_spip_ecran);
1527if(window.jQuery) jQuery(document).ready(disable_spip_ecran);
1528//--></script>\'; }',
1529));
1530
1531add_variables( array(
1532        'nom' => 'alerte_message',
1533        'format' => _format_CHAINE,
1534        'lignes' => 6,
1535        'defaut' => '',
1536        'label' => _T('info_texte_message'),
1537        'code' => "define('_alerte_MESSAGE', %s);"
1538));
1539add_outil( array(
1540        'id' => 'alerte_urgence',
1541        'categorie' => 'public',
1542        'auteur' => 'Cerdic',
1543        'code:options' => '%%alerte_message%%',
1544        'pipelinecode:affichage_final' => 'if($GLOBALS[\'html\'] AND ($p=strpos($flux,\'</body>\'))!==false) {
1545                include_spip(\'public/assembler\');
1546                $flux = substr_replace($flux, recuperer_fond(\'fonds/alerte_urgence\'), $p, 0);
1547}',
1548));
1549
1550add_outil( array(
1551        'id' => 'sessions_anonymes',
1552        'categorie' => 'securite',
1553        'pipelinecode:taches_generales_cron' => '$flux[\'nettoyer_sessions_anonymes\'] = 7*24*3600;',
1554        'pipeline:pre_description_outil' => 'sessions_anonymes_pre_description_outil',
1555        'code:options' => 'function cron_nettoyer_sessions_anonymes() { genie_nettoyer_sessions_anonymes(); } // Pour SPIP 1.92
1556function genie_nettoyer_sessions_anonymes() { include_spip(\'outils/sessions_anonymes\'); cs_nettoyer_sessions_anonymes(); }',
1557        'version-max' => '17743', // SPIP 3.0 : c'est dans le core !
1558));
1559
1560// Recuperer tous les outils (et leurs variables) de la forme outils/toto_config.xml
1561foreach (find_all_in_path('outils/', '\w+_config\.xml$') as $f) {
1562        add_outils_xml($f);
1563}
1564
1565// Recuperer tous les outils de la forme outils/monoutil_config.php
1566// y compris les lames perso dont on met le nom en italiques
1567global $outils;
1568foreach (find_all_in_path('outils/', '\w+_config\.php$') as $f) 
1569if(preg_match(',^([^.]*)_config$,', basename($f, '.php'),$regs)){
1570        if($outil = charger_fonction($regs[0], 'outils')) $outil();
1571        /*else {
1572                // compatibilite ...   
1573                include $f;
1574                if(function_exists($cs_temp=$regs[1].'_add_outil')) {
1575                        $cs_temp = $cs_temp();
1576                        $cs_temp['id'] = $regs[1];
1577                        add_outil($cs_temp);
1578                }
1579        }*/
1580        if(isset($outils[$regs[1]]) && strncmp($f, _DIR_PLUGIN_COUTEAU_SUISSE, strlen(_DIR_PLUGIN_COUTEAU_SUISSE))!=0)
1581                $outils[$regs[1]]['perso'] = 1;
1582}
1583
1584// Nettoyage
1585unset($cs_temp);
1586
1587// Ajout des outils personnalises sous forme globale
1588if(isset($GLOBALS['mes_outils'])) {
1589        foreach($GLOBALS['mes_outils'] as $id=>$outil) {
1590                $outil['id'] = $id;
1591                $outil['perso'] = 1;
1592                add_outil($outil);
1593        }
1594        unset($GLOBALS['mes_outils']);
1595}
1596
1597// Idees d'ajouts :
1598// http://archives.rezo.net/spip-core.mbox/
1599// http://www.spip-contrib.net/Citations
1600// http://www.spip-contrib.net/la-balise-LESMOTS et d'autres balises #MAINTENANT #LESADMINISTRATEURS #LESREDACTEURS #LESVISITEURS
1601// http://www.spip-contrib.net/Ajouter-une-lettrine-aux-articles
1602// http://www.spip-contrib.net/Generation-automatique-de
1603// http://www.spip-contrib.net/Balise-LOGO-ARTICLE-ORITRAD
1604// boutonstexte
1605
1606//global $cs_variables; cs_log($cs_variables, 'cs_variables :');
1607?>
Note: See TracBrowser for help on using the repository browser.