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

Last change on this file since 124832 was 124832, checked in by Cerdic, 2 months ago

Correction du selecteur de form, et on peut exclure un form en lui ajoutant la class nomulti (evite de le faire champ par champ)

File size: 4.5 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:not([class~="form_upload"]):not([class~="form_upload_icon"]):not([class~="nomulti"])');
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.