source: spip-zone/_plugins_/multilang/trunk/javascript/multilang_init.js_fonctions.php @ 118606

Last change on this file since 118606 was 118606, checked in by Charles Razack, 13 months ago

Version 1.4.0.

  • Nouveauté la plus visible : petite refacto du menu de langues → Noms des langues en entier au lieu des codes (fr, en...), liens affichés sous formes de boutons plus grands et centrés pour être bien visibles, ajout d'un label. Petite amélioration pour éviter qu'il y ait un saut lorsque le menu passe en sticky.
  • Configuration : les formulaires sur lesquels activer le script sont tous regroupés dans une même clé formulaires.
  • Configuration : ajout d'une option pour ajouter des sélecteurs dans le paramètre root (exemple complètement au hasard : .formulaire_editer_noisette).
  • Ajout d'un pipeline multilang_parametres pour permettre aux plugins de changer les paramètres passés au script d'init. Cas le plus courant : ajouter des formulaires à prendre en compte par le script.
  • Refactorisation du script d'init afin qu'il soit plus lisible et maintenable : séparation du javascript et du php. Au passage, correction d'un bug rigolo qui faisait que quand on décochait tous les items dans la config, le script devenait actif sur *tous* les formulaires : recherche, login, etc.
File size: 4.4 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7/**
8 * Retourne les paramètres nécessaires au script d'initialisation de multilang
9 *
10 * Il s'agit de sélecteurs jQuery pour choisir les éléments à prendre en compte.
11 * Retourne un tableau vide si aucun formulaire sélectionné en config ou listé via pipeline.
12 *
13 * @uses pipeline `multilang_parametres`
14 * @return string Tableau associatif (vide si rien en config) :
15 *     - root       : (string) sélecteurs jQuery d'éléments racines
16 *     - root_opt   : (string) idem, compléments
17 *     - forms      : (string) sélecteurs jQuery des formulaires
18 *     - fields     : (string) sélecteurs jQuery des champs
19 *     - fields_opt : (string) idem, compléments
20 */
21function multilang_init_parametres() {
22
23        include_spip('inc/config');
24        $params = array();
25        $config = lire_config('multilang', array());
26
27        // root = éléments racines à prendre en compte
28        // Ce sont les conteneurs des formulaires listés dans la config.
29        $root = array();
30        $formulaires = is_array($config['formulaires']) ? array_filter($config['formulaires']) : array();
31        foreach ($formulaires as $formulaire) {
32                switch ($formulaire) {
33                        case 'siteconfig':
34                                $root = array_merge($root, array('div#configurer-accueil', 'div.formulaire_configurer_identite'));
35                                break;
36                        case 'document':
37                                $root = array_merge($root, array('div#portfolio_portfolio', 'div#portfolio_documents', 'div#liste_documents, div.formulaire_editer_document'));
38                                break;
39                        case 'groupe_mots':
40                                $root[] = 'div.formulaire_editer_groupe_mot'; // le nom du formulaire n’est pas le type !
41                                break;
42                        default:
43                                $root[] = 'div.formulaire_editer_'.$formulaire;
44                                break;
45                }
46        }
47        // Config : autres formulaires en texte libre
48        if (trim($config['formulaires_autres'])) {
49                $root = array_merge($root, explode(',', $config['formulaires_autres']));
50        }
51        $params['root'] = $root;
52
53        // root_opt = compléments : formulaires ayant la classe .multilang
54        $params['root_opt'] = array('form:has(.multilang)');
55
56        // fields = champs à prendre en compte
57        $params['fields'] = array(
58                'textarea:not(textarea#adresses_secondaires, textarea#repetitions)',
59                'input:text:not(input#new_login, input#email, #titreparent, input.date, input.heure, input#largeur, input#hauteur, .ac_input, #url_syndic, #url_auto, .rechercher_adresse input, #champ_geocoder, #champ_lat, #champ_lon, #champ_zoom, #places, *.nomulti)',
60                '.multilang',
61        );
62
63        // fields_opt = compléments : classe .multilang
64        $params['fields_opt'] = array('.multilang');
65
66        // forms = formulaires à prendre en compte
67        // On exclut les forms d'upload (pour les vignettes de docs, logos...)
68        $params['forms'] = array('form[class!="form_upload"][class!="form_upload_icon"]');
69
70        // Permettre aux plugins d'ajouter ou modifier des choses.
71        $params = pipeline('multilang_parametres', array(
72                'args' => array(),
73                'data' => $params,
74        ));
75
76        // Sécurité : après le pipeline, on vérifie s'il y a des éléments en root.
77        // Dans le cas contraire, on vide le reste sinon le script s'activerait sur *tous* les formulaires sans distinction.
78        if (
79                empty($params['root'])
80                and empty($params['root_opt'])
81        ) {
82                unset($params['fields']);
83                unset($params['fields_opt']);
84                unset($params['forms']);
85        }
86
87        // Passage à la moulinette final
88        $params = array_map(
89                function ($v) {
90                        return implode(',', $v);
91                },
92                $params
93        );
94        $params = array_filter($params);
95
96        return $params;
97}
98
99
100/**
101 * Retourne les variables globales nécessaires au script d'initialisation de multilang
102 *
103 * @return array Tableau associatif
104 *     - avail_langs   : (array) langues activées
105 *     - dir_langs     : (array) directions des langues
106 *     - def_lang      : (string) langue principale
107 *     - lang_courante : (string) langue actuelle
108 *     - dir_plugin    : (string) chemin du plugin
109 */
110function multilang_init_globales() {
111
112        include_spip('inc/config');
113
114        // Langues activées
115        $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
116        if (is_array($langues_config = lire_config('multilang/langues_utilisees', 'aucune')) && count($langues_config) > 0) {
117                $langues = array_intersect($langues, $langues_config);
118        }
119        $langues_ltr = array();
120        foreach ($langues as $langue) {
121                $langues_ltr[$langue] = lang_dir($langue);
122        }
123
124        $globales = array(
125                'avail_langs'   => $langues,
126                'dir_langs'     => $langues_ltr,
127                'def_lang'      => $GLOBALS['meta']['langue_site'],
128                'lang_courante' => $GLOBALS['spip_lang'],
129                'dir_plugin'    => _DIR_PLUGIN_MULTILANG,
130        );
131
132        return $globales;
133}
Note: See TracBrowser for help on using the repository browser.