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

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

Correction de la migration du schéma en 0.4.
Amélioration d'un message d'information pour la configuration.
Laisser la possibilité au serveur spip de se configurer en serveur !

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