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

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

Ajout d'une fonction pour afficher la description complète d'un plugin.

File size: 11.5 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 15 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
12/*
13to do
14vérifier les parties à traduire
15*/
16include_spip('inc/charsets');
17include_spip('inc/texte');
18include_spip('inc/plugin'); // pour plugin_est_installe
19include_spip('inc/xml');
20
21//Creation de la balise #APROPOS
22function balise_APROPOS_dist($p) {
23        //recupere un eventuel argument
24        $premier = interprete_argument_balise(1, $p);
25        //s'il y en a 1, on traite la chose
26        if ($premier != ''){
27        $p->code = 'calcul_info_apropos(' . $premier . ')';
28        }else{
29        //si pas d\'argument, on affiche la liste des plugins
30        $p->code = 'calcul_info_apropos("listes")';
31        }
32        $p->interdire_scripts = false;
33        return $p;
34}
35
36// fait l tri dans l'argument passé avec la balise : apropos|liste, apropos|nombre, apropos|plugins, apropos|extensions, apropos|default
37// liste pour afficher la totale,
38// nombre pour afficher le nombre total plugin et extensions
39// plugins pour afficher le nombre de plugins
40// extensions pour afficher le nombre d'extensions
41// default pour afficher une description complète du plugin
42
43function calcul_info_apropos($params){
44//liste_prefix_plugin_actifs est la liste des prefixes des plugins actifs
45$liste_prefix_plugin_actifs = liste_chemin_plugin_actifs();
46// $liste_prefix_extensions_actives est la liste des prefixes des extensions actives
47$liste_prefix_extensions_actives = liste_plugin_files(_DIR_EXTENSIONS);
48
49switch ($params) { 
50        // si parametre liste, alors afficher la liste de tout ce qui est actif avec un résumé pour chaque
51        case "liste": 
52        /* on s'occupe de la liste les plugins */
53        $liste_plugins_actifs = apropos_affiche_les_pluginsActifs($liste_prefix_plugin_actifs,$afficheQuoi="resume");
54        //$liste_plugins_actifs = apropos_affiche_la_partie_generale($liste_prefix_plugin_actifs,$afficheQuoi="resume");
55        /* on s'occupe de la liste des extensions */
56        $liste_extensions_actives = apropos_affiche_les_extension(_DIR_EXTENSIONS,$afficheQuoi="resume");
57        //$liste_extensions_actives = apropos_affiche_la_partie_generale($quoiAfficher="extensions",$afficheQuoi="resume");
58        return $liste_plugins_actifs.$liste_extensions_actives;
59        break;
60       
61        // si parametre nombre, alors afficher le nombre de plugins et extensions actifs
62        case "nombre":
63        $nbre_pluginsActifs = count($liste_prefix_plugin_actifs);
64        $nbre_ext = count($liste_prefix_extensions_actives);
65        return $nbre_ext+$nbre_pluginsActifs;
66        break;
67        /* si parametre plugins, afficher le nombre de plugin actifs */
68        case "plugins":
69        $nbre_pluginsActifs = count($liste_prefix_plugin_actifs);
70        return $nbre_pluginsActifs;
71        break;
72        /* si parametre extensions, afficher le nombre d'extensions actives */
73        case "extensions":
74        $nbre_ext = count($liste_prefix_extensions_actives);
75        return $nbre_ext;
76        break;
77        /* si parametre defaut, on récupère le prefixe du plugin pour afficher la description complète de celui-ci */
78        default:
79        $leResume = apropos_afficher_info_du_plugins($url_page, $params, $class_li="item",$dir_plugins=_DIR_PLUGINS,$afficheQuoi="latotale",$params);
80        return "<br />".$leResume."<br />";
81        break;
82        }
83}
84
85function apropos_affiche_les_extension($liste_extensions_actives,$afficheQuoi){
86        $lesExtensions = "";
87        if ($liste_extensions = liste_plugin_files(_DIR_EXTENSIONS)) {
88                $format = 'liste'; 
89                $lesExtensions .= "<div class='apropos-liste'>";
90                $lesExtensions .= "<h3>".count($liste_extensions)." extensions activées automatiquement.</h3>";
91                $lesExtensions .= apropos_afficher_list(self(), $liste_extensions,$liste_extensions, _DIR_EXTENSIONS,$afficheQuoi);// surcharge de fonction
92                $lesExtensions .= "</div>\n";
93        }
94        return $lesExtensions;
95}
96
97/* les fonctions utilisees pour les plugins */
98// entete liste des plugins pour affichage du nombre du plugin actives
99function apropos_affiche_les_pluginsActifs($liste_prefix_plugin_actifs, $afficheQuoi){
100                $lesPlugins .= "<div class='apropos-liste'><h3>".sinon(
101                                                singulier_ou_pluriel(count($liste_prefix_plugin_actifs), 'plugins_actif_un', 'plugins_actifs', 'count'),
102                                                _T('plugins_actif_aucun')
103                                                )."</h3>";
104                $lesPlugins .= apropos_afficher_list(self(), $liste_prefix_plugin_actifs,$liste_plugins_actifs, _DIR_PLUGINS, $format='liste',$afficheQuoi,$params);
105        return $lesPlugins."</div>\n";
106}
107
108
109// Extrait de  http://doc.spip.org/@affiche_liste_plugins
110/* Creation de la liste des plugins actifs, trie de la liste par ordre alphabetique*/
111function apropos_afficher_list($url_page,$liste_plugins, $liste_plugins_actifs, $dir_plugins,$afficheQuoi){
112        $get_infos = charger_fonction('get_infos','plugins');
113       
114        // je recupere la liste des plugin par leur nom
115        $liste_plugins = array_flip($liste_plugins);
116        foreach(array_keys($liste_plugins) as $chemin) {
117                $info = $get_infos($chemin, false, $dir_plugins);
118                $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($info['nom']))))));
119        }       
120        $block_UL = '';
121        // pour chaque plugin, je vais aller chercher les informations complementaires a afficher
122        // en l'occurrence, nom, version, etat, slogan ou description et logo.
123        // je construis une liste classique avec des UL et des LI
124        foreach($liste_plugins as $plug => $nom){
125                $block_UL .= apropos_afficher_info_du_plugins($url_page, $plug, "item", $dir_plugins,$afficheQuoi,$params)."\n";
126        }
127
128        return "<ul>".$block_UL."</ul>";
129}
130
131// Extrait de  http://doc.spip.org/@ligne_plug
132/* Extrait les infos de chaque plugin */
133function apropos_afficher_info_du_plugins($url_page, $plug_file, $class_li="item", $dir_plugins=_DIR_PLUGINS,$afficheQuoi,$params) {
134
135        $force_reload = (_request('var_mode')=='recalcul');
136        $get_infos = charger_fonction('get_infos','plugins');
137        $info = $get_infos($plug_file, $force_reload, $dir_plugins);
138        $leBloc = charger_fonction('afficher_plugin', 'plugins');
139       
140// Affichage des différentes informations à récupérer
141// suivants que nous voulions un liste totale des plugins
142// ou juste le description complete d'un seul plugin
143// je cherche la version de Spip car différence entre Spip 2 et Spip 3
144        //recherche la version de Spip
145        $laversion = spip_version();
146        $version_de_spip = $laversion[0];
147        //si version 3 de Spip
148        if ($version_de_spip == '3'){
149                //recherche la presence d'un fichier paquet.xml
150                if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "paquet") . ".xml")) {
151                        $lefichier = 'lepaquet';
152                        }else{
153                        if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "plugin") . ".xml"))
154                        $lefichier = 'le pluginxml';
155                }
156               
157                $prefix = $info['prefix'];
158                $dir = "$dir_plugins$plug_file";
159                // si afficheQuoi = latotale, je vais afficher toutes les infos du plugin,
160                // y comprit une description complète et non uniquement un résumé.
161                // Autrement, affiche le résumé
162                // fonction demandée pour pouvoir afficher une page par plugin, page qui affiche
163                // la description complète de ce plugin.
164                //nom
165                if ($afficheQuoi == "latotale"){
166                //je teste pour vérifier que $prefix n'est pas vide. Si vide, c'est que le préfixe entré est invalide
167                if ($prefix ==''){
168                        return "<span class='apropos-erreur'>"
169                        . "Erreur dans la saisie du préfixe du plugin.</span><br /> Vous avez entré <b>".$params."</b> comme préfixe. Vérifiez ce dernier qui se trouve dans le fichier paquet.xml ou plugin.xml du plugin.";
170                        }else{
171                        $get_desc = charger_fonction('afficher_plugin','plugins');
172                        $slogan = PtoBR(plugin_propre($info['description'], "$dir/lang/paquet-$prefix"));
173                        $documentation = $info['documentation'];
174                        if ($documentation != ''){
175                        $documentation = "<div class='apropos-description'>La documentation du plugin : <a href=\"".$info['documentation']."\">".$info['documentation']."</a></div>";
176                        }
177                        $demonstration = $info['demonstration'];
178                        if ($demonstration != ''){
179                        $demonstration = "<div class='apropos-description'>Le plugin en action : <a href=\"".$info['demonstration']."\">".$info['demonstration']."</a></div>";
180                        }
181                        }
182                }else{
183                        $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
184                        // test si slogan vide afin de prendre la description via le fichier plugin.xml le cas echeant
185                        if ($slogan!==''){
186                                // une seule ligne dans le slogan : couper si besoin
187                                if (($p=strpos($slogan, "<br />"))!==FALSE)
188                                        $slogan = substr($slogan, 0,$p);
189                                // couper par securite
190                                $slogan = couper($slogan, 180).".";
191                                }else{
192                                $get_desc = charger_fonction('afficher_plugin','plugins');
193                                $slogan = couper(plugin_propre($info['description']), 180);
194                        }
195                }
196                $url = parametre_url($url_page, "plugin", substr($dir,strlen(_DIR_RACINE)));
197       
198                // affiche l'icone du plugin ou une icone générique si absente
199                if (isset($info['logo']) and $i = trim($info['logo'])) {
200                        include_spip("inc/filtres_images_mini");
201                        $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','Icone du plugin '.$info['nom']);
202                        $i = "<span class='apropos-icon'>".$i."</span>";
203                } else {
204                        $generic = _DIR_PLUGIN_APROPOS."img/generique.png"; //mettre une icone generique si pas d'icone de defini
205                        include_spip("inc/filtres_images_mini");
206                        $i = inserer_attribut(image_reduire("$generic", 32),'alt','Icone g&eacute;n&eacute;rique pour le plugin '.$info['nom']);
207                        $i = "<div class='apropos-icon'>$i</div>";
208                }
209               
210                // grosse différence avec Spip 2 qui retournait une liste et non 1 array
211                if (is_array($info['auteur'])) {
212                $auteur = PtoBR(plugin_propre(implode($info['auteur'])));
213                }else{
214                $auteur = plugin_propre($info['auteur']);
215                }
216               
217                $leNom=PtoBR(plugin_propre($info['nom']));
218        }
219       
220        //si version 2 de Spip
221        if ($version_de_spip == '2'){
222        $get_desc = charger_fonction('afficher_plugin','plugins');
223        $desc = plugin_propre($info['description']);
224        $dir = $dir_plugins.$plug_file;
225        if (($p=strpos($desc, "<br />"))!==FALSE)
226                $desc = substr($desc, 0,$p);
227                $slogan = couper($desc,180);
228                $url = parametre_url($url_page, "plugin", $dir);
229                $leNom = typo($info['nom']);
230                if (isset($info['icon']) and $i = trim($info['icon'])) {
231                        include_spip("inc/filtres_images_mini");
232                        $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','Icone du plugin '.$leNom);
233                        $i = "<div class='apropos-icon'>$i</div>";
234                } else {
235                        $generic = _DIR_PLUGIN_APROPOS."img/generique.png"; //mettre une icone generique si pas d'icone de defini
236                        include_spip("inc/filtres_images_mini");
237                        $i = inserer_attribut(image_reduire("$generic", 32),'alt','Icone g&eacute;n&eacute;rique pour le plugin '.$leNom);
238                        $i = "<div class='apropos-icon'>$i</div>";
239                        //$i = '';
240                }
241                $auteur = plugin_propre($info['auteur']) ;             
242                        // on recherche la trace d'une arobase pour remplacer par 1 image
243                        $lemail = strpos($auteur,'@') ;
244                        if ($lemail !== false) {
245                                $larobase = "<img src=\""._DIR_PLUGIN_APROPOS."img/arob.png\" alt=\"remplacant\" />";
246                                $auteur = preg_replace('/@/', $larobase, $auteur);
247                        }
248                        // on recherche la trace d'un tag <br /> pour le supprimer
249                        $lebr = strpos($auteur,'<br ') ;
250                        if ($lebr !== false) {
251                                $lepasbr = " ";
252                                $auteur = preg_replace('/<br \/>/', $lepasbr, $auteur);
253                        }
254        }
255       
256        // on construit l'affichage des informations
257        $leResume = "<div class='apropos-resume'>"
258        . $i
259        . "<span class='apropos-nom'>".$leNom."</span>"
260        . "<span class='apropos-version'>v ".$info['version']."</span>"
261        . "<span class='apropos-etat'> - ".plugin_etat_en_clair($info['etat'])."</span>"
262        . "<div class='apropos-description'>".$slogan."</div>"
263        . "<span class='apropos-auteur'>". _T('public:par_auteur') .$auteur.".</span>"
264        . $documentation
265        . $demonstration
266        . "</div>";
267
268
269        return "<li>"
270        . $leResume
271        . $erreur
272        ."</li>";
273}
274
275?>
Note: See TracBrowser for help on using the repository browser.