source: spip-zone/_plugins_/couteau_suisse/inc/description_outil.php @ 34369

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

Sommaire automatique :

  • nouvelle variable sur la profondeur des intertitres traités
  • information sur la globale SPIP $GLOBALSdebut_intertitre?
  • compatibilité avec les blocs dépliables

Ensemble des outils : la liste des raccourcis typographiques reconnus par un outil est ajoutée à la description de l'outil concerné, s'il est actif.

File size: 12.3 KB
Line 
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#-----------------------------------------------------#
8if(!defined("_ECRIRE_INC_VERSION")) return;
9
10include_spip('inc/actions');
11include_spip('inc/texte');
12include_spip('inc/layer');
13include_spip('inc/presentation');
14include_spip('inc/message_select');
15
16define('_VAR_OUTIL', '@@CS_VAR_OUTIL@@');
17
18function cs_ajax_outil_greffe($idom, $corps)    {
19        // en fait, ajax uniquement si une modif est demandee...
20        return _request('modif')=='oui'
21                ?'<div class="cs_modif_ok">&gt;&nbsp;'._T('couteauprive:vars_modifiees')."&nbsp;&lt;</div>$corps"
22                :"\n<div id='$idom'>$corps\n</div>\n";
23}
24
25// initialise une variable et ne retourne rien si !$modif
26// sinon, cette fonction retourne le code html qu'il faut pour fabriquer le formulaire de l'outil proprietaire
27function description_outil_une_variable($index, &$outil, &$variable, &$label, &$modif) {
28        global $cs_variables, $metas_vars;
29        $actif = $outil['actif'];
30        // la valeur de la variable n'est stockee dans les metas qu'au premier post
31        if(isset($metas_vars[$variable])) $valeur = $metas_vars[$variable];
32                else $valeur = cs_get_defaut($variable);
33        $valeur = cs_retire_guillemets($valeur);
34//cs_log(" -- description_outil_une_variable($index) - Traite %$variable% = $valeur");
35        $cs_variable = &$cs_variables[$variable];
36        // autorisations de variables
37        include_spip('inc/autoriser');
38        $cs_variable['disabled'] = $disab 
39                = autoriser('configurer', 'variable', 0, NULL, array('nom'=>$cs_variable['nom'], 'outil'=>$outil))?'':' disabled="disabled"';
40        // si ce n'est qu'une simple initialisation, on sort
41        if(!$modif) return '';
42        // si la variable necessite des boutons radio
43        if(is_array($radios = &$cs_variable['radio'])) {
44                if(!$actif) {
45                        $code = _T($radios[$valeur]);
46                        return "<input type=\"hidden\" name=\"$variable\" class=\"cs_hidden_checkbox\" value=\"$code\" />"
47                                . $label . (strlen($valeur)?ucfirst($code):'&nbsp;-');
48                }
49                $res = "$label <ul>";
50                $i = 0; $nb = isset($cs_variable['radio/ligne'])?intval($cs_variable['radio/ligne']):0;
51                foreach($radios as $code=>$traduc) {
52                        $br = (($nb>0) && ( ++$i % $nb == 0))?'</ul><ul>':'';
53                        $res .=
54                                "<li><label><input id=\"label_{$variable}_$code\" class=\"cs_input_checkbox\" type=\"radio\""
55                                .($valeur==$code?' checked="checked"':'')." value=\"$code\" name=\"$variable\"$disab />"
56                                .($valeur==$code?'<b>':'')._T($traduc).($valeur==$code?'</b>':'')
57                                ."</label></li>$br";
58                }
59                return $res.'</ul>'._VAR_OUTIL;
60        }
61        // ... ou une case a cocher
62        if(isset($cs_variable['check'])) {
63                if(!$actif)
64                        return $label._T($cs_variable['check'])._T($valeur?'couteauprive:2pts_oui':'couteauprive:2pts_non');
65                return $label.'<label><input type="checkbox" '.($valeur?' checked="checked"':'')." value=\"1\" name=\"$variable\" $disab/>"
66                        .($valeur?'<b>':'')._T($cs_variable['check']).($valeur?'</b>':'').'</label>'
67                        . _VAR_OUTIL;
68        }
69        // ... ou un textarea ... ou une case input
70        if(!$actif)
71                return $label.'<html>'.(strlen($valeur)?nl2br(echapper_tags($valeur)):'&nbsp;'._T('couteauprive:variable_vide')).'</html>';
72        $len = $cs_variable['format']==_format_NOMBRE?6:0;
73        $width = $len?'':'style="width:100%;" ';
74        $lignes = !isset($cs_variable['lignes']) || ($cs_variable['format']==_format_NOMBRE)?0:strval($cs_variable['lignes']);
75        return $label .
76                ( $lignes < 2
77                        // <html></html> empechera SPIP de modifier le contenu des <input> ou <textarea>
78                        ?"<html><input name='$variable' value=\""
79                                . htmlspecialchars($valeur) . "\" type='text' size='$len' $width $disab/></html>"
80                        :"<html><textarea rows='$lignes' name='$variable' $width$disab>"
81                                . htmlspecialchars($valeur) . '</textarea></html>'
82                ) . _VAR_OUTIL;
83}
84
85// callback sur les labels de zones input ; format : [[label->qq chose]]
86// regexpr : ,\[\[([^][]*)->([^]]*)\]\],msS
87function description_outil_input1_callback($matches) {
88        // pas de label : [[->qq chose]]
89        if(!strlen($matches[1])) return "<fieldset><div>$matches[2]</div></fieldset>";
90        // retour a la ligne : [[-->qq chose]]
91        if($matches[1]=='-') return "<fieldset> <div>$matches[2]</div></fieldset>";
92        // format complet : [[label->qq chose]]
93        return "<fieldset><legend>$matches[1]</legend><div>$matches[2]</div></fieldset>";
94}
95
96// callback sur les labels de zones input en utilisant _T('couteauprive:label:variable') ; format [[qq chose %variable% qq chose]]
97// regexpr : ,\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS
98// ici, renseignement de la globale $cs_input_variable
99function description_outil_input2_callback($matches) {
100        global $cs_input_variable;
101        $cs_input_variable[] = $matches[3];
102        return "<fieldset><legend><:label:$matches[3]:></legend><div>$matches[1]</div></fieldset>";
103}
104
105function description_outil_liens_callback($matches) {
106        $nom = _T("couteauprive:$matches[1]:nom");
107        return '<a href="'.generer_url_ecrire('admin_couteau_suisse', 'cmd=descrip&outil='.$matches[1])
108                ."\" id=\"href_$matches[1]\" onclick=\"javascript:return cs_href_click(this);\">$nom</a>";
109}
110
111function description_outil_label_callback($matches) { 
112        global $cs_variables; 
113        return isset($cs_variables[$matches[1]]['label'])?$cs_variables[$matches[1]]['label']:_T('couteauprive:label:'.$matches[1]);
114}
115
116function cs_input_variable_callback($matches) {
117        $a = " valeur_{$matches[1]}_";
118        $tmp = str_replace('/',$a, $matches[3]);
119        return "<div class='groupe_{$matches[1]} $a$tmp'>";
120}
121
122// renvoie la description de $outil_ : toutes les %variables% ont ete remplacees par le code adequat
123function inc_description_outil_dist($outil_, $url_self, $modif=false) {
124        global $outils, $cs_variables, $metas_vars;
125        $outil = &$outils[$outil_];
126        $actif = $outil['actif'];
127        $index = $outil['index'];
128//cs_log("inc_description_outil_dist() - Parse la description de '$outil_'");
129        // la description de base est a priori dans le fichier de langue
130        $descrip = isset($outil['description'])?$outil['description']:_T('couteauprive:'.$outil['id'].':description');
131        // ajout des variables liees a la barre typo
132        if(defined('_DIR_PLUGIN_PORTE_PLUME') 
133         && ( isset($outil['pipeline:porte_plume_barre_pre_charger']) || isset($outil['pipeline:porte_plume_cs_pre_charger']))
134         && count($barres = cs_pp_liste_barres())) {
135                $descrip .= "\n\n@puce@ "._T('couteauprive:barres_typo_intro');
136                $i=0;
137                foreach($barres as $f=>$b) {
138                        $nom = "pp_{$b}_$outil[id]";
139                        $descrip .= ($i?'[[->':'[[')."%$nom%]]";
140                        add_variables( array(
141                                'nom' => $nom,
142                                'check' => ($b=='edition' || $b=='forum')?'couteauprive:barres_typo_'.$b:$f,
143                                'defaut' => 1, // par defaut les boutons seront toujours inseres
144                                'label' => $i++?NULL:'@_CS_CHOIX@',
145                        ));
146                }
147        }
148        // reconstitution d'une description eventuellement morcelee
149        // exemple : <:mon_outil:3:> est remplace par _T('couteauprive:mon_outil:description3')
150        $descrip = preg_replace_callback(',<:([a-zA-Z_][a-zA-Z0-9_-]*):([0-9]*):>,', 
151                create_function('$matches','return _T("couteauprive:$matches[1]:description$matches[2]");'), $descrip);
152        // envoi de la description en pipeline
153#       list(,$descrip) = pipeline('init_description_outil', array($outil_, $descrip));
154        // globale pour la callback description_outil_input2_callback
155        global $cs_input_variable;      $cs_input_variable = array();
156        // remplacement des zones input de format [[label->qq chose]]
157        $descrip = preg_replace_callback(',\[\[([^][]*)->([^]]*)\]\],msS', 'description_outil_input1_callback' , $descrip);
158        // remplacement des zones input de format [[qq chose %variable% qq chose]] en utilisant _T('couteauprive:label:variable') comme label
159        // la fonction description_outil_input2_callback renseigne la globale $cs_input_variable
160        $descrip = preg_replace_callback(',\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS', 'description_outil_input2_callback', $descrip);
161
162        // initialisation et remplacement des variables de format : %variable%
163        $t = preg_split(',%([a-zA-Z_][a-zA-Z0-9_]*)%,', $descrip, -1, PREG_SPLIT_DELIM_CAPTURE);
164        $res = '';
165        $nb_disabled = $nb_variables = 0; $variables = array();
166        for($i=0;$i<count($t);$i+=2) if(isset($t[$i+1]) && strlen($var=trim($t[$i+1]))) {
167                // si la variable est presente on fabrique le input
168                if(isset($cs_variables[$var])) {
169                        $res .= description_outil_une_variable(
170                                $index + (++$nb_variables),
171                                $outil, $var,
172                                $t[$i], $modif);
173                        $variables[] = $var;
174                        if($cs_variables[$var]['disabled']) ++$nb_disabled;
175                } else {
176                        // probleme a regler dans config_outils.php !
177                        $temp = $t[$i]."[$var?]"; $res .= $temp;
178                }
179        } else 
180                $res .= $t[$i];
181        $outil['variables'] = $variables;
182        $outil['nb_variables'] = $nb_variables;
183        $outil['nb_disabled'] = $nb_disabled;
184
185        // si ce n'est qu'une simple initialisation, on sort
186        if(!$modif) {unset($cs_input_variable); return;}
187
188        // information sur les raccourcis disponibles
189        if($a=cs_aide_raccourci($outil_)) $res .= '<p>@puce@ '._T('couteauprive:detail_raccourcis').'<br /><html>'.$a.'.</html></p>';
190        // envoi de la description courante en pipeline
191        $res = pipeline('pre_description_outil', array('outil'=>$outil_, 'texte'=>$res));
192        $res = $res['texte'];
193        // recherche des blocs <variable></variable> eventuels associes pour du masquage/demasquage
194        foreach($cs_input_variable as $v) {
195                $res = preg_replace_callback(",<($v)\s+valeur=(['\"])(.*?)\\2\s*>,", 'cs_input_variable_callback', $res);
196                $res = str_replace("</$v>", '</div>', $res);
197        }
198        unset($cs_input_variable);
199        // 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.
200        // attention : on ne peut pas modifier les variables si l'outil est inactif
201        if($actif) {
202                $bouton = "<input type='submit' class='fondo' style='margin-left:1em;' value=\"".($nb_variables>1?_T('couteauprive:modifier_vars_0'):_T('bouton_modifier'))."\" />";
203                if($nb_variables>1) $res .= "<div class=\"cs_bouton\">$bouton</div>";
204                        else $res = str_replace(_VAR_OUTIL, $bouton, $res);
205        }
206        $res = "\n<div id='cs_inner_outil-$index' >" . str_replace(array('<ul></ul>',_VAR_OUTIL),'',$res) . '</div>';
207        // si des variables sont trouvees ?
208        if($nb_variables) {
209                $variables = urlencode(serialize($variables));
210                // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='')
211                $res = ajax_action_auteur('description_outil', $index, $url_self, "modif=oui&cmd=descrip&outil={$outil['id']}", 
212                        "\n<input type='hidden' value='$variables' name='variables' /><input type='hidden' value='$outil_' name='outil' />"     . $res);
213        }
214//cs_log(" FIN : inc_description_outil_dist({$outil['id']}) - {$outil['nb_variables']} variables(s) trouvee(s)");
215        // remplacement en deux passes des labels en doublon
216        if(strpos($res,'<:label:')!==false) 
217                $res = preg_replace_callback(',<:label:([a-zA-Z_][a-zA-Z0-9_-]*):>,', 'description_outil_label_callback', $res);
218        if(strpos($res,'<:label:')!==false) 
219                $res = preg_replace_callback(',<:label:([a-zA-Z_][a-zA-Z0-9_-]*):>,', 'description_outil_label_callback', $res);
220        // remplacement des blocs avec style. ex : <q2>bla bla</q2>
221        $res = preg_replace(',</q(\d)>,','</div>', preg_replace(',<q(\d)>,','<div class="q$1">', $res));
222        // remplacement des inputs successifs sans label : [[%var1%]][[->%var2%]] ou [[%var1%]][[-->%var2%]]
223        $res = preg_replace(',(<br />)?</fieldset><fieldset>( ?<div>),', '$2', $res);
224        // remplacement de diverses constantes
225        $res = str_replace(array('@puce@', '@_CS_CHOIX@','@_CS_ASTER@','@_CS_PLUGIN_JQUERY192@'),
226                array(definir_puce(), _T('couteauprive:votre_choix'), '<sup>(*)</sup>', defined('_SPIP19300')?'':_T('couteauprive:detail_jquery3')), $res);
227        // remplacement des constantes qui restent de forme @_CS_XXXX@
228        if(strpos($res,'@_CS')!==false) 
229                $res = preg_replace_callback(',@(_CS_[a-zA-Z0-9_]+)@,', 
230                        create_function('$matches','return defined($matches[1])?constant($matches[1]):"";'), $res);
231        // remplacement des liens vers un autre outil
232        if(strpos($res,'[.->')!==false) 
233                $res = preg_replace_callback(',\[\.->([a-zA-Z_][a-zA-Z0-9_-]*)\],', 'description_outil_liens_callback', $res);
234
235        // envoi de la description finale en pipeline
236#       list(,$res) = pipeline('post_description_outil', array($outil_, $res));
237        return cs_ajax_outil_greffe("description_outil-$index", $res);
238}
239?>
Note: See TracBrowser for help on using the repository browser.