Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / inc / description_outil.php
1 <?php
2 #-----------------------------------------------------#
3 # Plugin : Couteau Suisse - Licence : GPL #
4 # Auteur : Patrice Vanneufville, 2006 #
5 # Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
6 # Infos : http://www.spip-contrib.net/?article2166 #
7 #-----------------------------------------------------#
8 if (!defined("_ECRIRE_INC_VERSION")) return;
9
10 define('_VAR_OUTIL', cs_code_echappement("<!-- VAR-OUTIL -->\n", 'OUTIL'));
11
12 // constantes utilisees dans la description des outils, sous forme @_CS_MACONSTANTE@
13
14 @define('_CS_EXEMPLE_COULEURS', '<br /><span style="font-weight:normal; font-size:85%;"><span style="background-color:black; color:white;">black/noir</span>, <span style="background-color:red;">red/rouge</span>, <span style="background-color:maroon;">maroon/marron</span>, <span style="background-color:green;">green/vert</span>, <span style="background-color:olive;">olive/vert&nbsp;olive</span>, <span style="background-color:navy; color:white;">navy/bleu&nbsp;marine</span>, <span style="background-color:purple;">purple/violet</span>, <span style="background-color:gray;">gray/gris</span>, <span style="background-color:silver;">silver/argent</span>, <span style="background-color:chartreuse;">chartreuse/vert&nbsp;clair</span>, <span style="background-color:blue;">blue/bleu</span>, <span style="background-color:fuchsia;">fuchsia/fuchia</span>, <span style="background-color:aqua;">aqua/bleu&nbsp;clair</span>, <span style="background-color:white;">white/blanc</span>, <span style="background-color:azure;">azure/bleu&nbsp;azur</span>, <span style="background-color:bisque;">bisque/beige</span>, <span style="background-color:brown;">brown/brun</span>, <span style="background-color:blueviolet;">blueviolet/bleu&nbsp;violet</span>, <span style="background-color:chocolate;">chocolate/brun&nbsp;clair</span>, <span style="background-color:cornsilk;">cornsilk/rose&nbsp;clair</span>, <span style="background-color:darkgreen;">darkgreen/vert&nbsp;fonce</span>, <span style="background-color:darkorange;">darkorange/orange&nbsp;fonce</span>, <span style="background-color:darkorchid;">darkorchid/mauve&nbsp;fonce</span>, <span style="background-color:deepskyblue;">deepskyblue/bleu&nbsp;ciel</span>, <span style="background-color:gold;">gold/or</span>, <span style="background-color:ivory;">ivory/ivoire</span>, <span style="background-color:orange;">orange/orange</span>, <span style="background-color:lavender;">lavender/lavande</span>, <span style="background-color:pink;">pink/rose</span>, <span style="background-color:plum;">plum/prune</span>, <span style="background-color:salmon;">salmon/saumon</span>, <span style="background-color:snow;">snow/neige</span>, <span style="background-color:turquoise;">turquoise/turquoise</span>, <span style="background-color:wheat;">wheat/jaune&nbsp;paille</span>, <span style="background-color:yellow;">yellow/jaune</span></span><span style="font-size:50%;"><br />&nbsp;</span>');
15 @define('_CS_EXEMPLE_COULEURS2', "\n-* <code>Lorem ipsum [rouge]dolor[/rouge] sit amet</code>\n-* <code>Lorem ipsum [red]dolor[/red] sit amet</code>.");
16 @define('_CS_EXEMPLE_COULEURS3', "\n-* <code>Lorem ipsum [fond rouge]dolor[/fond rouge] sit amet</code>\n-* <code>Lorem ipsum [bg red]dolor[/bg red] sit amet</code>.");
17 @define('_CS_ASTER', '<sup>(*)</sup>');
18 @define('_CS_DIR_TMP', cs_canonicalize(_DIR_RESTREINT_ABS._DIR_TMP));
19 @define('_CS_FORUM_NOM', _T('forum_votre_nom'));
20 @define('_CS_TRAVAUX_TITRE', '<i>'._T('info_travaux_titre').'</i>');
21 @define('_CS_NOM_SITE', '<i>'.$GLOBALS['meta']['nom_site'].'</i>');
22 @define('_CS_CHOIX', _T('couteauprive:votre_choix'));
23
24 // fin des constantes
25
26 include_spip('inc/actions');
27 include_spip('inc/texte');
28 include_spip('inc/layer');
29 include_spip('inc/presentation');
30 include_spip('inc/message_select');
31
32 // retourne le code html qu'il faut pour fabriquer le formulaire de l'outil proprietaire
33 function description_outil_une_variable($index, $outil, $variable, $label, &$ok_input_, &$ok_valeur_) {
34 global $cs_variables, $metas_vars;
35 $actif = $outil['actif'];
36 // la valeur de la variable n'est stockee dans les metas qu'au premier post
37 if (isset($metas_vars[$variable])) $valeur = $metas_vars[$variable];
38 else $valeur = cs_get_defaut($variable);
39 $valeur = cs_retire_guillemets($valeur);
40 //cs_log(" -- description_outil_une_variable($index) - Traite %$variable%");
41 $cs_variable = &$cs_variables[$variable];
42
43 // si la variable necessite des boutons radio
44 if (is_array($radios = &$cs_variable['radio'])) {
45 $ok_input = $label;
46 $i = 0; $nb = intval($cs_variable['radio/ligne']);
47 foreach($radios as $code=>$traduc) {
48 $br = (($nb>0) && ( ++$i % $nb == 0))?'<br />':' ';
49 $ok_input .=
50 "<label><input id=\"label_{$variable}_$code\" type=\"radio\""
51 .($valeur==$code?' checked="checked"':'')." value=\"$code\" name=\"HIDDENCSVAR__$variable\"/>"
52 .($valeur==$code?'<b>':'')._T($traduc).($valeur==$code?'</b>':'')
53 ."</label>$br";
54 }
55 $ok_input .= _VAR_OUTIL;
56 $ok_valeur = $label.(strlen($valeur)?ucfirst(_T($radios[$valeur])):'&nbsp;-');
57 }
58 // ... ou une case a cocher
59 elseif (isset($cs_variable['check'])) {
60 $ok_input = $label;
61 $ok_input .= '<label><input type="checkbox" '.($valeur?' checked="checked"':'')." value=\"1\" name=\"HIDDENCSVAR__$variable\"/>"
62 .($valeur?'<b>':'')._T($cs_variable['check']).($valeur?'</b>':'').'</label>';
63
64 $ok_input .= _VAR_OUTIL;
65 $ok_valeur = $label._T($cs_variable['check'])._T($valeur?'couteauprive:2pts_oui':'couteauprive:2pts_non');
66 }
67 // ... ou un textarea ... ou une case input
68 else {
69 $len = $cs_variable['format']=='nombre'?4:0;
70 $width = $len?'':'style="width:100%;" ';
71 $lignes = $cs_variable['format']=='nombre'?0:strval($cs_variable['lignes']);
72 // else $len=strlen(strval($valeur));
73 $ok_input = $label .
74 ( $lignes < 2
75 // <html></html> empechera SPIP de modifier le contenu des <input> ou <textarea>
76 ?"<html><input name='HIDDENCSVAR__$variable' value=\""
77 . htmlspecialchars($valeur) . "\" type='text' size='$len' $width/></html>"
78 :"<html><textarea rows='$lignes' name='HIDDENCSVAR__$variable' $width>"
79 . htmlspecialchars($valeur) . '</textarea></html>'
80 ) . _VAR_OUTIL;
81 $ok_valeur = $label.'<html>'.(strlen($valeur)?nl2br(echapper_tags($valeur)):'&nbsp;'._T('couteauprive:variable_vide')).'</html>';
82 }
83 $ok_input_ .= $ok_input; $ok_valeur_ .= $ok_valeur;
84 }
85
86 function description_outil_input_callback($matches) {
87 return '<fieldset><legend>'._T('couteauprive:label:'.$matches[3]).'</legend><div style="margin:0;">'.$matches[1].'</div></fieldset>';
88 }
89 function description_outil_const_callback($matches) {
90 return constant($matches[1]);
91 }
92 function description_outil_descrip_callback($matches) {
93 return _T("couteauprive:$matches[1]:description$matches[2]");
94 }
95
96 // renvoie la description de $outil_ : toutes les %variables% ont ete remplacees par le code adequat
97 function inc_description_outil_dist($outil_, $url_self, $modif=false) {
98 global $outils, $cs_variables, $metas_vars;
99 $outil = &$outils[$outil_];
100 $actif = $outil['actif'];
101 $index = $outil['index'];
102 // la description de base est a priori dans le fichier de langue
103 $descrip = isset($outil['description'])?$outil['description']:_T('couteauprive:'.$outil['id'].':description');
104 // reconstitution d'une description eventuellement morcelee
105 // exemple : <:mon_outil:3:> est remplace par _T('couteauprive:mon_outil:description3')
106 $descrip = preg_replace_callback(',<:([a-zA-Z_][a-zA-Z0-9_-]*):([0-9]+):>,', 'description_outil_descrip_callback', $descrip);
107 // remplacement des zone input de format [[label->variable]]
108 $descrip = preg_replace(',(\[\[([^][]*)->([^]]*)\]\]),msS', '<fieldset><legend>\\2</legend><div style="margin:0;">\\3</div></fieldset>', $descrip);
109 // remplacement des zone input de format [[tata %variable% toto]] en utilisant _T('couteauprive:label:variable') comme label
110 $descrip = preg_replace_callback(',\[\[(([^][]*)%([a-zA-Z_][a-zA-Z0-9_]*)%([^]]*))\]\],msS', 'description_outil_input_callback', $descrip);
111 // remplacement des variables de format : %variable%
112 $t = preg_split(',%([a-zA-Z_][a-zA-Z0-9_]*)%,', $descrip, -1, PREG_SPLIT_DELIM_CAPTURE);
113
114 //cs_log("inc_description_outil_dist() - Parse la description de '$outil_'");
115 $ok_input = $ok_valeur = $ok_visible = '';
116 $outil['nb_variables'] = 0; $variables = array();
117 for($i=0;$i<count($t);$i+=2) if (isset($t[$i+1]) && strlen($var=trim($t[$i+1]))) {
118 // si la variable est presente on fabrique le input
119 if (isset($cs_variables[$var])) {
120 description_outil_une_variable(
121 $index + (++$outil['nb_variables']),
122 $outil, $var,
123 $t[$i],
124 $ok_input, $ok_valeur);
125 $variables[] = $var;
126 } else {
127 // probleme a regler dans config_outils.php !
128 $temp = $t[$i]."[$var?]"; $ok_input .= $temp; $ok_valeur .= $temp;
129 }
130 } else { $ok_input .= $t[$i]; $ok_valeur .= $t[$i]; }
131 $outil['variables'] = $variables;
132 $c = $outil['nb_variables'];
133
134 // bouton 'Modifier' : en dessous du texte s'il y a plusieurs variables, a la place de _VAR_OUTIL s'il n'y en a qu'une.
135 // attention : on ne peut pas modifier les variables si l'outil est inactif
136 if ($actif) {
137 $bouton = "<input type='submit' class='fondo' value=\"".($c>1?_T('couteauprive:modifier_vars', array('nb'=>$c)):_T('bouton_modifier'))."\" />";
138 if($c>1) $ok_input .= "<div style=\"margin-top: 0; text-align: right;\">$bouton</div>";
139 else $ok_input = str_replace(_VAR_OUTIL, $bouton, $ok_input);
140 } else
141 $ok_input = $ok_valeur . '<div style="margin-top: 0; text-align: right;">'._T('couteauprive:validez_page').' <span class="fondo" style="cursor:pointer; padding:0.2em;" onclick="submit_general('.$index.')">'._T('bouton_valider').'</span></div>';
142 // nettoyage...
143 $ok_input = str_replace(_VAR_OUTIL, '', $ok_input);
144 // HIDDENCSVAR__ pour eviter d'avoir deux inputs du meme nom...
145 $ok_visible .= $actif?str_replace("HIDDENCSVAR__", "", $ok_input):$ok_valeur;
146 $variables = urlencode(serialize($variables));
147 $res = "\n<div id='tweak$index-visible' >$ok_visible</div>";
148 if($c) {
149 $res = "\n<input type='hidden' value='$variables' name='variables'><input type='hidden' value='$outil_' name='outil'>"
150 . "\n<div id='tweak$index-input' style='position:absolute; visibility:hidden;' >$ok_input</div>"
151 . "\n<div id='tweak$index-valeur' style='position:absolute; visibility:hidden;' >$ok_valeur</div>\n"
152 . $res;
153 // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='')
154 $res = ajax_action_auteur('description_outil', $index, $url_self, "modif=oui&cmd=descrip&outil={$outil['id']}", "$res");
155 }
156 //cs_log(" FIN : inc_description_outil_dist({$outil['id']}) - {$outil['nb_variables']} variables(s) trouvee(s)");
157 $res = preg_replace(',(<br />)?</fieldset><fieldset><legend></legend>,', '', $res);
158 $res = str_replace('</label></div><div style="margin:0;"><label><input type="checkbox"', '</label>&nbsp;<label><input type="checkbox"', $res);
159 // remplacement des puces
160 $res = str_replace('@puce@', definir_puce(), $res);
161 // remplacement des constantes
162 $res = preg_replace_callback(',@(_CS_[a-zA-Z0-9_]+)@,', 'description_outil_const_callback', $res);
163
164 $modif=$modif?'<div style="font-weight:bold; color:green; margin:0.4em; text-align:center">&gt;&nbsp;'._T('couteauprive:vars_modifiees').'&nbsp;&lt;</div>':'';
165 return cs_ajax_action_greffe("description_outil-$index", $res, $modif);
166 }
167 ?>