1 | <?php |
---|
2 | /** |
---|
3 | * Ce fichier contient les fonctions de création, de mise à jour et de suppression |
---|
4 | * du schéma de données propres au plugin (tables de la base de données et configuration meta) |
---|
5 | * |
---|
6 | * @package SPIP\BOUSSOLE\Schema\Installation |
---|
7 | */ |
---|
8 | |
---|
9 | if (!defined("_ECRIRE_INC_VERSION")) return; |
---|
10 | |
---|
11 | |
---|
12 | /** |
---|
13 | * Installation du schéma de données propre au plugin et gestion des migrations suivant |
---|
14 | * les évolutions. |
---|
15 | * |
---|
16 | * Le schéma comprend des tables en BDD et des variables de configuration |
---|
17 | * |
---|
18 | * @api |
---|
19 | * |
---|
20 | * @param string $nom_meta_base_version |
---|
21 | * Nom de la meta dans laquelle sera rangée la version du schéma |
---|
22 | * @param string $version_cible |
---|
23 | * Version du schéma de données en fin d'upgrade |
---|
24 | * |
---|
25 | * @return void |
---|
26 | */ |
---|
27 | function boussole_upgrade($nom_meta_base_version, $version_cible){ |
---|
28 | |
---|
29 | $maj = array(); |
---|
30 | |
---|
31 | // Configuration par défaut à la première activation du plugin |
---|
32 | $defaut_config_03 = array( |
---|
33 | 'client' => array('serveurs_disponibles' => |
---|
34 | array('spip' => array('url' => 'http://boussole.spip.net'))), |
---|
35 | 'serveur' => array('boussoles_disponibles' => array()) |
---|
36 | ); |
---|
37 | $defaut_config_04 = array( |
---|
38 | 'serveur' => array('actif' => '', 'nom' => '') |
---|
39 | ); |
---|
40 | $maj['create'] = array( |
---|
41 | array('maj_tables', array('spip_boussoles', 'spip_boussoles_extras')), |
---|
42 | array('ecrire_config', 'boussole', array_merge($defaut_config_03, $defaut_config_04)) |
---|
43 | ); |
---|
44 | |
---|
45 | // On ajoute la table des extras et on supprime toutes les boussoles |
---|
46 | // Seule la boussole SPIP sera réinstallée par défaut. |
---|
47 | // Pour les autres il faudra de toute façon adapter la boussole avant de les réinstaller |
---|
48 | $maj['0.2'] = array( |
---|
49 | array('maj_tables', array('spip_boussoles_extras')), |
---|
50 | array('maj02') |
---|
51 | ); |
---|
52 | |
---|
53 | // A partir de ce schéma, le plugin migre ses globales en configuration |
---|
54 | $maj['0.3'] = array( |
---|
55 | array('maj03', $defaut_config_03) |
---|
56 | ); |
---|
57 | |
---|
58 | // A partir de ce schéma, le plugin migre la constante _BOUSSOLE_ALIAS_SERVEUR en configuration |
---|
59 | $maj['0.4'] = array( |
---|
60 | array('maj04', $defaut_config_04) |
---|
61 | ); |
---|
62 | |
---|
63 | include_spip('base/upgrade'); |
---|
64 | maj_plugin($nom_meta_base_version, $version_cible, $maj); |
---|
65 | |
---|
66 | // Quelque que soit l'action en cours, on ajoute ou on met à jour systématiquement la boussole SPIP. |
---|
67 | include_spip('inc/client'); |
---|
68 | list($ok, $message) = boussole_ajouter('spip', 'spip'); |
---|
69 | if (!$ok) |
---|
70 | spip_log("Administrations - Erreur lors de l'ajout de la boussole spip : " . $message, 'boussole' . _LOG_ERREUR); |
---|
71 | else |
---|
72 | spip_log("Administrations - Ajout de la boussole spip ok", 'boussole' . _LOG_INFO); |
---|
73 | |
---|
74 | spip_log('Installation/mise à jour des tables du plugin','boussole' . _LOG_INFO); |
---|
75 | } |
---|
76 | |
---|
77 | |
---|
78 | /** |
---|
79 | * Suppression de l'ensemble du schéma de données propre au plugin |
---|
80 | * |
---|
81 | * @api |
---|
82 | * |
---|
83 | * @param string $nom_meta_base_version |
---|
84 | * Nom de la meta dans laquelle sera rangée la version du schéma |
---|
85 | * |
---|
86 | * @return void |
---|
87 | */ |
---|
88 | function boussole_vider_tables($nom_meta_base_version) { |
---|
89 | // On nettoie les metas de mises a jour des boussoles |
---|
90 | $meta = array(); |
---|
91 | $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', array(), 'aka_boussole'); |
---|
92 | if ($akas_boussole) { |
---|
93 | foreach (array_map('reset', $akas_boussole) as $_aka_boussole) { |
---|
94 | $meta[] = 'boussole_infos_' . $_aka_boussole; |
---|
95 | } |
---|
96 | if ($meta) |
---|
97 | sql_delete('spip_meta', sql_in('nom', $meta)); |
---|
98 | } |
---|
99 | |
---|
100 | // on efface ensuite la table et la meta habituelle designant la version du plugin |
---|
101 | sql_drop_table("spip_boussoles"); |
---|
102 | sql_drop_table("spip_boussoles_extras"); |
---|
103 | |
---|
104 | // on efface la meta de configuration du plugin |
---|
105 | effacer_meta('boussole'); |
---|
106 | |
---|
107 | // on efface la meta du schéma du plugin |
---|
108 | effacer_meta($nom_meta_base_version); |
---|
109 | |
---|
110 | spip_log('Désinstallation des données du plugin','boussole' . _LOG_INFO); |
---|
111 | } |
---|
112 | |
---|
113 | |
---|
114 | /** |
---|
115 | * Migration du schéma 0.1 au 0.2. |
---|
116 | * |
---|
117 | * Suppression des boussoles autres que la boussole spip car on ne peut pas les mettre à jour, |
---|
118 | * leur serveur n'étant pas connu. |
---|
119 | * |
---|
120 | * @return void |
---|
121 | */ |
---|
122 | function maj02() { |
---|
123 | include_spip('inc/client'); |
---|
124 | |
---|
125 | $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', array(), 'aka_boussole'); |
---|
126 | if ($akas_boussole) { |
---|
127 | foreach (array_map('reset', $akas_boussole) as $_aka_boussole) { |
---|
128 | if ($_aka_boussole != 'spip') |
---|
129 | supprimer_boussole($_aka_boussole); |
---|
130 | } |
---|
131 | } |
---|
132 | spip_log('Maj 0.2 des données du plugin','boussole' . _LOG_INFO); |
---|
133 | } |
---|
134 | |
---|
135 | |
---|
136 | /** |
---|
137 | * Migration du schéma 0.2 au 0.3. |
---|
138 | * |
---|
139 | * Les globales $serveur_boussoles_disponibles et $client_serveurs_disponibles sont |
---|
140 | * transférées dans des variables de configuration |
---|
141 | * |
---|
142 | * @param array $defaut_config |
---|
143 | * Configuration par défaut supplémentaire ajoutée pour ce schéma. Si le site a |
---|
144 | * déjà personnalisé les globales la configuration par défaut sera écrasée par |
---|
145 | * celle des globales migrées. |
---|
146 | * |
---|
147 | * @return void |
---|
148 | */ |
---|
149 | function maj03($defaut_config) { |
---|
150 | |
---|
151 | // On initialise la configuration ajoutée avec celle par défaut |
---|
152 | $config = $defaut_config; |
---|
153 | |
---|
154 | // Migration des éventuels serveurs configurés autres que "spip" |
---|
155 | if (isset($GLOBALS['client_serveurs_disponibles'])) { |
---|
156 | // On boucle sur tous les serveurs configurés |
---|
157 | foreach($GLOBALS['client_serveurs_disponibles'] as $_serveur => $_infos) { |
---|
158 | if ($_serveur != 'spip') { |
---|
159 | if (isset($_infos['api'])) { |
---|
160 | $config['client']['serveurs_disponibles'][$_serveur]['url'] = str_replace('/spip.php?action=[action][arguments]', '', $_infos['api']); |
---|
161 | } |
---|
162 | else if (isset($_infos['url'])) { |
---|
163 | $config['client']['serveurs_disponibles'][$_serveur] = $_infos; |
---|
164 | } |
---|
165 | } |
---|
166 | } |
---|
167 | // Suppression de la globale devenue inutile |
---|
168 | unset($GLOBALS['client_serveurs_disponibles']); |
---|
169 | } |
---|
170 | |
---|
171 | // Migration des éventuelles boussoles manuelles hébergés par le serveur |
---|
172 | if (isset($GLOBALS['serveur_boussoles_disponibles'])) { |
---|
173 | // On boucle sur tous les serveurs configurés |
---|
174 | foreach($GLOBALS['serveur_boussoles_disponibles'] as $_boussole => $_infos) { |
---|
175 | if ($_infos['prefixe'] == '') { |
---|
176 | $config['serveur']['boussoles_disponibles'][$_boussole] = $_infos; |
---|
177 | } |
---|
178 | } |
---|
179 | // Suppression de la globale devenue inutile |
---|
180 | unset($GLOBALS['serveur_boussoles_disponibles']); |
---|
181 | } |
---|
182 | |
---|
183 | // Mise à jour de la configuration migrée. Il n'y a pas de configuration existante. |
---|
184 | include_spip('inc/config'); |
---|
185 | ecrire_config('boussole', $config); |
---|
186 | |
---|
187 | spip_log('Maj 0.3 des données du plugin : ' . serialize(lire_config('boussole')),'boussole' . _LOG_INFO); |
---|
188 | } |
---|
189 | |
---|
190 | |
---|
191 | /** |
---|
192 | * Migration du schéma 0.3 au 0.4. |
---|
193 | * |
---|
194 | * La constante _BOUSSOLE_ALIAS_SERVEUR est transformée en deux variables de configuration, |
---|
195 | * l'une pour l'activité de la fonction serveur et l'autre pour le nom du serveur. |
---|
196 | * |
---|
197 | * @param array $defaut_config |
---|
198 | * Configuration par défaut supplémentaire ajoutée pour ce schéma. Si le site est |
---|
199 | * déjà un serveur, la configuration par défaut sera écrasée par celle de la constante migrée. |
---|
200 | * |
---|
201 | * @return void |
---|
202 | */ |
---|
203 | function maj04($defaut_config) { |
---|
204 | |
---|
205 | // Initialisation de la configuration migrée avec la configuration existante. |
---|
206 | include_spip('inc/config'); |
---|
207 | $config = lire_config('boussole'); |
---|
208 | |
---|
209 | // Migration de l'éventuel serveur installé sur le site |
---|
210 | // -- On met à jour l'activité et le nom du serveur |
---|
211 | $config['serveur']['actif'] = defined('_BOUSSOLE_ALIAS_SERVEUR') ? 'on' : $defaut_config['serveur']['actif']; |
---|
212 | $config['serveur']['nom'] = defined('_BOUSSOLE_ALIAS_SERVEUR') ? _BOUSSOLE_ALIAS_SERVEUR : $defaut_config['serveur']['nom']; |
---|
213 | |
---|
214 | // Mise à jour en BDD de la confguration migrée |
---|
215 | ecrire_config('boussole', $config); |
---|
216 | |
---|
217 | spip_log('Maj 0.4 des données du plugin : ' . serialize(lire_config('boussole')),'boussole' . _LOG_INFO); |
---|
218 | } |
---|
219 | |
---|
220 | ?> |
---|