source: spip-zone/_plugins_/apropos/trunk/apropos_fonctions.php @ 53793

Last change on this file since 53793 was 53793, checked in by jp.GUIHARD@…, 9 years ago

Version de travail exclusivement pour Spip 3

File size: 8.8 KB
Line 
1<?php
2/*
3 * Plugin A propos des plugins pour SPIP 2
4 * Liste les plugins actifs avec affichage icon, nom, version, etat, short description
5 * Utilisation intensive des fonctions faisant cela dans le code de SPIP
6 * Auteur Jean-Philippe Guihard
7 * version 0.2 du 06 janvier 2011, 23h40
8 * ajout de la possibilite de n'afficher que le nombre de plugin et extension 
9 * code emprunte dans le code source de SPIP
10 */
11/*
12include_spip('inc/texte');
13include_spip('inc/plugin');
14include_spip('exec/admin_plugin');
15include_spip('inc/charsets');
16*/
17
18include_spip('inc/charsets');
19include_spip('inc/texte');
20include_spip('inc/plugin'); // pour plugin_est_installe
21include_spip('inc/xml');
22
23//Creation de la balise #APROPOS
24function balise_APROPOS_dist($p) {
25        //recupere un eventuel argument
26        $premier = interprete_argument_balise(1, $p);
27        //s'il y en a 1, on traite la chose
28        if ($premier != ''){
29        $p->code = 'calcul_info_apropos(' . $premier . ')';
30        }else{
31        //si pas d\'argument, on affiche la liste des plugins
32        $p->code = 'calcul_info_apropos("liste")';
33        }
34        $p->interdire_scripts = false;
35        return $p;
36}
37
38// fait l tri dans l'argument passé avec la balise : apropos|liste, apropos|nombre, apropos|plugins, apropos|extensions
39// liste pour afficher la totale,
40// nombre pour afficher le nombre total plugin et extensions
41// plugins pour afficher le nombre de plugins
42// extensions pour afficher le nombre d'extensions
43
44function calcul_info_apropos($params){
45// si parametre liste, alors tout afficher
46if ($params == "liste"){
47$affiche = charger_fonction('admin_plugin','exec');
48$lcpa = liste_chemin_plugin_actifs();
49$lpf = liste_plugin_files();
50
51/* on s'occupe de la liste des extensions */
52$liste_extensions_actives = apropos_affiche_les_extension(_DIR_EXTENSIONS);
53// liste les plugins
54$liste_des_pgI_actifs = apropos_affiche_les_PiG($lcpa,$lpf);
55return $liste_des_pgI_actifs.$liste_extensions_actives;
56}
57
58// si parametre nombre, alors afficher que le nombre de plugins et extensions
59if ($params == "nombre"){
60$pig = liste_chemin_plugin_actifs();
61$ext = liste_plugin_files(_DIR_EXTENSIONS);
62$nbre_pig = count($pig);
63$nbre_ext = count($ext);
64return $nbre_ext+$nbre_pig;
65}
66if ($params == "plugins"){
67$pig = liste_chemin_plugin_actifs();
68$nbre_pig = count($pig);
69return $nbre_pig;
70}if ($params == "extensions"){
71$ext = liste_plugin_files(_DIR_EXTENSIONS);
72$nbre_ext = count($ext);
73return $nbre_ext;
74}}
75
76function apropos_affiche_les_extension($liste_extensions_actives){
77        $rese = "";
78        if ($liste_extensions = liste_plugin_files(_DIR_EXTENSIONS)) {
79                $rese .= "<div class='apropos-liste'>";
80                $rese .= "<h3>".count($liste_extensions)." extensions activées automatiquement.</h3>";
81                $format = 'liste'; 
82                $rese .= apropos_plugins_afficher_list_dist(self(), $liste_extensions,$liste_extensions, _DIR_EXTENSIONS);// surcharge de fonction
83                $rese .= "</div>\n";
84        }
85        return $rese;
86}
87/* Fin liste les extensions */
88
89
90/* les fonctions utilisees pour les plugins */
91// entete liste des plugins pour affichage du nombre du plugin actives
92function apropos_affiche_les_PiG($lcpa,$lpf){
93                $h3 = "<div class='apropos-liste'><h3>".sinon(
94                                                singulier_ou_pluriel(count($lcpa), 'plugins_actif_un', 'plugins_actifs', 'count'),
95                                                _T('plugins_actif_aucun')
96                                                )."</h3>";
97                $corps = apropos_affiche_les_plugin($lcpa, $lcpa, $format);
98return $h3.$corps."</div>\n";
99}
100
101// Extrait de http://doc.spip.org/@affiche_les_plugins
102function apropos_affiche_les_plugin($liste_plugins, $liste_plugins_actifs, $format='liste'){
103        if (!$format)
104                $format = 'liste';
105        if (!in_array($format,array('liste','repertoires')))
106                $format = 'repertoires';
107        $res = apropos_plugins_afficher_list_dist(self(), $liste_plugins,$liste_plugins_actifs);
108
109        if (!$res) return "";
110        return  $res;
111}
112
113// Extrait de  http://doc.spip.org/@affiche_liste_plugins
114/* Creation de la liste des plugins actifs, trie de la liste par ordre alphabetique*/
115function apropos_plugins_afficher_list_dist($url_page,$liste_plugins, $liste_plugins_actifs, $dir_plugins=_DIR_PLUGINS,$afficher_un = 'afficher_plugin'){
116        $get_infos = charger_fonction('get_infos','plugins');
117       
118        // je recupere la liste des plugin par leur nom
119        $liste_plugins = array_flip($liste_plugins);
120        foreach(array_keys($liste_plugins) as $chemin) {
121                $info = $get_infos($chemin, false, $dir_plugins);
122                $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($info['nom']))))));
123        }
124       
125        // je trie cette liste par le nm de chacun
126        asort($liste_plugins);
127        $exposed = urldecode(_request('plugin'));
128
129        $block_par_lettre = false;//count($liste_plugins)>10;
130        $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs);
131        $res = '';
132        $block = '';
133        $initiale = '';
134        $block_actif = false;
135       
136        // pour chaque plugin, je vais aller chercher les informations complementaires a afficher
137        // en l'occurrence, nom, version, etat, slogan, description et logo.
138        foreach($liste_plugins as $plug => $nom){
139                $block .= apropos_plugins_afficher_plugins($url_page, $plug, "item", $dir_plugins)."\n";
140        }
141
142        return "<ul>".$block."</ul>";
143}
144
145// Extrait de  http://doc.spip.org/@ligne_plug
146/* Extrait les infos de chaque plugin */
147function apropos_plugins_afficher_plugins($url_page, $plug_file, $class_li="item", $dir_plugins=_DIR_PLUGINS) {
148
149        $force_reload = (_request('var_mode')=='recalcul');
150        $get_infos = charger_fonction('get_infos','plugins');
151        $info = $get_infos($plug_file, $force_reload, $dir_plugins);
152        $leBloc = charger_fonction('afficher_plugin', 'plugins');
153       
154
155        $leResume = apropos_plugin_resumer($info, $dir_plugins, $plug_file, $url_page);
156        return "<li>"
157        . $leResume
158        . $erreur
159        ."</li>";
160}
161
162// Extrait de Cartouche Resume a modifier pour l'affichage final
163/* Traite les infos a afficher */
164function apropos_plugin_resumer($info, $dir_plugins, $plug_file, $url_page) {
165        if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "paquet") . ".xml")) {
166                $lefichier = 'lepaquet';
167                if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "plugin") . ".xml"))
168                $lefichier = 'le pluginxml';
169        }
170       
171        $prefix = $info['prefix'];
172        $dir = "$dir_plugins$plug_file";
173        $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
174        // une seule ligne dans le slogan : couper si besoin
175        if (($p=strpos($slogan, "<br />"))!==FALSE)
176                $slogan = substr($slogan, 0,$p);
177        // couper par securite
178        $slogan = couper($slogan, 180);
179       
180        $url = parametre_url($url_page, "plugin", substr($dir,strlen(_DIR_RACINE)));
181
182        if (isset($info['logo']) and $i = trim($info['logo'])) {
183                include_spip("inc/filtres_images_mini");
184                $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','Icone du plugin '.$info['nom']);
185                $i = "<span class='apropos-icon'>".$i."</span>";
186        } else {
187                $generic = _DIR_PLUGIN_APROPOS."img/generique.png"; //mettre une icone generique si pas d'icone de defini
188                include_spip("inc/filtres_images_mini");
189                $i = inserer_attribut(image_reduire("$generic", 32),'alt','Icone g&eacute;n&eacute;rique pour le plugin '.$info['nom']);
190                $i = "<div class='apropos-icon'>$i</div>";
191        }
192        $auteur = implode($info['auteur']);
193
194        return "<div class='resume'>"
195        . $i
196        . "<span class='apropos-nom'>"
197        . typo(attribut_html($info['nom']))
198        . "</span>"
199        . " <span class='apropos-version'>v ".$lefichier.$info['version']."</span>"
200        . " <span class='apropos-etat'> - "
201        . plugin_etat_en_clair($info['etat'])
202        . "</span>"
203        . "<div class='apropos-description'>".$slogan.".</div><span class='apropos-auteur'>". _T('public:par_auteur') .$auteur.".</span>"
204        . "</div>";
205
206
207/*      $prefix = $info['prefix'];
208        $dir = "$dir_plugins$plug_file";
209        $slogan = typo(attribut_html($info['slogan'])); //PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
210        $get_desc = charger_fonction('afficher_plugin','plugins');
211        $desc = plugin_propre($info['description']);
212        // une seule ligne dans le slogan : couper si besoin
213        if (($p=strpos($slogan, "<br />"))!==FALSE)
214                $slogan = substr($slogan, 0,$p);
215        // couper par securite
216        $slogan = couper($slogan, 80);
217
218        $url = parametre_url($url_page, "plugin", substr($dir,strlen(_DIR_RACINE)));
219
220        if (isset($info['logo']) and $i = trim($info['logo'])) {
221                include_spip("inc/filtres_images_mini");
222                $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','Icone du plugin '.$info['nom']);
223                $i = "<div class='apropos-icon'>$i</div>";
224        } else {
225                $generic = _DIR_PLUGIN_APROPOS."img/generique.png"; //mettre une icone generique si pas d'icone de defini
226                include_spip("inc/filtres_images_mini");
227                $i = inserer_attribut(image_reduire("$generic", 32),'alt','Icone g&eacute;n&eacute;rique pour le plugin '.$info['nom']);
228                $i = "<div class='apropos-icon'>$i</div>";
229                //$i = '';
230        }
231
232        return "<div class='apropos-resume'>"
233        . $i
234        . " <span class='apropos-nom'>"
235        . typo(attribut_html($info['nom']))
236        . "</span>"
237        . "<span class='apropos-version'> v ".$info['version']."</span>"
238        . "<span class='apropos-etat'> - "
239        . typo(attribut_html($info['etat']))
240        . "</span>"
241        . "<div class='short'>".$slogan."</div>"
242        . "<div class='short'>".couper($desc,220)."</div>"
243        . "</div>";
244*/
245}
246?>
Note: See TracBrowser for help on using the repository browser.