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

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

Correction de l'affichage des dépendances necessite

  • Property svn:eol-style set to native
File size: 7.7 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_voirenligne($id_depot) {
51        $url = generer_url_action('redirect', "type=depot&id=$id_depot&var_mode=calcul");
52        return icone_horizontale(_T('voir_en_ligne'), $url, 'racine-24.gif', 'rien.gif', 0);
53}
54
55
56function svp_extraire_url($lien) {
57
58        if (!preg_match(_RACCOURCI_LIEN, $lien, $matches))
59                return trim($lien);
60        else
61                return trim($matches[4]);
62}
63
64function svp_afficher_statistiques_globales($id_depot){
65        $info = '';
66
67        $total = svp_compter('depot', $id_depot);
68        if (!$id_depot) {
69                // Si on filtre pas sur un depot alors on affiche le nombre de depots
70                $info = '<li id="stats-depot" class="liste-items">
71                                        <div class="unit size80">' . ucfirst(trim(_T('svp:info_depots_disponibles', array('total_depots'=>'')))) . '</div>
72                                        <div class="unit size20 lastUnit">' . $total['depot'] . '</div>
73                                </li>';
74        }
75        // Compteur des plugins filtre ou pas par depot
76        $info .= '<li id="stats-plugin" class="liste-items">
77                                <div class="unit size80">' . ucfirst(trim(_T('svp:info_plugins_heberges',  array('total_plugins'=>'')))) . '</div>
78                                <div class="unit size20 lastUnit">' . $total['plugin'] . '</div>
79                        </li>';
80        // Compteur des paquets filtre ou pas par depot
81        $info .= '<li id="stats-paquet" class="liste-items">
82                                <div class="unit size80">' . ucfirst(trim(_T('svp:info_paquets_disponibles', array('total_paquets'=>'')))) . '</div>
83                                <div class="unit size20 lastUnit">' . $total['paquet'] . '</div>
84                        </li>';
85
86        return $info;
87}
88
89function svp_compter_telechargements($id_depot, $categorie){
90        $total = svp_compter('paquet', $id_depot, $categorie);
91        $info = _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
92        return $info;
93}
94
95function svp_compter_depots($id_depot, $contrib='plugin'){
96        $info = '';
97
98        $total = svp_compter('depot', $id_depot);
99        if (!$id_depot) {
100                $info = _T('svp:info_depots_disponibles', array('total_depots'=>$total['depot'])) . ', ' .
101                                _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
102                                _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']));
103        }
104        else {
105                if ($contrib == 'plugin') {
106                        $info = _T('svp:info_plugins_heberges', array('total_plugins'=>$total['plugin'])) . ', ' .
107                                        _T('svp:info_paquets_disponibles', array('total_paquets'=>$total['paquet']-$total['autre']));
108                }
109                else {
110                        $info = _T('svp:info_contributions_hebergees', array('total_autres'=>$total['autre']));
111                }
112        }
113        return $info;
114}
115
116function svp_compter_plugins($id_depot, $categorie){
117        $total = svp_compter('plugin', $id_depot, $categorie);
118        $info = _T('svp:info_plugins_disponibles', array('total_plugins'=>$total['plugin']));
119        return $info;
120}
121
122function svp_compter($entite, $id_depot=0, $categorie=0){
123        $compteurs = array();
124
125        $group_by = array();
126        $where = array();
127        if ($id_depot)
128                $where[] = "t1.id_depot=" . sql_quote($id_depot);
129
130        if ($entite == 'plugin') {
131                $from = 'spip_plugins AS t2, spip_depots_plugins AS t1';
132                $where[] = "t1.id_plugin=t2.id_plugin";
133                if ($categorie)
134                        $where[] = "t2.categorie=" . sql_quote($categorie);
135                $compteurs['plugin'] = sql_count(sql_select('t2.id_plugin', $from, $where));
136        }
137        elseif ($entite == 'paquet') {
138                if ($categorie) {
139                        $ids = sql_allfetsel('id_plugin', 'spip_plugins', 'categorie='.sql_quote($categorie));
140                        $ids = array_map('reset', $ids);
141                        $where[] = sql_in('t1.id_plugin', $ids);
142                }
143                $compteurs['paquet'] = sql_countsel('spip_paquets AS t1', $where);
144        }
145        elseif ($entite == 'depot') {
146                $champs = array('COUNT(t1.id_depot) AS depot', 
147                                                'SUM(t1.nbr_plugins) AS plugin', 
148                                                'SUM(t1.nbr_paquets) AS paquet',
149                                                'SUM(t1.nbr_autres) AS autre');
150                $compteurs = sql_fetsel($champs, 'spip_depots AS t1', $where);
151        }
152        elseif ($entite == 'categorie') {
153                $from = array('spip_plugins AS t2');
154                if ($id_depot) {
155                        $ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where);
156                        $ids = array_map('reset', $ids);
157                        $where = array(sql_in('t2.id_plugin', $ids));
158                }
159                if ($categorie)
160                        $where[] = "t2.categorie=" . sql_quote($categorie);
161                else
162                        $group_by = array('t2.categorie');
163                $compteurs['categorie'] = sql_countsel($from, $where, $group_by); 
164        }
165
166        return $compteurs;
167}
168
169function balise_SVP_CATEGORIES($p) {
170
171        $categorie = interprete_argument_balise(1,$p);
172        $categorie = isset($categorie) ? str_replace('\'', '"', $categorie) : '""';
173
174        $p->code = 'calcul_svp_categories('.$categorie.')';
175
176        return $p;
177}
178
179function calcul_svp_categories($categorie) {
180
181        $retour = '';
182        $svp_categories = unserialize($GLOBALS['meta']['svp_categories']);
183
184        if (is_array($svp_categories)) {
185                if (($categorie) AND in_array($categorie, $svp_categories))
186                        $retour = _T('svp:categorie_' . strtolower($categorie));
187                else {
188                        sort($svp_categories);
189                        // On positionne l'absence de categorie en fin du tableau
190                        $svp_categories[] = array_shift($svp_categories);
191                        foreach ($svp_categories as $_alias)
192                                $retour[$_alias] = svp_traduire_categorie($_alias);
193                }
194        }
195       
196        return $retour;
197}
198
199function svp_traduire_categorie($alias) {
200
201        $traduction = '';
202        if ($alias) {
203                $traduction = _T('svp:categorie_' . $alias);
204        }
205        return $traduction;
206}
207
208function svp_traduire_type_depot($type) {
209
210        $traduction = '';
211        if ($type) {
212                $traduction = _T('svp:info_type_depot_' . $type);
213        }
214        return $traduction;
215}
216
217// Surcharge du filtre foreach pour qu'il passe des parametres au modele
218// Pour l'instant ces parametres sont passes sous la forme Vi=Ei
219// mais peut-etre qu'un tableau serait plus approprie ???
220// Le foreach est toutefois renomme
221function filtre_iterer_modele($balise_deserializee, $modele ='foreach') {
222               
223        $parametres = func_get_args();
224        unset($parametres[0], $parametres[1]);
225
226        $texte = '';
227        $i = 0;
228        $contexte = array();
229        if(is_array($balise_deserializee)) {
230                foreach ($balise_deserializee as $k => $v) {
231                        $i++;
232                        $contexte = array_merge(array('iteration' => $i, 'cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) ;
233                        if (is_array($parametres)){
234                                foreach($parametres as $_p){
235                                        if (preg_match(",^([^=]*)=(.*)$,", $_p, $matches)) {
236                                                $contexte[$matches[1]] = $matches[2];
237                                        }
238                                }       
239                        }
240                        $texte .= recuperer_fond('modeles/'.$modele, $contexte);
241                }
242        }
243
244        return $texte;
245}
246
247?>
Note: See TracBrowser for help on using the repository browser.