[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / prive / formulaires / configurer_multilinguisme.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 function formulaires_configurer_multilinguisme_charger_dist() {
18 $valeurs = array();
19 $valeurs['multi_secteurs'] = $GLOBALS['meta']['multi_secteurs'];
20 foreach (array('multi_objets', 'gerer_trad_objets') as $m) {
21 $valeurs[$m] = explode(',', isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : '');
22 }
23
24 if (count($valeurs['multi_objets'])
25 or count(explode(',', $GLOBALS['meta']['langues_utilisees'])) > 1
26 ) {
27 $selection = (is_null(_request('multi_objets')) ?
28 explode(',', $GLOBALS['meta']['langues_multilingue']) : _request('langues_auth'));
29 $valeurs['_langues'] = saisie_langues_utiles('langues_auth', $selection ? $selection : array());
30 $valeurs['_nb_langues_selection'] = count($selection);
31 }
32
33 return $valeurs;
34 }
35
36
37 function formulaires_configurer_multilinguisme_traiter_dist() {
38 $res = array('editable' => true);
39 // un checkbox seul de name X non coche n'est pas poste.
40 // on verifie le champ X_check qui indique que la checkbox etait presente dans le formulaire.
41 foreach (array('multi_secteurs') as $m) {
42 if (!is_null(_request($m . '_check'))) {
43 ecrire_meta($m, _request($m) ? 'oui' : 'non');
44 }
45 }
46 foreach (array('multi_objets', 'gerer_trad_objets') as $m) {
47 if (!is_null($v = _request($m))) {
48 // join et enlever la valeur vide ''
49 ecrire_meta($m, implode(',', array_diff($v, array(''))));
50 }
51 }
52
53 if ($i = _request('langues_auth') and is_array($i)) {
54 $i = array_unique(array_merge($i, explode(',', $GLOBALS['meta']['langues_utilisees'])));
55 ecrire_meta('langues_multilingue', implode(',', $i));
56 }
57 $res['message_ok'] = _T('config_info_enregistree');
58
59 return $res;
60 }
61
62 /**
63 * Tester si une table supporte les langues (champ lang)
64 *
65 * @param string $table_sql
66 * @return string
67 */
68 function table_supporte_lang($table_sql) {
69 $trouver_table = charger_fonction('trouver_table', 'base');
70 $desc = $trouver_table($table_sql);
71 if (!$desc or !isset($desc['field']['lang'])) {
72 return '';
73 }
74
75 return ' ';
76 }
77
78 /**
79 * Tester si une table supporte les traductions (champ id_trad)
80 *
81 * @param string $table_sql
82 * @return string
83 */
84 function table_supporte_trad($table_sql) {
85 $trouver_table = charger_fonction('trouver_table', 'base');
86 $desc = $trouver_table($table_sql);
87 if (!$desc or !isset($desc['field']['id_trad'])) {
88 return '';
89 }
90
91 return ' ';
92 }
93
94
95 function saisie_langues_utiles($name, $selection) {
96 include_spip('inc/lang_liste');
97 $langues = $GLOBALS['codes_langues'];
98
99 $langues_installees = explode(',', $GLOBALS['meta']['langues_proposees']);
100 $langues_trad = array_flip($langues_installees);
101
102 $langues_bloquees = explode(',', $GLOBALS['meta']['langues_utilisees']);
103
104 $res = '';
105
106 $i = 0;
107 foreach ($langues_bloquees as $code_langue) {
108 $nom_langue = $langues[$code_langue];
109 $res .= "<li class='choix "
110 . alterner(++$i, 'odd', 'even')
111 . (isset($langues_trad[$code_langue]) ? ' traduite' : '')
112 . "'>"
113 . "<input type='hidden' name='{$name}[]' value='$code_langue'>" // necessaire ...
114 . "<input type='checkbox' name='{$name}[]' id='{$name}_$code_langue' value='$code_langue' checked='checked' disabled='disabled' />"
115 . "<label for='{$name}_$code_langue'>" . $nom_langue . "&nbsp;&nbsp; <span class='code_langue'>[$code_langue]</span></label>"
116 . '</li>';
117 }
118
119 if ($res) {
120 $res = "<ul id='langues_bloquees'>" . $res . "</ul><div class='nettoyeur'></div>";
121 }
122
123 $res .= "<ul id='langues_proposees'>";
124
125 $i = 0;
126 $langues_bloquees = array_flip($langues_bloquees);
127 foreach ($langues as $code_langue => $nom_langue) {
128 if (!isset($langues_bloquees[$code_langue])) {
129 $checked = (in_array($code_langue, $selection) ? ' checked="checked"' : '');
130 $res .= "<li class='choix "
131 . alterner(++$i, 'odd', 'even')
132 . (isset($langues_trad[$code_langue]) ? ' traduite' : '')
133 . "'>"
134 . "<input type='checkbox' name='{$name}[]' id='{$name}_$code_langue' value='$code_langue'"
135 . $checked
136 . '/>'
137 . "<label for='{$name}_$code_langue'"
138 . ($checked ? " class='on'" : '')
139 . '>'
140 . $nom_langue . "&nbsp;&nbsp; <span class='code_langue'>[$code_langue]</span></label>"
141 . '</li>';
142 }
143 }
144
145 $res .= "</ul><div class='nettoyeur'></div>";
146
147 return $res;
148 }