source: spip-zone/_plugins_/boussole/trunk/boussole_administrations.php @ 104199

Last change on this file since 104199 was 104199, checked in by eric@…, 3 years ago

On passe le serveur spip en https.
Pour faire propre on fait un up de schéma avec la fonction de mise à jour associée.

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