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

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

Prend en compte maintenant la version 2 et la version 3 de Spip de façon transparente.

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