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

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

Utilisation d'une constante pour définir le nom du log du plugin.
Ajout donc d'un fichier d'options.

  • Property svn:eol-style set to native
File size: 7.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' => 'http://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        include_spip('base/upgrade');
65        maj_plugin($nom_meta_base_version, $version_cible, $maj);
66
67        // Quelque que soit l'action en cours, on ajoute ou on met à jour systématiquement la boussole SPIP.
68        include_spip('inc/client');
69        list($ok, $message) = boussole_ajouter('spip', 'spip');
70        if (!$ok)
71                spip_log("Administrations - Erreur lors de l'ajout de la boussole spip : " . $message, _BOUSSOLE_LOG . _LOG_ERREUR);
72        else
73                spip_log("Administrations - Ajout de la boussole spip ok", _BOUSSOLE_LOG . _LOG_INFO);
74
75        spip_log('Installation/mise à jour des tables du plugin',_BOUSSOLE_LOG . _LOG_INFO);
76}
77
78
79/**
80 * Suppression de l'ensemble du schéma de données propre au plugin, c'est-à-dire
81 * les tables et les variables de configuration.
82 *
83 * @api
84 *
85 * @param string $nom_meta_base_version
86 *              Nom de la meta dans laquelle sera rangée la version du schéma
87 *
88 * @return void
89 */
90function boussole_vider_tables($nom_meta_base_version) {
91        // On nettoie les metas de mises a jour des boussoles
92        $meta = array();
93        $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', array(), 'aka_boussole');
94        if ($akas_boussole) {
95                foreach (array_map('reset', $akas_boussole) as $_aka_boussole) {
96                        $meta[] = 'boussole_infos_' . $_aka_boussole;
97                }
98                if ($meta)
99                        sql_delete('spip_meta', sql_in('nom', $meta));
100        }
101
102        // on efface ensuite la table et la meta habituelle designant la version du plugin
103        sql_drop_table("spip_boussoles");
104        sql_drop_table("spip_boussoles_extras");
105
106        // on efface la meta de configuration du plugin
107        effacer_meta('boussole');
108
109        // on efface la meta du schéma du plugin
110        effacer_meta($nom_meta_base_version);
111
112        spip_log('Désinstallation des données du plugin',_BOUSSOLE_LOG . _LOG_INFO);
113}
114
115
116/**
117 * Migration du schéma 0.1 au 0.2.
118 *
119 * Ajout de la table `spip_boussoles_extras` et suppression des boussoles autres que
120 * la boussole "spip" car il n'est pas possible de les mettre à jour,
121 * leur serveur n'étant pas connu.
122 *
123 * @return void
124 */
125function maj02_boussole() {
126
127        // Ajout de la table
128        maj_tables(array('spip_boussoles_extras'));
129
130        // Suppression des boussoles non "spip"
131        include_spip('inc/client');
132        $akas_boussole = sql_allfetsel('aka_boussole', 'spip_boussoles', array(), 'aka_boussole');
133        if ($akas_boussole) {
134                foreach (array_map('reset', $akas_boussole) as $_aka_boussole) {
135                        if ($_aka_boussole != 'spip')
136                                supprimer_boussole($_aka_boussole);
137                }
138        }
139        spip_log('Maj 0.2 des données du plugin',_BOUSSOLE_LOG . _LOG_INFO);
140}
141
142
143/**
144 * Migration du schéma 0.2 au 0.3.
145 *
146 * Les globales `$serveur_boussoles_disponibles` et `$client_serveurs_disponibles` sont
147 * transférées dans des variables de configuration
148 *
149 * @param array $defaut_config
150 *              Configuration par défaut supplémentaire ajoutée pour ce schéma. Si le site a
151 *              déjà personnalisé les globales la configuration par défaut sera écrasée par
152 *              celle des globales migrées.
153 *
154 * @return void
155 */
156function maj03_boussole($defaut_config) {
157
158        // On initialise la configuration ajoutée avec celle par défaut
159        $config = $defaut_config;
160
161        // Migration des éventuels serveurs configurés autres que "spip"
162        if (isset($GLOBALS['client_serveurs_disponibles'])) {
163                // On boucle sur tous les serveurs configurés
164                foreach($GLOBALS['client_serveurs_disponibles'] as $_serveur => $_infos) {
165                        if ($_serveur != 'spip') {
166                                if (isset($_infos['api'])) {
167                                        $config['client']['serveurs_disponibles'][$_serveur]['url'] = str_replace('/spip.php?action=[action][arguments]', '', $_infos['api']);
168                                }
169                                else if (isset($_infos['url'])) {
170                                        $config['client']['serveurs_disponibles'][$_serveur] = $_infos;
171                                }
172                        }
173                }
174                // Suppression de la globale devenue inutile
175                unset($GLOBALS['client_serveurs_disponibles']);
176        }
177
178        // Migration des éventuelles boussoles manuelles hébergés par le serveur
179        if (isset($GLOBALS['serveur_boussoles_disponibles'])) {
180                // On boucle sur tous les serveurs configurés
181                foreach($GLOBALS['serveur_boussoles_disponibles'] as $_boussole => $_infos) {
182                        if ($_infos['prefixe'] == '') {
183                                $config['serveur']['boussoles_disponibles'][$_boussole] = $_infos;
184                        }
185                }
186                // Suppression de la globale devenue inutile
187                unset($GLOBALS['serveur_boussoles_disponibles']);
188        }
189
190        // Mise à jour de la configuration migrée. Il n'y a pas de configuration existante.
191        include_spip('inc/config');
192        ecrire_config('boussole', $config);
193
194        spip_log('Maj 0.3 des données du plugin : ' . serialize(lire_config('boussole')),_BOUSSOLE_LOG . _LOG_INFO);
195}
196
197
198/**
199 * Migration du schéma 0.3 au 0.4.
200 *
201 * La constante `_BOUSSOLE_ALIAS_SERVEUR` est transformée en deux variables de configuration,
202 * l'une pour l'activité de la fonction serveur et l'autre pour le nom du serveur.
203 *
204 * @param array $defaut_config
205 *              Configuration par défaut supplémentaire ajoutée pour ce schéma. Si le site est
206 *              déjà un serveur, la configuration par défaut sera écrasée par celle de la constante migrée.
207 *
208 * @return void
209 */
210function maj04_boussole($defaut_config) {
211
212        // Initialisation de la configuration migrée avec la configuration existante.
213        include_spip('inc/config');
214        $config = lire_config('boussole');
215
216        // Migration de l'éventuel serveur installé sur le site
217        // -- On met à jour l'activité et le nom du serveur
218        $config['serveur']['actif'] = defined('_BOUSSOLE_ALIAS_SERVEUR') ? 'on' : $defaut_config['serveur']['actif'];
219        $config['serveur']['nom'] = defined('_BOUSSOLE_ALIAS_SERVEUR') ? _BOUSSOLE_ALIAS_SERVEUR : $defaut_config['serveur']['nom'];
220
221        // Mise à jour en BDD de la confguration migrée
222        ecrire_config('boussole', $config);
223
224        spip_log('Maj 0.4 des données du plugin : ' . serialize(lire_config('boussole')),_BOUSSOLE_LOG . _LOG_INFO);
225}
226
227?>
Note: See TracBrowser for help on using the repository browser.