source: spip-zone/_plugins_/langonet/langonet_fonctions.php @ 52889

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

if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement

File size: 4.8 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5/**
6 * Creation du select des fichiers de langue
7 *
8 * @param string $sel_l
9 * @return array
10 */
11function langonet_creer_select_langues($sel_l='0') {
12
13        $retour = creer_selects($sel_l, '0');
14        return $retour['fichiers'];
15}
16
17/**
18 * Creation du select des arborescences a scanner
19 *
20 * @param string $sel_d
21 * @return array
22 */
23function langonet_creer_select_dossiers($sel_d='0') {
24
25        $retour = creer_selects('0', $sel_d);
26        return $retour['dossiers'];
27}
28
29/**
30 * Creation d'un tableau des selects:
31 * - des fichiers de langue
32 * - des arborescences a scanner
33 *
34 * @param string $sel_l
35 * @param string $sel_d
36 * @return array
37 */
38
39// $sel_l  => option du select des langues
40// $sel_d  => option du select des repertoires
41function creer_selects($sel_l='0',$sel_d='0') {
42       
43
44        // Recuperation des repertoires des plugins
45        $rep_plugins = lister_dossiers_plugins();
46        // Recuperation des repertoires des extensions
47        $rep_extensions = lister_dossiers_plugins(_DIR_EXTENSIONS);
48        // Recuperation des repertoires SPIP et squelettes
49        if (strlen($GLOBALS['dossier_squelettes'])) {
50                $rep_perso = explode(':', $GLOBALS['dossier_squelettes']);
51        }
52        else {
53                $rep_perso[] = 'squelettes';
54        }
55        $rep_spip[] = rtrim(_DIR_RESTREINT_ABS, '/');
56        $rep_spip[] = 'prive';
57        $rep_spip[] = 'squelettes-dist';
58        $rep_scan = array_merge($rep_perso, $rep_extensions, $rep_plugins, $rep_spip);
59       
60        // construction des <select>
61        // -- les fichiers de langue
62        $sel_lang = '<select name="fichier_langue" id="fichier_langue" style="margin-bottom:1em;">'."\n";
63        $sel_lang .= '<option value="0"';
64        $sel_lang .= ($sel_l == '0') ? ' selected="selected">' : '>';
65        $sel_lang .= _T('langonet:option_aucun_fichier') . '</option>' . "\n";
66        // -- les racines des arborescences a scanner
67        $sel_dossier = '<select name="dossier_scan" id="dossier_scan">' . "\n";
68        $sel_dossier .= '<option value="0"';
69        $sel_dossier .= ($sel_d == '0') ? ' selected="selected">' : '>';
70        $sel_dossier .= _T('langonet:option_aucun_dossier') . '</option>' . "\n";
71
72        // la liste des options :
73        // value (fichier_langue) =>
74        //     $rep (nom du repertoire parent de lang/)
75        //     $module (prefixe fichier de langue)
76        //     $langue (index nom de langue)
77        //     $ou_lang (chemin relatif vers fichier de langue a verifier)
78        foreach ($rep_scan as $rep) {
79                if (in_array($rep, $rep_plugins)) {
80                        $reel_dir = _DIR_PLUGINS . $rep;
81                        $ou_fichier = str_replace('../', '', $reel_dir) . '/';
82                }
83                else if (in_array($rep, $rep_extensions)) {
84                        $reel_dir = _DIR_EXTENSIONS . $rep;
85                        $ou_fichier = str_replace('../', '', $reel_dir) . '/';
86                }
87                else {
88                        $reel_dir = _DIR_RACINE . $rep;
89                        $ou_fichier = $rep . '/';
90                }
91                if (is_dir($reel_dir . '/lang/')) {
92                        // on recupere tous les fichiers de langue directement places
93                        // dans lang/ sans parcourir d'eventuels sous-repertoires
94                        $opt_lang = '';
95                        foreach ($fic_lang = preg_files($reel_dir . '/lang/', '_[a-z]{2,3}\.php$', 250, false) as $le_module) {
96                                preg_match_all("%_(\w{2,3})(_\w{2,3})?(_\w{2,4})?$%im", str_replace('.php', '', $le_module), $matches);
97                                $module = str_replace($matches[0][0].'.php', '', $le_module);
98                                $module = str_replace($reel_dir . '/lang/', '', $module);
99                                $langue = ltrim($matches[0][0], '_');
100                                $ou_langue = str_replace('../', '', $reel_dir) . '/lang/';
101                                $value = $rep.':'.$module.':'.$langue.':'.$ou_langue;
102                                $opt_lang .= '<option value="' . $value;
103                                $opt_lang .= ($value == $sel_l) ? '" selected="selected">' : '">';
104                                $opt_lang .= str_replace('.php', '', str_replace($reel_dir . '/lang/', '', $le_module)) . '</option>' . "\n";
105                        }
106                        if ($opt_lang) {
107                                $sel_lang .= '<optgroup label="' . str_replace('../', '', $reel_dir) . '/">' . "\n";
108                                $sel_lang .= $opt_lang;
109                                $sel_lang .= '</optgroup>' . "\n";
110                        }
111                }
112                $sel_dossier .= '<option value="' . $ou_fichier;
113                $sel_dossier .= ($sel_d == $ou_fichier) ? '" selected="selected">' : '">';
114                $sel_dossier .= str_replace('../', '', $reel_dir) . '/</option>' . "\n";
115        }
116
117        $sel_lang .= '</select>' . "\n";
118        $sel_dossier .= '</select>' . "\n";
119
120        return $retour = array('fichiers' => $sel_lang, 'dossiers' => $sel_dossier);
121}
122
123/**
124 * Lister tous les plugins
125 *
126 * @param string $rep_base
127 * @return array
128 */
129
130// $rep_base  => le repertoire de depart de l'arboresence a scanner
131function lister_dossiers_plugins($rep_base=null) {
132        include_spip('inc/plugin');
133        // liste_plugin_files() integre les repertoires supplementaires de plugins
134        // dans le cadre de la mutualisation
135        $liste_rep = liste_plugin_files($rep_base);
136        if (is_null($rep_base))
137                $rep_base = _DIR_PLUGINS;
138        $dossiers = array();
139        foreach ($liste_rep as $rep) {
140                $reel_dir = $rep_base . $rep;
141                $dossiers[] = $rep;
142                if ($sous_rep = glob($reel_dir.'/*/lang', GLOB_ONLYDIR)) {
143                        for ($i = 0; $i < count($sous_rep); $i++) {
144                        $dossiers[] = str_replace($rep_base, '', str_replace('/lang', '', $sous_rep[$i]));
145                        }
146                }
147        }
148        return $dossiers;
149}
150
151?>
Note: See TracBrowser for help on using the repository browser.