source: spip-zone/_plugins_/svp/svp_fonctions.php @ 45609

Last change on this file since 45609 was 45609, checked in by eric@…, 10 years ago

Ajout de l'affichage des traductions sur la page de chaque plugin
Incrément de version
Cette version sera mise au chaud maintenant en attendant la prochaine release majeure compatible STEP et DTD

  • Property svn:eol-style set to native
File size: 8.5 KB
Line 
1<?php
2
3function svp_afficher_version($intervalle, $logiciel){
4        if (!strlen($intervalle)) return '';
5        if (!preg_match(',^[\[\(]([0-9.]*[\s-]*[a-zRC\s]*)[;]([0-9.]*[\s-]*[a-zRC\s]*)[\]\)]$,',$intervalle,$regs)) return false;
6        $mineure = $regs[1];
7        $majeure = $regs[2];
8        $mineure_inc = $intervalle{0}=="[";
9        $majeure_inc = substr($intervalle,-1)=="]";
10        if (strlen($mineure)){
11                if (!strlen($majeure))
12                        $version = $logiciel . ($mineure_inc ? ' &ge; ' : ' &gt; ') . $mineure;
13                else
14                        $version = $mineure . ($mineure_inc ? ' &le; ' : ' &lt; ') .  $logiciel . ($majeure_inc ? ' &le; ' : ' &lt; ') . $majeure;
15        }
16        else {
17                $version =  $logiciel . ($majeure_inc ? ' &le; ' : ' &lt; ') . $majeure;
18        }       
19
20        return $version;
21}
22
23function svp_afficher_etat($etat) {
24        include_spip('plugins/afficher_plugin');
25        return plugin_etat_en_clair($etat);
26}
27
28function svp_afficher_dependances($balise_serialisee, $dependance='necessite', $type='plugins', $sep='<br />'){
29        $texte = '';
30       
31        $dependances = unserialize($balise_serialisee);
32        foreach($dependances[$dependance] as $_dependance) {
33                if (($type == 'plugins' ) AND ($_dependance['id'] != 'SPIP')) {
34                        if ($texte) 
35                                $texte .= $sep;
36                        if ($plugin = sql_fetsel('id_plugin, nom', 'spip_plugins', 'prefixe=' . sql_quote($_dependance['id'])))
37                                $logiciel = '<a href="' . generer_url_entite($plugin['id_plugin'], 'plugin') . '" title="' . _T('svp:bulle_aller_plugin') . '">' .
38                                                        extraire_multi($plugin['nom']) . '</a>';
39                        else
40                                // Cas ou le plugin n'est pas encore dans la base SVP.
41                                // On affiche son préfixe, cependant ce n'est pas un affichage evant perdurer
42                                $logiciel = $_dependance['id'];
43                        $texte .= svp_afficher_version($_dependance['version'], $logiciel);
44                }
45        }
46       
47        return $texte;
48}
49
50function svp_afficher_traductions($balise_serialisee, $mode='resume', $module=''){
51        $texte = '';
52        $traductions = unserialize($balise_serialisee);
53       
54        if ($mode == 'resume') {
55                if (count($traductions) == 0)
56                        $texte = _T('svp:info_aucun_module');
57                else {
58                        $liste_modules = implode(', ', array_keys($traductions));
59                        $texte = _T('svp:info_modules_utilises', 
60                                                array('total_modules' => count($traductions), 'liste_modules' => $liste_modules));
61                }
62        }
63       
64        return $texte;
65}
66
67function svp_afficher_langues($langues, $sep=', '){
68        $texte = '';
69       
70        foreach ($langues as $_code => $_traducteurs) {
71                if ($texte) 
72                        $texte .= $sep;
73                $texte .= $_code . (count($_traducteurs) > 0 ? ' (' . implode(', ', $_traducteurs) . ')' : '');
74        }
75
76        return $texte;
77}
78
79function svp_afficher_voirenligne($id_depot) {
80        $url = generer_url_action('redirect', "type=depot&id=$id_depot&var_mode=calcul");
81        return icone_horizontale(_T('voir_en_ligne'), $url, 'racine-24.gif', 'rien.gif', 0);
82}
83
84
85function svp_extraire_url($lien) {
86
87        if (!preg_match(_RACCOURCI_LIEN, $lien, $matches))
88                return trim($lien);
89        else
90                return trim($matches[4]);
91}
92
93function svp_afficher_statistiques_globales($id_depot){
94        $info = '';
95
96        $total = svp_compter('depot', $id_depot);
97        if (!$id_depot) {
98                // Si on filtre pas sur un depot alors on affiche le nombre de depots
99                $info = '<li id="stats-depot" class="liste-items">
100                                        <div class="unit size80">' . ucfirst(trim(_T('svp:info_depots_disponibles', array('total_depots'=>'')))) . '</div>
101                                        <div class="unit size20 lastUnit">' . $total['depot'] . '</div>
102                                </li>';
103        }
104        // Compteur des plugins filtre ou pas par depot
105        $info .= '<li id="stats-plugin" class="liste-items">
106                                <div class="unit size80">' . ucfirst(trim(_T('svp:info_plugins_heberges',  array('total_plugins'=>'')))) . '</div>
107                                <div class="unit size20 lastUnit">' . $total['plugin'] . '</div>
108                        </li>';
109        // Compteur des paquets filtre ou pas par depot
110        $info .= '<li id="stats-paquet" class="liste-items">
111                                <div class="unit size80">' . ucfirst(trim(_T('svp:info_paquets_disponibles', array('total_paquets'=>'')))) . '</div>
112                                <div class="unit size20 lastUnit">' . $total['paquet'] . '</div>
113                        </li>';
114
115        return $info;
116}
117
118function svp_compter_telechargements($id_depot, $categorie){
119        $total = svp_compter('paquet', $id_depot, $categorie);
120        $info = _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
121        return $info;
122}
123
124function svp_compter_depots($id_depot, $contrib='plugin'){
125        $info = '';
126
127        $total = svp_compter('depot', $id_depot);
128        if (!$id_depot) {
129                $info = _T('svp:info_depots_disponibles', array('total_depots'=>$total['depot'])) . ', ' .
130                                _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
131                                _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
132        }
133        else {
134                if ($contrib == 'plugin') {
135                        $info = _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
136                                        _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']-$total['autre']));
137                }
138                else {
139                        $info = _T('svp:info_contributions_hebergees', array('total_autres'=>$total['autre']));
140                }
141        }
142        return $info;
143}
144
145function svp_compter_plugins($id_depot, $categorie){
146        $total = svp_compter('plugin', $id_depot, $categorie);
147        $info = _T('svp:info_plugins_disponibles', array('total_plugins'=>$total['plugin']));
148        return $info;
149}
150
151function svp_compter($entite, $id_depot=0, $categorie=0){
152        $compteurs = array();
153
154        $group_by = array();
155        $where = array();
156        if ($id_depot)
157                $where[] = "t1.id_depot=" . sql_quote($id_depot);
158
159        if ($entite == 'plugin') {
160                $from = 'spip_plugins AS t2, spip_depots_plugins AS t1';
161                $where[] = "t1.id_plugin=t2.id_plugin";
162                if ($categorie)
163                        $where[] = "t2.categorie=" . sql_quote($categorie);
164                $compteurs['plugin'] = sql_count(sql_select('t2.id_plugin', $from, $where));
165        }
166        elseif ($entite == 'paquet') {
167                if ($categorie) {
168                        $ids = sql_allfetsel('id_plugin', 'spip_plugins', 'categorie='.sql_quote($categorie));
169                        $ids = array_map('reset', $ids);
170                        $where[] = sql_in('t1.id_plugin', $ids);
171                }
172                $compteurs['paquet'] = sql_countsel('spip_paquets AS t1', $where);
173        }
174        elseif ($entite == 'depot') {
175                $champs = array('COUNT(t1.id_depot) AS depot', 
176                                                'SUM(t1.nbr_plugins) AS plugin', 
177                                                'SUM(t1.nbr_paquets) AS paquet',
178                                                'SUM(t1.nbr_autres) AS autre');
179                $compteurs = sql_fetsel($champs, 'spip_depots AS t1', $where);
180        }
181        elseif ($entite == 'categorie') {
182                $from = array('spip_plugins AS t2');
183                if ($id_depot) {
184                        $ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where);
185                        $ids = array_map('reset', $ids);
186                        $where = array(sql_in('t2.id_plugin', $ids));
187                }
188                if ($categorie)
189                        $where[] = "t2.categorie=" . sql_quote($categorie);
190                else
191                        $group_by = array('t2.categorie');
192                $compteurs['categorie'] = sql_countsel($from, $where, $group_by); 
193        }
194
195        return $compteurs;
196}
197
198function balise_SVP_CATEGORIES($p) {
199
200        $categorie = interprete_argument_balise(1,$p);
201        $categorie = isset($categorie) ? str_replace('\'', '"', $categorie) : '""';
202
203        $p->code = 'calcul_svp_categories('.$categorie.')';
204
205        return $p;
206}
207
208function calcul_svp_categories($categorie) {
209
210        $retour = '';
211        $svp_categories = unserialize($GLOBALS['meta']['svp_categories']);
212
213        if (is_array($svp_categories)) {
214                if (($categorie) AND in_array($categorie, $svp_categories))
215                        $retour = _T('svp:categorie_' . strtolower($categorie));
216                else {
217                        sort($svp_categories);
218                        // On positionne l'absence de categorie en fin du tableau
219                        $svp_categories[] = array_shift($svp_categories);
220                        foreach ($svp_categories as $_alias)
221                                $retour[$_alias] = svp_traduire_categorie($_alias);
222                }
223        }
224       
225        return $retour;
226}
227
228function svp_traduire_categorie($alias) {
229
230        $traduction = '';
231        if ($alias) {
232                $traduction = _T('svp:categorie_' . $alias);
233        }
234        return $traduction;
235}
236
237function svp_traduire_type_depot($type) {
238
239        $traduction = '';
240        if ($type) {
241                $traduction = _T('svp:info_type_depot_' . $type);
242        }
243        return $traduction;
244}
245
246// Surcharge du filtre foreach pour qu'il passe des parametres au modele
247// Pour l'instant ces parametres sont passes sous la forme Vi=Ei
248// mais peut-etre qu'un tableau serait plus approprie ???
249// Le foreach est toutefois renomme
250function filtre_iterer_modele($balise_deserializee, $modele ='foreach') {
251               
252        $parametres = func_get_args();
253        unset($parametres[0], $parametres[1]);
254
255        $texte = '';
256        $i = 0;
257        $contexte = array();
258        if(is_array($balise_deserializee)) {
259                foreach ($balise_deserializee as $k => $v) {
260                        $i++;
261                        $contexte = array_merge(array('iteration' => $i, 'cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) ;
262                        if (is_array($parametres)){
263                                foreach($parametres as $_p){
264                                        if (preg_match(",^([^=]*)=(.*)$,", $_p, $matches)) {
265                                                $contexte[$matches[1]] = $matches[2];
266                                        }
267                                }       
268                        }
269                        $texte .= recuperer_fond('modeles/'.$modele, $contexte);
270                }
271        }
272
273        return $texte;
274}
275
276?>
Note: See TracBrowser for help on using the repository browser.