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

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

Report de [65384] :

Donner le focus à l'élément vers lequel on a scrollé (particulièrement utile pour les liens d'évitement, pour le formulaire de recherche).

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