source: spip-zone/_plugins_/_stable_/raccourcis_texte_perso/inc/raper_api_edit.php @ 25659

Last change on this file since 25659 was 25659, checked in by paladin@…, 12 years ago

RaPer? (Raccourcis texte Perso) est un plug-in pour SPIP (à partir de la version 1.9.2) qui permet de surcharger les raccourcis texte utilisés dans vos squelettes.

Plus d'info sur http://www.quesaco.org/Surcharger-les-raccourcis-texte

  • Property svn:eol-style set to native
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 11.9 KB
Line 
1<?php
2
3// inc/raper_api_edit.php
4
5        /*****************************************************
6        Copyright (C) 2009 Christian PAULUS
7        cpaulus@quesaco.org - http://www.quesaco.org/
8        /*****************************************************
9       
10        This file is part of RaPer.
11       
12        RaPer is free software; you can redistribute it and/or modify
13        it under the terms of the GNU General Public License as published by
14        the Free Software Foundation; either version 2 of the License, or
15        (at your option) any later version.
16       
17        RaPer is distributed in the hope that it will be useful,
18        but WITHOUT ANY WARRANTY; without even the implied warranty of
19        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20        GNU General Public License for more details.
21       
22        You should have received a copy of the GNU General Public License
23        along with RaPer; if not, write to the Free Software
24        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
25       
26        /*****************************************************
27       
28        Ce fichier est un des composants de RaPer.
29       
30        RaPer est un programme libre, vous pouvez le redistribuer et/ou le modifier
31        selon les termes de la Licence Publique Generale GNU publie'e par
32        la Free Software Foundation (version 2 ou bien toute autre version ulterieure
33        choisie par vous).
34       
35        RaPer est distribue' car potentiellement utile, mais SANS AUCUNE GARANTIE,
36        ni explicite ni implicite, y compris les garanties de commercialisation ou
37        d'adaptation dans un but spe'cifique. Reportez-vous a' la Licence Publique Ge'ne'rale GNU
38        pour plus de details.
39       
40        Vous devez avoir reçu une copie de la Licence Publique Generale GNU
41        en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a' la 
42        Free Software Foundation, Inc.,
43        59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis.
44       
45        *****************************************************/
46       
47// $LastChangedRevision: 25659 $
48// $LastChangedBy: paladin@quesaco.org $
49// $LastChangedDate: 2009-01-01 17:22:44 +0000 (Thu, 01 Jan 2009) $
50
51if (!defined("_ECRIRE_INC_VERSION")) return;
52
53include_spip('inc/filtres');
54
55/*
56 * Charger les raccourcis texte, dans toutes les langues utilise'es si besoin
57 * @return array les raccourcis pour la langue demande'e
58 * @param $lang string (ex. en)
59 * @param $prefs array les pre'fe'rences du RaPer
60 */
61function raper_raccourcis_spip ($lang, $prefs) {
62        static $raccourcis_spip;
63        global $spip_lang;
64
65        if(!$raccourcis_spip) $raccourcis_spip = array();
66
67        // si les raccourcis pour la langue demande'es sont inconnus,
68        // aller les chercher
69        if(!$raccourcis_spip[$lang]) {
70
71                $editer_quoi = array(
72                        'editer_public' => 'public' 
73                        , 'editer_spip' => 'spip'
74                        , 'editer_ecrire' => 'ecrire'
75                        );
76               
77                if(!$GLOBALS['idx_lang']) {
78                        $GLOBALS['idx_lang'] = $idx_lang_temp = 'idx_lang_temp';
79                }
80
81                $editer_tout = ($prefs['editer_tout'] == 'oui'); 
82
83                $charger = false;
84                foreach($editer_quoi as $key => $module) {
85                        if($editer_tout || ($prefs[$key] == 'oui')) {
86                                if(!$charger) {
87                                        charger_langue($lang, $module);
88                                        $charger = true;
89                                }
90                                else if ($f = chercher_module_lang($module, $lang)) {
91                                        surcharger_langue($f);
92                                }
93
94                        }
95                }
96                if ($editer_tout || ($prefs['editer_local'] == "oui")) {
97//raper_log("charger aussi les locales de skel dans raccourcis_spip");
98                        // raper_raccourcis_local_skel surcharge les raccourcis
99                        raper_raccourcis_local_skel();
100                }
101               
102                // placer le tout en static pour la langue
103                if(!$raccourcis_spip[$lang] = $GLOBALS[$GLOBALS['idx_lang']]) {
104                        $raccourcis_spip[$lang] = array();
105                        raper_log("Erreur raper_raccourcis_spip() sur lang = $lang module = $module");
106                }
107       
108                // si passage temporaire (cas d'edition 'local' seul), nettoyer
109                if($idx_lang_temp) unset($GLOBALS['idx_lang']);
110
111        }
112        return($raccourcis_spip[$lang]);
113}
114
115/*
116 * Fusionner les tableaux des raccourcis en annotant ceux du raper
117 * @return array
118 * @param $raccourcis_list array
119 * @param $prefs array
120 */
121function raper_raccourcis_fusionner ($raccourcis_spip, $prefs) {       
122       
123        if(!($raccourcis_raper = $prefs['raccourcis'])) $raccourcis_raper = array();
124       
125        // demander le tableau des raccourcis locaux au squelette
126        $raccourcis_local = raper_raccourcis_local_skel(false);
127        if(count($raccourcis_local)) {
128                //$raccourcis_raper = array_merge($raccourcis_local, $raccourcis_raper);
129//raper_log("au final ". count($raccourcis_local));
130        }
131       
132        $raccourcis_list = array_merge($raccourcis_spip, $raccourcis_raper);
133       
134        foreach($raccourcis_list as $key => $value) {
135                $raper = isset($raccourcis_raper[$key]);
136                $skel = isset($raccourcis_local[$key]);
137                $raccourcis_list[$key] =
138                        array(
139                                'value' => $value
140                                // ajouter le drapeau pour placer les icones action (entre autre)
141                                , 'raper' => $raper
142                                // et le drapeau pour rappel que c'est du local au skel
143                                , 'skel' => $skel
144                        );
145        }
146        return($raccourcis_list);                       
147}
148
149
150/*
151 * Complement pour la boite info. Message
152 * @return string
153 * @param $nb_raper int
154 * @param $nb_spip int
155 */
156function raper_msg_info ($nb_raper, $nb_spip) {
157        $result = 
158                ($nb_raper)
159                ?       (
160                        ($nb_raper > 1)
161                        ? _T('raper:n_raccourcis_perso_sur_i', array('n' => $nb_raper, 'i' => $nb_spip))
162                        : _T('raper:un_raccourci_perso_sur_i', array('i' => $nb_spip))
163                        )
164                : _T('raper:aucun_raccourci_perso_sur_i', array('i' => $nb_spip))
165                ;
166        return($result);       
167}
168
169/*
170 * Demander les raccourcis local_* du squelette
171 * @return array
172 * @param $surcharger bool[optional] true pour surcharger
173 */
174function raper_raccourcis_local_skel ($surcharger = true) {
175       
176        $langues_array = explode(",", raper_langues_selection());
177        $is_multilingue = (count($langues_array) > 1);
178       
179        // Chemin standard depuis l'espace public
180        $path = defined('_SPIP_PATH') ? _SPIP_PATH : _DIR_RACINE;
181        // le dossier standard
182        if (@is_dir(_DIR_RACINE.'squelettes')) {
183                $path = _DIR_RACINE.'squelettes/:' . $path;
184        }
185        // Et le(s) dossier(s) des squelettes nommes
186        if ($GLOBALS['dossier_squelettes']) {
187                foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) {
188                        $path = ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/:' . $path;
189                }
190        }
191        // nettoyer les / du path
192        $path_array = array();
193        foreach (explode(':', $path) as $dir) {
194                if (($dir = trim($dir)) && strlen($dir) && substr($dir,-1) != '/')
195                        $dir .= "/";
196                $path_array[] = $dir;
197        }
198       
199        if(!$surcharger) {
200                // sauvegarder les langues
201                $idx_lang_temp = $GLOBALS['idx_lang'].'_temporaire';
202                if(isset($GLOBALS['idx_lang'])) $idx_lang_normal = $GLOBALS['idx_lang'];
203                $GLOBALS['idx_lang'] = $idx_lang_temp;
204        }
205       
206        $raccourcis_local = array();
207       
208        foreach($langues_array as $lang) {
209                raper_surcharger_langue($lang, 'local', $path_array);
210                if (count($GLOBALS[$GLOBALS['idx_lang']])) {
211                        foreach($GLOBALS[$GLOBALS['idx_lang']] as $key => $value) {
212                                if(!isset($raccourcis_local[$key]) && $is_multilingue) $raccourcis_local[$key] = array();
213                                if($is_multilingue) {
214                                        $raccourcis_local[$key][$lang] = $value;
215                                }
216                                else $raccourcis_local[$key] = $value;
217                        }
218                }
219        }
220//raper_log("en local skel ".count($raccourcis_local));
221        // restituer les langues
222        if(!$surcharger && $idx_lang_normal) $GLOBALS['idx_lang'] = $idx_lang_normal;
223        unset ($GLOBALS[$idx_lang_temp]);
224       
225        return($raccourcis_local);
226}
227
228/*
229 * Lien a' placer dans les petits boutons du tableau
230 * @return string
231 * @param $type string
232 * @param $id string
233 */
234function raper_edit_creer_lien ($type, $id) {
235        static $titles, $url;
236        if(!$titles) {
237                $titles = array(
238                        'edit' => _T('raper:perso_edit')
239                        , 'drop' => _T('raper:perso_drop')
240                        );
241        }
242        if(!$url) {
243                $url = self();
244        }
245        $href = parametre_url($url, $type, $id);
246        $lien = ""
247                . "<a href='$href#_r_$id' $id_attr class='raper-$type' title=\"".$titles[$type]."\""
248                . " onclick=\"javascript:return jQuery.raper_action('raper-$type', '$id')\""
249                . ">"
250                . "<span class='no-screen $type'>".$titles[$type]."</span></a>\n"
251                ;
252        return($lien);
253}
254
255/*
256 * Petit formulaire d'edition pour un raccourci
257 * @return string
258 * @param $id_raccourci string id du raccourci
259 * @param $raccourcis_list array tableau des raccourcis actuels
260 * @param $raper_lang string langue choisie pour l'affichage du contenu des raccourcis
261 */
262function raper_edit_form_mini_edit ($id_raccourci, $raccourcis_list, $prefs, $raper_lang) {
263
264        $nb_langues = substr_count(raper_langues_selection(), ',') + 1;
265       
266        if(isset($raccourcis_list[$id_raccourci])) {
267                // si c'est un raccourci du raper
268                // ou une seule langue, prendre la valeur
269                if($raccourcis_list[$id_raccourci]['raper']
270                        || ($nb_langues == 1)
271                ) {
272                        $value = $raccourcis_list[$id_raccourci]['value'];
273                        $value = raper_multi_swap_entities ($value, true);
274                }
275                else {
276                // sinon, aller le rechercher dans tt les langues utilise'es par le site et cre'er le multi
277                        $value = "";
278                        $les_langues = explode(",", raper_langues_selection());
279                        sort($les_langues);
280                        foreach($les_langues as $langue) {
281                                $ii = raper_raccourcis_spip ($langue, $prefs);
282                                $value .= "[$langue]" . (isset($ii[$id_raccourci]) ? $ii[$id_raccourci] : "<vide>") . "\n";
283                        }
284                        // envelopper le tout du tag multi
285                        $value = "&lt;multi&gt;\n" . $value . "&lt;/multi&gt;";
286                }
287        }
288        else $value = "Erreur sur ce raccourci (bug ou url fausse'e !)";
289       
290        $nameform = 'miniform';
291        $url = parametre_url(generer_url_ecrire('raper_edit'), 'edit', '');
292        $url = parametre_url($url, 'id_raccourci', '');
293        $ancre = "_r_$id_raccourci";
294        $result = "\n"
295                . "<form action='" . $url . "#$ancre'"
296                . " method='post' name='$nameform'>\n"
297                . "<textarea name='value' cols='40' rows='" 
298                        . ($nb_langues + ((raper_site_langues_compter() > 1) ? 2 : 1)) // pour placer les 2 <multi>
299                        . "'>\n"
300                . $value
301                . "</textarea>\n"
302                . "<table class='construct'><tr><td>\n"
303                . raper_edit_miniform_button('raper-cancel', 'annuler', $id_raccourci, _T('raper:annuler'), $nameform, $raper_lang)
304                . "</td><td class='right'>\n"
305                . raper_edit_miniform_button('raper-apply', 'valider', $id_raccourci, _T('raper:valider'), $nameform, $raper_lang)
306                . "</td></tr></table>\n"
307                . "</form>\n"
308                ;
309        return($result);
310}
311
312/*
313 * Le petit bouton submit pour le formulaire
314 * @return
315 * @param $id_button string
316 * @param $name string
317 * @param $id_raccourci string
318 * @param $title string
319 * @param $nameform string
320 */
321function raper_edit_miniform_button ($id_button, $name, $id_raccourci, $title, $nameform, $raper_lang) {
322        $result = ""
323                . "<div>\n"
324                . "<input type='submit' name='$name'"
325                        . " class='$id_button pointer'"
326                        . " title=\"".$title."\" value=\"".$title."\""
327                        . " onclick=\"javascript:return jQuery.raper_action('$id_button', '$id_raccourci')\""
328                        . " />\n"
329                . "<input type='hidden' name='id_raccourci' value='$id_raccourci' />\n"
330                . "</div>\n"
331                ;
332        return($result);
333}
334
335/*
336 * Retourne la version HTML ou TEXTE de "<multi>"
337 * nota: pour XHTML-stric, "<multi>" doit être avec entite's HTML
338 * @return
339 * @param $value string
340 * @param $to_entities bool[optional]
341 */
342function raper_multi_swap_entities ($value, $to_entities = true) {
343
344        if(!empty($value)) {
345                $patterns = array('|&lt;multi&gt;|', '|&lt;/multi&gt;|');
346                $replacements = array('<multi>', '</multi>');   
347                if ($to_entities && preg_match("|<multi>|", $value)) {
348                        $patterns = array('|<multi>|', '|</multi>|');
349                        $replacements = array('&lt;multi&gt;', '&lt;/multi&gt;');
350                       
351                }
352                else if (preg_match("|&lt;multi&gt;|", $value)) {
353                        //$patterns = array('|&lt;multi&gt;|', '|&lt;/multi&gt;|');
354                        //$replacements = array('<multi>', '</multi>');
355                }
356                $value = preg_replace($patterns, $replacements, $value);
357        }
358        else if(raper_site_langues_compter() > 1) {
359                if(($langues_array = split(',', raper_langues_selection())) && (count($langues_array) > 1)) {
360                        sort($langues_array);
361                        $value = "";
362                        foreach($langues_array as $langue) {
363                                $value .= "[$langue]\n";
364                        }
365                        $lt = $to_entities ? "&lt;" : "<";
366                        $gt = $to_entities ? "&gt;" : ">";
367                        $value = $lt . "multi" . $gt . "\n" . $value . $lt . "/multi" . $gt . "\n";
368                }
369        }
370
371        return($value);
372}
373
374/*
375 * Extraire le multi dans la langue de'sire'e
376 * @return string
377 * @param $value string
378 * @param $raper_lang string
379 */
380function raper_extraire_multi ($value, $raper_lang) {
381        global $spip_lang;
382        $tmp_lang = false;
383       
384        if($spip_lang != $raper_lang) {
385                $tmp_lang = $spip_lang;
386                $spip_lang = $raper_lang;
387        }
388       
389        $value = extraire_multi($value);
390       
391        if($tmp_lang) $spip_lang = $tmp_lang;
392       
393        return($value);
394}
395
396?>
Note: See TracBrowser for help on using the repository browser.