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

Last change on this file since 117772 was 104327, checked in by spip.franck@…, 4 years ago

code.spip est maintenant en https, donc, j'ajoute le "s" à http

File size: 11.9 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.4 du 04 décembre 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_PLUGINS_DIST);
48// liste la totalité des plugins di dosier plugin
49$liste_tous_les_plugins = liste_plugin_files(_ROOT_PLUGINS);
50//return "<b>".$params."</b>";
51switch ($params) { 
52        // si parametre liste, alors afficher la liste de tout ce qui est actif avec un résumé pour chaque
53        case "liste": 
54        /* on s'occupe de la liste les plugins */
55        $liste_plugins_actifs = apropos_affiche_les_pluginsActifs($liste_prefix_plugin_actifs,$afficheQuoi="resume");
56
57        /* on s'occupe de la liste des extensions */
58        $liste_extensions_actives = apropos_affiche_les_extension(_DIR_PLUGINS_DIST,$afficheQuoi="resume");
59        return $liste_plugins_actifs.$liste_extensions_actives;
60        break;
61       
62        // si parametre nombre, alors afficher le nombre de plugins et extensions actifs
63        case "nombre":
64        $nbre_pluginsActifs = count($liste_prefix_plugin_actifs);
65        $nbre_ext = count($liste_prefix_extensions_actives);
66        return $nbre_ext+$nbre_pluginsActifs;
67        break;
68       
69        /* si parametre plugins, afficher le nombre de plugin actifs */
70        case "plugins":
71        $nbre_pluginsActifs = count($liste_prefix_plugin_actifs);
72        return $nbre_pluginsActifs;
73        break;
74       
75        /* si paramètre extensions, afficher le nombre d'extensions actives */
76        case "extensions":
77        $nbre_ext = count($liste_prefix_extensions_actives);
78        return $nbre_ext;
79        break;
80       
81        /* si paramètre adisposition, afficher le nombre de plugins du dossier plugins */
82        case "adisposition":
83        $nbre_tous = count($liste_tous_les_plugins);
84        return $nbre_tous;
85        break;
86       
87        /* additionne tout ce qui est disponible e, plugins et extensions */ 
88        case "disponible":
89        $nbre_ext = count($liste_prefix_extensions_actives);
90        $nbre_tous = count($liste_tous_les_plugins);
91        return $nbre_tous+$nbre_ext;
92        break;
93
94        /* si paramètre defaut, on récupère le prefixe du plugin pour afficher la description complète de celui-ci */
95        default:
96        //$leResume = count($liste_tous_les_plugins);
97        $leResume = apropos_afficher_info_du_plugins($url_page, $params, $class_li="item",$dir_plugins=_DIR_PLUGINS,$afficheQuoi="latotale",$params);
98        return "<br />".$leResume."<br />";
99        break; 
100        }
101
102}
103
104function apropos_affiche_les_extension($liste_extensions_actives,$afficheQuoi){
105        $lesExtensions = "";
106        if ($liste_extensions = liste_plugin_files(_DIR_PLUGINS_DIST)) {
107                $format = 'liste'; 
108                $lesExtensions .= "<div class='apropos-liste'>";
109                $lesExtensions .= "<h3>".count($liste_extensions)." "._T('apropos:extensions_automatiquement').".</h3>";
110                $lesExtensions .= apropos_afficher_list(self(), $liste_extensions,$liste_extensions, _DIR_PLUGINS_DIST,$afficheQuoi);// surcharge de fonction
111                $lesExtensions .= "</div>\n";
112        }
113        return $lesExtensions;
114}
115
116/* les fonctions utilisees pour les plugins */
117// entete liste des plugins pour affichage du nombre du plugin actives
118function apropos_affiche_les_pluginsActifs($liste_prefix_plugin_actifs, $afficheQuoi){
119                $lesPlugins .= "<div class='apropos-liste'><h3>".sinon(
120                                                singulier_ou_pluriel(count($liste_prefix_plugin_actifs), 'plugins_actif_un', 'plugins_actifs', 'count'),
121                                                _T('plugins_actif_aucun')
122                                                )."</h3>";
123                $lesPlugins .= apropos_afficher_list(self(), $liste_prefix_plugin_actifs,$liste_plugins_actifs, _DIR_PLUGINS, $format='liste',$afficheQuoi,$params);
124        return $lesPlugins."</div>\n";
125}
126
127
128// Extrait de  https://code.spip.net/@affiche_liste_plugins
129/* Creation de la liste des plugins actifs, trie de la liste par ordre alphabetique*/
130function apropos_afficher_list($url_page,$liste_plugins, $liste_plugins_actifs, $dir_plugins,$afficheQuoi){
131        $get_infos = charger_fonction('get_infos','plugins');
132       
133        // je recupere la liste des plugin par leur nom
134        $liste_plugins = array_flip($liste_plugins);
135        foreach(array_keys($liste_plugins) as $chemin) {
136                $info = $get_infos($chemin, false, $dir_plugins);
137                $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($info['nom']))))));
138        }       
139
140        // je trie par ordre alphabetique la liste
141       
142        asort($liste_plugins);
143
144        $block_UL = '';
145        // pour chaque plugin, je vais aller chercher les informations complementaires a afficher
146        // en l'occurrence, nom, version, etat, slogan ou description et logo.
147        // je construis une liste classique avec des UL et des LI
148        foreach($liste_plugins as $plug => $nom){
149                $block_UL .= apropos_afficher_info_du_plugins($url_page, $plug, "item", $dir_plugins,$afficheQuoi,$params)."\n";
150        }
151
152        return "<ul>".$block_UL."</ul>";
153}
154
155// Extrait de  https://code.spip.net/@ligne_plug
156/* Extrait les infos de chaque plugin */
157function apropos_afficher_info_du_plugins($url_page, $plug_file, $class_li="item", $dir_plugins=_DIR_PLUGINS,$afficheQuoi,$params) {
158
159        $force_reload = (_request('var_mode')=='recalcul');
160        $get_infos = charger_fonction('get_infos','plugins');
161        $info = $get_infos($plug_file, $force_reload, $dir_plugins);
162        $leBloc = charger_fonction('afficher_plugin', 'plugins');
163
164// Affichage des différentes informations à récupérer
165// suivants que nous voulions un liste totale des plugins
166// ou juste le description complete d'un seul plugin
167
168                $lefichier = '';
169                //recherche la presence d'un fichier paquet.xml
170                if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "paquet") . ".xml")) {
171                        $lefichier = 'paquet';
172                        }else{
173                        if (is_readable($file = "$dir_plugins$plug_file/" . ($desc = "plugin") . ".xml"))
174                        $lefichier = 'plugin';
175                }
176               
177                $prefix = $info['prefix'];
178                $dir = "$dir_plugins$plug_file";
179                // si afficheQuoi = latotale, je vais afficher toutes les infos du plugin,
180                // y comprit une description complète et non uniquement un résumé.
181                // Autrement, affiche le résumé
182                // fonction demandée pour pouvoir afficher une page par plugin, page qui affiche
183                // la description complète de ce plugin.
184
185                if ($afficheQuoi == "latotale"){
186                        //je teste pour vérifier que $prefix n'est pas vide. Si vide, c'est que le préfixe entré est invalide ou que le plugin est dans le dossier extension
187                        // de toute façon, a revoir car pas gégène
188                        if ($prefix ==''){
189                                // je check si par hasard ce ne serait pas un plugin place dans le dossier extension
190                                $info = $get_infos($plug_file, $force_reload, _DIR_PLUGINS_DIST);
191                                $dir = _DIR_PLUGINS_DIST.$plug_file;
192                                $prefix = $info['prefix'];
193                                if ($prefix !=''){
194                                //return "<span class='apropos-erreur'>Le paramètre entré n'est pas valide. Consultez la documentation du plugin.</span>";
195                                }else{
196                                return "<span class='apropos-erreur'>"
197                                ."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.";
198                        }}
199
200                                //je récupère la description complète, la version avec svn, le crédit et la licence
201                                $slogan = PtoBR(plugin_propre($info['description'], "$dir/lang/paquet-$prefix"));
202
203                                // prise en compte des plugin sans tag description par ex crayons dans sa version 1.13.0
204                                if ((strpos($slogan, "_description")) !==FALSE) { // $dir."/lang/paquet-".$prefix.":".$prefix."_description"){ //$dir."/lang/paquet-".$prefix.":".$prefix."_description"){
205                                        $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
206                                }
207                                //$slogan .= "<br />".$description;
208                                $documentation = $info['documentation'];
209                                if ($documentation != ''){
210                                        $documentation = "<div class='apropos-description'>"._T('apropos:la_documentation')." <a href=\"".$info['documentation']."\">".$info['documentation']."</a></div>";
211                                }
212                                $demonstration = $info['demonstration'];
213                                if ($demonstration != ''){
214                                        $demonstration = "<div class='apropos-description'>"._T('apropos:la_demonstration')." <a href=\"".$info['demonstration']."\">".$info['demonstration']."</a></div>";
215                                }
216                                $credit = $info['credit'];
217                                if ($credit != ''){
218                                        $credit = "<div class='apropos-auteur'>"._T('plugin_info_credit')." : ".implode($info['credit'])."</div>";
219                                }
220
221                                //teste si le numero de version SVn n'est pas vide, dans ce cas, on n'affiche rien                     
222                                if ($svn_revision !==''){
223                                        $svn_revision = version_svn_courante($dir_plugins.$plug_file);
224                                        $leSVN = "SVN ".($svn_revision<0 ? ' SVN':'').' ['.abs($svn_revision).']'; // version_svn_courante($dir_plugins.$plug_file);     
225                                }
226                                $infoSVN = "<div class='apropos-svn'>".$leSVN.", "._T('repertoire_plugins')." ".$dir."</div>"; 
227
228                }else{
229
230                // si pas la totale des infos, le minimum pour l'affichage en liste
231                        $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix"));
232                        // test si slogan vide afin de prendre la description via le fichier plugin.xml le cas echeant
233                        if ($slogan!==''){
234                                // une seule ligne dans le slogan : couper si besoin
235                                if (($p=strpos($slogan, "<br />"))!==FALSE)
236                                        $slogan = substr($slogan, 0,$p);
237                                // couper par securite
238                                $slogan = couper($slogan, 180).".";
239                                }else{
240                                $get_desc = charger_fonction('afficher_plugin','plugins');
241                                $slogan = couper(plugin_propre($info['description']), 180);
242                        }
243                }
244                $leNom = PtoBR(plugin_propre($info['nom']));
245                $url = parametre_url($url_page, "plugin", substr($dir,strlen(_DIR_RACINE)));
246       
247                // affiche l'icone du plugin ou une icone générique si absente
248                if (isset($info['logo']) and $i = trim($info['logo'])) {
249                        include_spip("inc/filtres_images_mini");
250                        $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt','Icone du plugin '.$leNom);
251                        $i = "<span class='apropos-icon'>".$i."</span>";
252                } else {
253                        $generic = _DIR_PLUGIN_APROPOS."img/generique.png"; //mettre une icone generique si pas d'icone de defini
254                        include_spip("inc/filtres_images_mini");
255                        $i = inserer_attribut(image_reduire("$generic", 32),'alt','Icone g&eacute;n&eacute;rique pour le plugin '.$leNom);
256                        $i = "<div class='apropos-icon'>$i</div>";
257                }
258               
259                // grosse différence avec Spip 2 qui retournait une liste et non 1 array
260
261        if (isset($info['auteur']))
262        {
263                if (is_array($info['auteur'])){
264                        $a = formater_credits($info['auteur'], ', ');
265                        $auteur =  _T('public:par_auteur') .PtoBR(propre($a, $dir));
266                }
267                }
268       
269       
270        // on construit l'affichage des informations
271        $leResume = "<div class='resume'>"
272        . $i
273        . "<span class='apropos-nom'>".$leNom."</span>"
274        . "<span class='apropos-version'>v ".$info['version']."</span>"
275        . "<span class='apropos-etat'> - ".plugin_etat_en_clair($info['etat'])."</span>"
276        . $infoSVN
277        . "<div class='apropos-description'>".$slogan."</div>"
278        . "<span class='apropos-auteur'>".$auteur.$credit."</span>"
279        . $documentation
280        . $demonstration
281        . "</div>";
282
283
284        return "<li>"
285        . $leResume
286        . $erreur
287        ."</li>";
288}
289
290?>
Note: See TracBrowser for help on using the repository browser.