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

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

On vire la meta des branches spip au profit d'une globale et d'une balise.
On corrige la css suite au déplacement dans css/

  • Property svn:eol-style set to native
File size: 11.4 KB
Line 
1<?php
2
3function svp_afficher_intervalle($intervalle, $logiciel){
4        if (!strlen($intervalle)) return '';
5        if (!preg_match(',^[\[\(\]]([0-9.a-zRC\s\-]*)[;]([0-9.a-zRC\s\-\*]*)[\]\)\[]$,Uis',$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
23
24function svp_afficher_etat($etat) {
25        include_spip('plugins/afficher_plugin');
26        return plugin_etat_en_clair($etat);
27}
28
29
30function svp_afficher_dependances($balise_serialisee, $dependance='necessite', $sep='<br />'){
31        $texte = '';
32       
33        $dependances = unserialize($balise_serialisee);
34        foreach($dependances[$dependance] as $_dependance) {
35                if ($texte) 
36                        $texte .= $sep;
37                if (($dependance == 'necessite' ) OR ($dependance == 'utilise')) {
38                        if ($plugin = sql_fetsel('id_plugin, nom', 'spip_plugins', 'prefixe=' . sql_quote($_dependance['nom'])))
39                                $logiciel = '<a href="' . generer_url_entite($plugin['id_plugin'], 'plugin') . '" title="' . _T('svp:bulle_aller_plugin') . '">' .
40                                                        extraire_multi($plugin['nom']) . '</a>';
41                        else
42                                // Cas ou le plugin n'est pas encore dans la base SVP.
43                                // On affiche son préfixe, cependant ce n'est pas un affichage devant perdurer
44                                $logiciel = $_dependance['nom'];
45                        $texte .= svp_afficher_intervalle($_dependance['version'], $logiciel);
46                }
47                else 
48                        // On demande l'affichage des librairies
49                        $texte .= '<a href="' . $_dependance['lien'] . '" title="' . _T('svp:bulle_telecharger_librairie') . '">' .     $_dependance['nom'] . '</a>';
50        }
51
52        return $texte;
53}
54
55
56function svp_afficher_credits($balise_serialisee, $sep=', ') {
57        $texte = '';
58       
59        $credits = unserialize($balise_serialisee);
60        if ($credits) {
61                foreach ($credits as $_credit) {
62                        if ($texte) 
63                                $texte .= $sep;
64                        // Si le credit en cour n'est pas un array c'est donc un copyright
65                        $texte .= 
66                                (!is_array($_credit)) 
67                                ? $_credit 
68                                : ($_credit['url'] ? '<a href="' . $_credit['url'] . '">' : '') . 
69                                  $_credit['nom'] .
70                                  ($_credit['url'] ? '</a>' : '');
71                }
72        }
73
74        return $texte;
75}
76
77
78function svp_afficher_langues($langues, $sep=', '){
79        $texte = '';
80       
81        if ($langues) {
82                foreach ($langues as $_code => $_traducteurs) {
83                        if ($texte) 
84                                $texte .= $sep;
85                        $texte .= $_code . (count($_traducteurs) > 0 ? ' (' . implode(', ', $_traducteurs) . ')' : '');
86                }
87        }
88
89        return $texte;
90}
91
92function svp_afficher_voirenligne($id_depot) {
93        $url = generer_url_action('redirect', "type=depot&id=$id_depot&var_mode=calcul");
94        return icone_horizontale(_T('voir_en_ligne'), $url, 'racine-24.gif', 'rien.gif', 0);
95}
96
97
98function svp_afficher_statistiques_globales($id_depot=0){
99        $info = '';
100
101        $total = svp_compter('depot', $id_depot);
102        if (!$id_depot) {
103                // Si on filtre pas sur un depot alors on affiche le nombre de depots
104                $info = '<li id="stats-depot" class="item">
105                                        <div class="unit size4of5">' . ucfirst(trim(_T('svp:info_depots_disponibles', array('total_depots'=>'')))) . '</div>
106                                        <div class="unit size1of5 lastUnit">' . $total['depot'] . '</div>
107                                </li>';
108        }
109        // Compteur des plugins filtre ou pas par depot
110        $info .= '<li id="stats-plugin" class="item">
111                                <div class="unit size4of5">' . ucfirst(trim(_T('svp:info_plugins_heberges',  array('total_plugins'=>'')))) . '</div>
112                                <div class="unit size1of5 lastUnit">' . $total['plugin'] . '</div>
113                        </li>';
114        // Compteur des paquets filtre ou pas par depot
115        $info .= '<li id="stats-paquet" class="item">
116                                <div class="unit size4of5">' . ucfirst(trim(_T('svp:info_paquets_disponibles', array('total_paquets'=>'')))) . '</div>
117                                <div class="unit size1of5 lastUnit">' . $total['paquet'] . '</div>
118                        </li>';
119
120        return $info;
121}
122
123
124function svp_compter_telechargements($id_depot=0, $categorie='', $compatible_spip=''){
125        $total = svp_compter('paquet', $id_depot, $categorie, $compatible_spip);
126        $info = _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
127        return $info;
128}
129
130
131function svp_compter_depots($id_depot, $contrib='plugin'){
132        $info = '';
133
134        $total = svp_compter('depot', $id_depot);
135        if (!$id_depot) {
136                $info = _T('svp:info_depots_disponibles', array('total_depots'=>$total['depot'])) . ', ' .
137                                _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
138                                _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
139        }
140        else {
141                if ($contrib == 'plugin') {
142                        $info = _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
143                                        _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']-$total['autre']));
144                }
145                else {
146                        $info = _T('svp:info_contributions_hebergees', array('total_autres'=>$total['autre']));
147                }
148        }
149        return $info;
150}
151
152
153function svp_compter_plugins($id_depot=0, $categorie='', $compatible_spip='') {
154        $total = svp_compter('plugin', $id_depot, $categorie, $compatible_spip);
155        $info = _T('svp:info_plugins_disponibles', array('total_plugins'=>$total['plugin']));
156        return $info;
157}
158
159
160// Attention le critere de compatibilite spip pris en compte est uniquement celui d'une branche SPIP
161function svp_compter($entite, $id_depot=0, $categorie='', $compatible_spip=''){
162        $compteurs = array();
163
164        $group_by = array();
165        $where = array();
166        if ($id_depot)
167                $where[] = "t1.id_depot=" . sql_quote($id_depot);
168
169        if ($entite == 'plugin') {
170                $from = 'spip_plugins AS t2, spip_depots_plugins AS t1';
171                $where[] = "t1.id_plugin=t2.id_plugin";
172                if ($categorie)
173                        $where[] = "t2.categorie=" . sql_quote($categorie);
174                if ($compatible_spip) {
175                        $creer_where = charger_fonction('where_compatible_spip', 'inc');
176                        $where[] =  $creer_where($compatible_spip, 't2', '>');
177                }
178                $compteurs['plugin'] = sql_count(sql_select('t2.id_plugin', $from, $where));
179        }
180        elseif ($entite == 'paquet') {
181                if ($categorie) {
182                        $ids = sql_allfetsel('id_plugin', 'spip_plugins', 'categorie='.sql_quote($categorie));
183                        $ids = array_map('reset', $ids);
184                        $where[] = sql_in('t1.id_plugin', $ids);
185                }
186                if ($compatible_spip) {
187                        $creer_where = charger_fonction('where_compatible_spip', 'inc');
188                        $where[] =  $creer_where($compatible_spip, 't1', '>');
189                }
190                $compteurs['paquet'] = sql_countsel('spip_paquets AS t1', $where);
191        }
192        elseif ($entite == 'depot') {
193                $champs = array('COUNT(t1.id_depot) AS depot', 
194                                                'SUM(t1.nbr_plugins) AS plugin', 
195                                                'SUM(t1.nbr_paquets) AS paquet',
196                                                'SUM(t1.nbr_autres) AS autre');
197                $compteurs = sql_fetsel($champs, 'spip_depots AS t1', $where);
198        }
199        elseif ($entite == 'categorie') {
200                $from = array('spip_plugins AS t2');
201                $where_depot = $where[0];
202                $where = array();
203                if ($id_depot) {
204                        $ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where_depot);
205                        $ids = array_map('reset', $ids);
206                        $where[] = sql_in('t2.id_plugin', $ids);
207                }
208                if ($compatible_spip) {
209                        $creer_where = charger_fonction('where_compatible_spip', 'inc');
210                        $where[] =  $creer_where($compatible_spip, 't2', '>');
211                }
212                if ($categorie)
213                        $where[] = "t2.categorie=" . sql_quote($categorie);
214                else
215                        $group_by = array('t2.categorie');
216                $compteurs['categorie'] = sql_countsel($from, $where, $group_by); 
217        }
218
219        return $compteurs;
220}
221
222
223function balise_SVP_CATEGORIES($p) {
224
225        $categorie = interprete_argument_balise(1,$p);
226        $categorie = isset($categorie) ? str_replace('\'', '"', $categorie) : '""';
227
228        $p->code = 'calcul_svp_categories('.$categorie.')';
229
230        return $p;
231}
232
233function calcul_svp_categories($categorie) {
234
235        $retour = array();
236        $svp_categories = $GLOBALS['categories_plugin'];
237
238        if (is_array($svp_categories)) {
239                if (($categorie) AND in_array($categorie, $svp_categories))
240                        $retour[$categorie] = _T('svp:categorie_' . strtolower($categorie));
241                else {
242                        sort($svp_categories);
243                        // On positionne l'absence de categorie en fin du tableau
244                        $svp_categories[] = array_shift($svp_categories);
245                        foreach ($svp_categories as $_alias)
246                                $retour[$_alias] = svp_traduire_categorie($_alias);
247                }
248        }
249       
250        return $retour;
251}
252
253
254function balise_SVP_BRANCHES_SPIP($p) {
255
256        $branche = interprete_argument_balise(1,$p);
257        $branche = isset($branche) ? str_replace('\'', '"', $branche) : '""';
258
259        $p->code = 'calcul_svp_branches_spip('.$branche.')';
260
261        return $p;
262}
263
264function calcul_svp_branches_spip($branche) {
265
266        $retour = array();
267        $svp_branches = $GLOBALS['infos_branches_spip'];
268
269        if (is_array($svp_branches)) {
270                if (($branche) AND in_array($branche, $svp_branches))
271                        // On renvoie les bornes inf et sup de la branche specifiee
272                        $retour = $svp_branches[$branche];
273                else {
274                        // On renvoie uniquement les numeros de branches
275                        $retour = array_keys($svp_branches);
276                }
277        }
278       
279        return $retour;
280}
281
282function svp_traduire_categorie($alias) {
283
284        $traduction = '';
285        if ($alias) {
286                $traduction = _T('svp:categorie_' . strtolower($alias));
287        }
288        return $traduction;
289}
290
291function svp_traduire_type_depot($type) {
292
293        $traduction = '';
294        if ($type) {
295                $traduction = _T('svp:info_type_depot_' . $type);
296        }
297        return $traduction;
298}
299
300// Surcharge du filtre foreach pour qu'il passe des parametres au modele
301// Pour l'instant ces parametres sont passes sous la forme Vi=Ei
302// mais peut-etre qu'un tableau serait plus approprie ???
303// Le foreach est toutefois renomme
304function filtre_iterer_modele($balise_deserializee, $modele ='foreach') {
305               
306        $parametres = func_get_args();
307        unset($parametres[0], $parametres[1]);
308
309        $texte = '';
310        $i = 0;
311        $contexte = array();
312        if(is_array($balise_deserializee)) {
313                foreach ($balise_deserializee as $k => $v) {
314                        $i++;
315                        $contexte = array_merge(array('iteration' => $i, 'cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) ;
316                        if (is_array($parametres)){
317                                foreach($parametres as $_p){
318                                        if (preg_match(",^([^=]*)=(.*)$,", $_p, $matches)) {
319                                                $contexte[$matches[1]] = $matches[2];
320                                        }
321                                }       
322                        }
323                        $texte .= recuperer_fond('modeles/'.$modele, $contexte);
324                }
325        }
326
327        return $texte;
328}
329
330/**
331 * Critere de compatibilite avec une VERSION precise ou une BRANCHE de SPIP :
332 * Fonctionne sur les tables spip_paquets et spip_plugins
333 *
334 *   {compatible_spip}
335 *   {compatible_spip 2.0.8} ou {compatible_spip 1.9}
336 *   {compatible_spip #ENV{vers}} ou {compatible_spip #ENV{vers, 1.9.2}}
337 *   {compatible_spip #GET{vers}} ou {compatible_spip #GET{vers, 2.1}}
338 *
339 *   Si aucune valeur explicite (dans le critère, par #ENV, par #SET)
340 *   tous les enregistrements sont retournés.
341 *
342 *   Le ! (NOT) fonctionne sur le critère BRANCHE
343 */
344function critere_compatible_spip_dist($idb, &$boucles, $crit) {
345
346        $boucle = &$boucles[$idb];
347        $table = $boucle->id_table;
348
349        // Si on utilise ! la fonction LOCATE doit retourner 0.
350        // -> utilise uniquement avec le critere BRANCHE
351        $op = ($crit->not == '!') ? '=' : '>';
352
353        $boucle->hash .= '
354        // COMPATIBILITE SPIP
355        $creer_where = charger_fonction(\'where_compatible_spip\', \'inc\');';
356
357        // version/branche explicite dans l'appel du critere
358        if (isset($crit->param[0][0])) {
359                $version = calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucle->id_parent);
360                $boucle->hash .= '
361                $where = $creer_where('.$version.', \''.$table.'\', \''.$op.'\');
362                ';
363        }
364        // pas de version/branche explicite dans l'appel du critere
365        // on regarde si elle est dans le contexte
366        else {
367                $boucle->hash .= '
368                $version = isset($Pile[0][\'compatible_spip\']) ? $Pile[0][\'compatible_spip\'] : \'\';
369                $where = $creer_where($version, \''.$table.'\', \''.$op.'\');
370                ';
371        }
372
373        $boucle->where[] = '$where';
374}
375
376?>
Note: See TracBrowser for help on using the repository browser.