[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / zen-garden-2 / zengarden_fonctions.php
1 <?php
2 /**
3 * Plugin Zen-Garden pour Spip 3.0
4 * Licence GPL (c) 2006-2013 Cedric Morin
5 *
6 * @package SPIP\Zen-Garden\Fonctions
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) {
10 return;
11 }
12
13 function zengarden_affiche_version_compatible($intervalle){
14 if (!strlen($intervalle)) return '';
15 if (!preg_match(',^[\[\(]([0-9.a-zRC\s]*)[;]([0-9.a-zRC\s]*)[\]\)]$,',$intervalle,$regs)) return false;
16 $mineure = $regs[1];
17 $majeure = $regs[2];
18 $mineure_inc = $intervalle{0}=="[";
19 $majeure_inc = substr($intervalle,-1)=="]";
20 if (strlen($mineure)){
21 if (!strlen($majeure))
22 $version = _T('zengarden:intitule_version') . ($mineure_inc ? ' &ge; ' : ' &gt; ') . $mineure;
23 else
24 $version = $mineure . ($mineure_inc ? ' &le; ' : ' &lt; ') . _T('zengarden:intitule_version') . ($majeure_inc ? ' &le; ' : ' &lt; ') . $majeure;
25 }
26 else {
27 $version = _T('zengarden:intitule_version') . ($majeure_inc ? ' &le; ' : ' &lt; ') . $majeure;
28 }
29
30 return $version;
31 }
32
33 /**
34 * Lister les thèmes
35 *
36 * Les thèmes peuvent être présent dans :
37 * - themes/* à la racine (ou autre _DIR_THEMES défini);
38 * - squelettes/themes/*;
39 * - plugins/*;
40 *
41 * @param bool $tous
42 * @return array
43 */
44 function zengarden_liste_themes($tous){
45 include_spip('inc/zengarden');
46
47 $themes = array();
48
49 // charger les themes de themes-dist/
50 if (is_dir(_DIR_THEMES_DIST))
51 $themes = array_merge($themes, zengarden_charge_themes(_DIR_THEMES_DIST, $tous));
52
53 // charger les themes de themes/
54 if (is_dir(_DIR_THEMES))
55 $themes = array_merge($themes, zengarden_charge_themes(_DIR_THEMES, $tous));
56
57 // ceux de squelettes/themes/
58 if (is_dir($skels=_DIR_RACINE."squelettes/themes/"))
59 $themes = array_merge($themes,zengarden_charge_themes($skels,$tous));
60
61 // ceux de chaque dossier_squelettes/themes/
62 if (strlen($GLOBALS['dossier_squelettes'])){
63 $s = explode(":",$GLOBALS['dossier_squelettes']);
64 foreach($s as $d){
65 if (_DIR_RACINE AND strncmp($d,_DIR_RACINE,strlen(_DIR_RACINE))!==0)
66 $d = _DIR_RACINE . $d;
67 if (is_dir($f="$d/themes/") AND $f!=$skels)
68 $themes = array_merge($themes,zengarden_charge_themes($f,$tous));
69 }
70 }
71
72 // ceux de plugins/
73 $themes = array_merge($themes,zengarden_charge_themes(_DIR_PLUGINS,$tous));
74
75 /**
76 * Recherche spécifique
77 * Invalider les thèmes incompatibles
78 *
79 * Si le squelette ou un plugin définit la constante _ZENGARDEN_FILTRE_THEMES,
80 * on ne prend que les thèmes compatibles
81 * Sinon, si on a le plugin zpip-dist, on ne liste que les thèmes compatibles avec zpip-dist
82 *
83 * Pour être compatible un thème doit avoir un <utilise...> du squelette en question dans son paquet.xml
84 */
85 $search = "dist";
86 if (defined('_ZENGARDEN_FILTRE_THEMES')) $search=_ZENGARDEN_FILTRE_THEMES;
87 elseif (defined('_DIR_PLUGIN_ZPIP')) $search="zpip";
88 elseif (defined('_DIR_PLUGIN_Z')) $search="z";
89
90 if ($search){
91 foreach ($themes as $k => $theme){
92 $keep = false;
93 foreach ($theme['utilise'] as $u){
94 if (strncasecmp($u['nom'],$search,max(strlen($u['nom']),strlen($search)))==0){
95 $keep = true;
96 continue;
97 }
98 }
99 if (!$keep)
100 unset($themes[$k]);
101 }
102 }
103
104 // et voila
105 return $themes;
106 }
107
108 /**
109 * Insertion dans le pipeline filter_liste_plugins (SPIP)
110 *
111 * Enlève les thèmes de la liste des plugins dans le privé
112 *
113 * @param array $flux
114 * Le tableau de la liste des plugins
115 * @return array $flux
116 * Le tableau de la liste des plugins modifié
117 */
118 function zengarden_filtrer_liste_plugins($flux){
119 foreach($flux['data'] as $d=>$info){
120 if ($info['categorie']=='theme'){
121 unset($flux['data'][$d]);
122 }
123 }
124 return $flux;
125 }
126
127
128
129 /**
130 * Afficher les auteurs ou licences
131 *
132 * Vient de plugin.xml ou paquet.xml
133 *
134 * @param array $donnees
135 * @return string
136 **/
137 function zengarden_affiche_info($donnees) {
138 if (is_array($donnees) AND count($donnees)) {
139 $liste = array();
140 foreach ($donnees as $d) {
141 if (!is_array($d)) {
142 $liste[] = $d;
143 } else {
144 $liste[] = $d['nom'];
145 }
146 }
147 return implode(',', $liste);
148 }
149 return '';
150 }