source: spip-zone/_plugins_/multilang/multilang_pipelines.php @ 59405

Last change on this file since 59405 was 59405, checked in by kent1@…, 8 years ago

On ne devrait plus casser la barre typo...

On passe en version 0.7.0 pour marquer le debug et la compat SPIP 3.0

File size: 8.8 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Insertion dans le pipeline insert_head_css
7 * si on a configuré multilang pour s'insérer dans l'espace public
8 *
9 * @param $flux
10 */
11function multilang_insert_head_css($flux){
12        include_spip('inc/config');
13        $config = lire_config('multilang',array());
14        if($config['multilang_public'] == 'on'){
15
16                static $done = false;
17
18                if (!$done) {
19                        $done = true;
20                        $flux .= '<link rel="stylesheet" href="'.url_absolue(generer_url_public('multilang.css')).'" type="text/css" media="all" />';
21                }
22        }
23        return $flux;
24}
25
26/**
27 * Insertion dans le pipeline insert_head_prive
28 * Ajoute css et javascript dans le <head> privé
29 *
30 * @param string $flux Le contenu du head privé
31 */
32function multilang_insert_head_prive($flux){
33
34        $config = lire_config('multilang',array());
35
36        $flux .= multilang_inserer_head($config);
37
38        return $flux;
39}
40
41/**
42 * Insertion dans le pipeline insert_head
43 * si on a configuré multilang pour s'insérer dans l'espace public
44 *
45 * @param $flux
46 */
47function multilang_insert_head($flux){
48        include_spip('inc/config');
49        $config = lire_config('multilang',array());
50
51        if($config['multilang_public'] == 'on'){
52                $flux .= multilang_insert_head_css(''); // au cas ou il n'est pas implemente
53                $flux .= multilang_inserer_head($config);
54        }
55        return $flux;
56}
57
58/**
59 * La fonction de modification du $flux pour l'insertion dans le head qu'il
60 * soit privé ou public
61 *
62 * @param string $flux Le head de la page où l'on se trouve
63 * @param array $config La configuration du plugin
64 */
65function multilang_inserer_head($config=array()){
66        if(count($langues = explode(',',$GLOBALS["meta"]["langues_multilingue"])) > 1){
67
68                $root = '' ;
69
70                if($config['siteconfig']){
71                        $root .= 'div#configurer-accueil,div.formulaire_configurer_identite' ; // Config Site
72                }
73                if($config['article']) { // Articles
74                        $root .= ',div.formulaire_editer_article';
75                }
76                if($config['breve']) { // Breves
77                        $root .= ',div.formulaire_editer_breve';
78                }
79                if($config['rubrique']) { // Rubriques
80                        $root .= ',div.formulaire_editer_rubrique';
81                }
82                if($config['auteur']) { // Auteurs
83                        $root .= ',div.formulaire_editer_auteur';
84                }
85                if($config['document']) {  // Docs dans page de presentation rubrique ou article,
86                        $root .= ',div#portfolio_portfolio,div#portfolio_documents' ;
87                }
88                if($config['site']) { // Sites
89                        $root .= ',div.formulaire_editer_site';
90                }
91                if($config['evenement']) { // Evenements
92                        $root .= ',div.formulaire_editer_evenement';
93                }
94                if($config['motcle']) { // Mots
95                        $root .= ',div.formulaire_editer_mot,div.formulaire_editer_groupe_mot';
96                }
97                if($config['gis']) { // GIS
98                        $root .= ',div.formulaire_editer_gis';
99                }
100
101                // Docs traites a part dans pages d'edition d'articles et de rubriques
102                if($config['document']){
103                        $root .= ',div#liste_documents,div.formulaire_editer_document' ; // avec ou sans Mediatheque
104                }
105                // Appel de multilang_init_lang si
106                // - document.ready
107                // - onAjaxLoad (cas des docs et de la configuration du site)
108                if(is_array($langues_config = lire_config('multilang/langues_utilisees','aucune')) && count($langues_config) > 0){
109                        $langues = implode(',',array_intersect($langues,$langues_config));
110                }else{
111                        $langues = implode(',',$langues);
112                }
113                $data = '
114<script type="text/javascript" src="'.generer_url_public("multilang_lang.js","lang=".$GLOBALS["spip_lang"]).'"></script>
115<script type="text/javascript" src="'.find_in_path("javascript/multilang.js").'"></script>
116<script type="text/javascript">/* <![CDATA[ */
117        var multilang_avail_langs = "'.$langues.'".split(\',\'),
118        multilang_def_lang = "'.$GLOBALS["meta"]["langue_site"].'",
119        multilang_lang_courante = "'.$GLOBALS["spip_lang"].'",
120        multilang_dir_plugin = "'._DIR_PLUGIN_MULTILANG.'";
121
122        // On trie les langues. Langue de l environnement en premier,
123        // puis langue principale du site puis les autres en ordre alphabetique
124        // Un utilisateur de langue anglaise souhaite logiquement traduire en anglais
125        multilang_avail_langs = jQuery.grep(multilang_avail_langs, function(value) {
126                return (value != multilang_def_lang && value != multilang_lang_courante);
127        });
128        multilang_avail_langs.sort();
129        multilang_avail_langs.unshift(multilang_lang_courante);
130        if(multilang_lang_courante!=multilang_def_lang) multilang_avail_langs.unshift(multilang_def_lang);
131
132        jQuery(document).ready(function(){
133                function multilang_init(){
134                        var root = "'.$root.'";
135                        var fields_selector = "textarea:not(textarea#adresses_secondaires,textarea#repetitions),input:text:not(input#new_login,input#email,#titreparent,input.date,input.heure,input#largeur,input#hauteur,.ac_input,#url_syndic,#url_auto,#champ_geocoder,#champ_lat,#champ_lon,#champ_zoom,#places,*.nomulti),.multilang";
136                        // on exclue aussi les form d upload (Pour les vignettes de docs, logos...)
137                        var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']";
138                        // Les div qui ont un formulaire de classe multilang (pour accélérer la recherche dans le DOM,
139                        // on passe le form et le parent sera trouvé dans lors de l\'init)
140                        var root_opt = "form:has(.multilang)";
141                        var fields_selector_opt = ".multilang";
142                        multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:root,root_opt:root_opt,forms:forms_selector});
143                       
144                        if($(".menu_multilang").length > 0){
145                                $(".menu_multilang").each(function(){
146                                        var menu_lang = $(this);
147                                        var menu_lang_width = menu_lang.width();
148                                        $(window).scroll(function() {
149                                                var offset = menu_lang.parents("form").offset();
150                                                var limite_multilang = offset.top;
151                                                var limite_bas = limite_multilang+menu_lang.parents("form").height()-menu_lang.parents("form").find(".boutons").height();
152                                                var pos_bas = menu_lang.offset().top+menu_lang.height();
153                                                if(($(window).scrollTop() >= limite_multilang) && (pos_bas <= limite_bas) && ($(window).scrollTop() < limite_bas)){
154                                                        if(!menu_lang.hasClass("menu_lang_flottant"))
155                                                                menu_lang.addClass("menu_lang_flottant")
156                                                        menu_lang.css({"position": "fixed", "top": 0, "width": menu_lang_width+"px","z-index":"999"});
157                                                }
158                                                if(($(window).scrollTop() < limite_multilang)||(pos_bas > limite_bas) )
159                                                        menu_lang.removeClass("menu_lang_flottant").css({"position": "static", "width": "auto"});
160                                        });
161                                });
162                        }
163                }
164                multilang_init();
165                if(typeof onAjaxLoad == "function") onAjaxLoad(multilang_init);
166        });
167/* ]]> */</script>
168';
169        }
170        return $data;
171}
172
173function multilang_affichage_final($flux){
174        if($_REQUEST['page'] == 'crayons.js'){
175                $root = '' ;
176                include_spip('inc/config');
177                $config = lire_config('multilang',array());
178                if(($config['multilang_public'] == 'on') && ($config['multilang_crayons'] == 'on')){
179                        if($config['siteconfig']){
180                                $root .= ',input[type=hidden][name*=name_][value|=meta-valeur]';
181                        }
182                        if($config['article']) { // Articles
183                                $root .= ',input[type=hidden][name*=name_][value|=article]:not(input[value|=article-logo])';
184                        }
185                        if($config['breve']) { // Breves
186                                $root .= ',input[type=hidden][name*=name_][value|=breve]:not(input[value|=breve-logo])';
187                        }
188                        if($config['rubrique']) { // Rubriques
189                                $root .= ',input[type=hidden][name*=name_][value|=rubrique]:not(input[value|=rubrique-logo])';
190                        }
191                        if($config['auteur']) { // Auteurs
192                                $root .= ',input[type=hidden][name*=name_][value|=auteur]:not(input[value|=auteur-logo])';
193                        }
194                        if($config['document']) {  // Docs dans page de presentation rubrique ou article,
195                                $root .= ',input[type=hidden][name*=name_][value|=document]:not(input[value|=document-vignette])' ;
196                        }
197                        if($config['site']) { // Sites
198                                $root .= ',input[type=hidden][name*=name_][value|=site]';
199                        }
200                        if($config['evenement']) { // Evenements
201                                $root .= ',input[type=hidden][name*=name_][value|=evenement]:not(input[value|=evenement-logo])';
202                        }
203                        if($config['motcle']) { // Mots
204                                $root .= ',input[type=hidden][name*=name_][value|=mot]:not(input[value|=mot-logo])';
205                        }
206                        if($config['gis']) { // GIS
207                                $root .= ',input[type=hidden][name*=name_][value|=gis]:not(input[value|=gis-logo])';
208                        }
209                        $texte = '
210                                var crayons_multilang_init = function(){
211                                        var crayons_root = ".formulaire_spip:has('.$root.')";
212                                        var fields_selector = "textarea,input:text:not(input.date,input.heure,*.nomulti)";
213                                        var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']";
214                                        var root_opt = "form:has(.multilang)";
215                                        var fields_selector_opt = ".multilang";
216                                        multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:crayons_root,root_opt:root_opt,forms:forms_selector,init_done:false});
217                                }
218                                jQuery(document).ready(function(){
219                                crayons_multilang_init();
220                                if(typeof onAjaxLoad == "function") onAjaxLoad(crayons_multilang_init);
221                                });';
222                        $flux .= $texte;
223                }
224        }
225        return $flux;
226}
227?>
Note: See TracBrowser for help on using the repository browser.