421350ee344b5a52d80139955112b037f1d2dd1b
[lhc/web/www.git] / www / ecrire / plugins / afficher_liste.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16 include_spip('inc/charsets');
17
18 /**
19 * Afficher une liste de plugins dans l'interface
20 * http://code.spip.net/@affiche_liste_plugins
21 *
22 * @param string $url_page
23 * @param array $liste_plugins
24 * @param array $liste_plugins_checked
25 * @param array $liste_plugins_actifs
26 * @param string $dir_plugins
27 * @param string $afficher_un
28 * @return string
29 */
30 function plugins_afficher_liste_dist(
31 $url_page,
32 $liste_plugins,
33 $liste_plugins_checked,
34 $liste_plugins_actifs,
35 $dir_plugins = _DIR_PLUGINS,
36 $afficher_un = 'afficher_plugin'
37 ) {
38 $get_infos = charger_fonction('get_infos', 'plugins');
39 $ligne_plug = charger_fonction($afficher_un, 'plugins');
40
41 $all_infos = $get_infos($liste_plugins, false, $dir_plugins);
42
43 $all_infos = pipeline('filtrer_liste_plugins',
44 array(
45 'args' => array(
46 'liste_plugins' => $liste_plugins,
47 'liste_plugins_checked' => $liste_plugins_checked,
48 'liste_plugins_actifs' => $liste_plugins_actifs,
49 'dir_plugins' => $dir_plugins
50 ),
51 'data' => $all_infos
52 )
53 );
54
55 $liste_plugins = array_flip($liste_plugins);
56 foreach ($liste_plugins as $chemin => $v) {
57 // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte.
58 if (isset($all_infos[$chemin])) {
59 $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom']))))));
60 } else {
61 unset($liste_plugins[$chemin]);
62 }
63 }
64 asort($liste_plugins);
65 $exposed = urldecode(_request('plugin'));
66
67 $block_par_lettre = false;//count($liste_plugins)>10;
68 $fast_liste_plugins_actifs = array();
69 $fast_liste_plugins_checked = array();
70 if (is_array($liste_plugins_actifs)) {
71 $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs);
72 }
73 if (is_array($liste_plugins_checked)) {
74 $fast_liste_plugins_checked = array_flip($liste_plugins_checked);
75 }
76
77 $res = '';
78 $block = '';
79 $initiale = '';
80 $block_actif = false;
81 foreach ($liste_plugins as $plug => $nom) {
82 if (($i = substr($nom, 0, 1)) !== $initiale) {
83 $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
84 $initiale = $i;
85 $block = '';
86 $block_actif = false;
87 }
88 // le rep suivant
89 $actif = isset($fast_liste_plugins_actifs[$plug]);
90 $checked = isset($fast_liste_plugins_checked[$plug]);
91 $block_actif = $block_actif | $actif;
92 $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr($dir_plugins,
93 strlen(_DIR_RACINE)) . $plug));
94 $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, "item", $dir_plugins) . "\n";
95 }
96 $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
97 $class = basename($dir_plugins);
98
99 return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : "";
100 }
101
102
103 // http://code.spip.net/@affiche_block_initiale
104 function affiche_block_initiale($initiale, $block, $block_actif) {
105 if (strlen($block)) {
106 return "<li class='item'>"
107 . bouton_block_depliable($initiale, $block_actif ? true : false)
108 . debut_block_depliable($block_actif)
109 . "<ul>$block</ul>"
110 . fin_block()
111 . "</li>";
112 }
113
114 return "";
115 }