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

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

PHPDoc sur le schéma.

  • Property svn:eol-style set to native
File size: 7.2 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 de la base de données et configuration meta)
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.
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 */
27function 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 */
88function 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 */
122function 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 */
149function 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 */
203function 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?>
Note: See TracBrowser for help on using the repository browser.