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

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