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

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

Pouvoir sélectionner les langues que l'on souhaite utiliser dans multilang et éviter les langues rares du site par exemple utilisées pour un article particulier.

On incrémente en 0.6.0

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