source: spip-zone/_plugins_/noizetier/trunk/noizetier_administrations.php @ 113510

Last change on this file since 113510 was 113510, checked in by eric@…, 4 months ago

Améliorations PHPDoc

File size: 10.8 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) {
5        return;
6}
7
8/**
9 * Installation du schéma de données propre au plugin et gestion des migrations suivant
10 * les évolutions du schéma.
11 *
12 * Le schéma comprend des tables et des variables de configuration propres au plugin.
13 *
14 * @param string $nom_meta_base_version
15 *              Nom de la meta dans laquelle sera rangée la version du schéma
16 * @param string $version_cible
17 *              Version du schéma de données en fin d'upgrade
18 *
19 * @return void
20 */
21function noizetier_upgrade($nom_meta_base_version, $version_cible) {
22        $maj = array();
23
24        // Configurations par défaut
25        $config_060 = array(
26                'objets_noisettes' => array(),
27                'encapsulation_noisette' => 'on',
28                'ajax_noisette' => 'on',
29                'profondeur_max' => '',
30        );
31
32        $maj['create'] = array(
33                array('maj_tables',array('spip_noizetier_pages', 'spip_types_noisettes', 'spip_noisettes')),
34                array('ecrire_config', 'noizetier', $config_060),
35        );
36
37        $maj['0.2.0'] = array(
38                array('maj_tables',array('spip_noisettes')),
39        );
40
41        $maj['0.3.0'] = array(
42                array('sql_alter','TABLE spip_noisettes DROP COLUMN contexte'),
43        );
44
45        $maj['0.4.0'] = array(
46                array('maj_tables',array('spip_noisettes')),
47        );
48       
49        $maj['0.5.0'] = array(
50                array('maj_tables',array('spip_noisettes')),
51                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (type(255))'),
52                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (composition(255))'),
53                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (bloc(255))'),
54                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (noisette(255))'),
55                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (objet)'),
56                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (id_objet)'),
57        );
58
59        $maj['0.6.0'] = array(
60                array('maj_060', $config_060),
61        );
62
63        include_spip('base/upgrade');
64        maj_plugin($nom_meta_base_version, $version_cible, $maj);
65}
66
67/**
68 * Suppression de l'ensemble du schéma de données propre au plugin, c'est-à-dire
69 * les tables et les variables de configuration.
70 *
71 * @param string $nom_meta_base_version
72 *              Nom de la meta dans laquelle sera rangée la version du schéma
73 *
74 * @return void
75 */
76function noizetier_vider_tables($nom_meta_base_version) {
77
78        // On efface les tables du plugin
79        sql_drop_table('spip_noizetier_pages');
80        sql_drop_table('spip_types_noisettes');
81        sql_drop_table('spip_noisettes');
82
83        // On efface la version enregistrée du schéma des données du plugin
84        effacer_meta($nom_meta_base_version);
85        // On efface la configuration du plugin
86        effacer_meta('noizetier');
87}
88
89/**
90 * Migration du schéma 0.5 au 0.6.
91 *
92 * Les actions effectuées sont les suivantes:
93 * - ajout de la tables `spip_noisettes_pages` pour stocker l'ensemble des pages et compositions
94 *   explicites et virtuelles.
95 * - ajout du champ `encapsulation` à la table `spip_noisettes` pour déterminer si le noiZetier doit inclure
96 *   la noisette concernée dans un div englobant et ajout du champ plugin pour étendre le stockage au-delà
97 *   du noiZetier.
98 * - mise à jour de la taille des champs type, composition et objet dans la table `spip_noisettes`
99 * - ajout d'une liste de variables de configuration initialisées
100 * - transfert des compositions virtuelles de la meta `noizetier_compositions` dans la nouvelle
101 *   table `spip_noizetier_pages` et suppression définitive de la meta.
102 *
103 * @param array $config_defaut
104 *              Tableau des variables de configuration intialisées.
105 *
106 * @return void
107 */
108function maj_060($config_defaut) {
109
110        // Ajout de la tables des pages du noizetier qui contiendra pages et compositions qu'elles soient
111        // explicites ou virtuelles et de la tables des types de noisette.
112        include_spip('base/create');
113        maj_tables(array('spip_noizetier_pages', 'spip_types_noisettes'));
114
115        // Modification de la table spip_noisettes
116        // -- Ajout de la colonne 'encapsulation' qui indique pour chaque noisette si le noiZetier doit l'inclure dans une capsule
117        //    englobante ou pas. Le champ prend les valeurs 'on', '' ou 'defaut' qui indique qu'il faut prendre
118        //    en compte la valeur configurée par défaut (configuration du noizetier).
119        // -- Ajout de la colonne 'plugin' qui vaut 'noizetier' pour ce plugin.
120        // -- Ajout de la colonne 'id_conteneur'.
121        // -- Ajout de la colonne 'est_conteneur' toujours à la valeur 'non' car il n'existe pas de noisette de ce type
122        // -- Ajout de la colonne 'profondeur' à la valeur par défaut 0
123        //    dans les versions précédentes du plugin.
124        sql_alter("TABLE spip_noisettes ADD plugin varchar(30) DEFAULT '' NOT NULL AFTER id_noisette");
125        sql_alter("TABLE spip_noisettes ADD id_conteneur varchar(255) DEFAULT '' NOT NULL AFTER plugin");
126        sql_alter("TABLE spip_noisettes ADD conteneur text DEFAULT '' NOT NULL AFTER id_conteneur");
127        sql_alter("TABLE spip_noisettes ADD est_conteneur varchar(3) DEFAULT 'non' NOT NULL AFTER type_noisette");
128        sql_alter("TABLE spip_noisettes ADD encapsulation varchar(6) DEFAULT 'defaut' NOT NULL AFTER parametres");
129        sql_alter("TABLE spip_noisettes ADD profondeur smallint DEFAULT 0 NOT NULL AFTER css");
130        // -- Changement du nom du champ 'rang' en 'rang_noisette'
131        sql_alter("TABLE spip_noisettes CHANGE rang rang_noisette smallint DEFAULT 1 NOT NULL");
132        // -- Changement du nom du champ 'noisette' en 'type_noisette' et de sa taille
133        sql_alter("TABLE spip_noisettes CHANGE noisette type_noisette varchar(255) DEFAULT '' NOT NULL");
134        // -- Suppression des index pour des colonnes dont on va modifier la taille ou le type
135        sql_alter("TABLE spip_noisettes DROP INDEX type");
136        sql_alter("TABLE spip_noisettes DROP INDEX composition");
137        sql_alter("TABLE spip_noisettes DROP INDEX bloc");
138        sql_alter("TABLE spip_noisettes DROP INDEX noisette");
139        // Mise à jour des tailles des colonnes type, composition et objet pour cohérence
140        sql_alter("TABLE spip_noisettes MODIFY bloc varchar(255) DEFAULT '' NOT NULL");
141        sql_alter("TABLE spip_noisettes MODIFY type varchar(127) NOT NULL");
142        sql_alter("TABLE spip_noisettes MODIFY composition varchar(127) NOT NULL");
143        sql_alter("TABLE spip_noisettes MODIFY objet varchar(25) NOT NULL");
144        // -- Création des index détruits précédemment et des nouveaux index plugin et conteneur
145        sql_alter("TABLE spip_noisettes ADD INDEX type (type)");
146        sql_alter("TABLE spip_noisettes ADD INDEX composition (composition)");
147        sql_alter("TABLE spip_noisettes ADD INDEX bloc (bloc)");
148        sql_alter("TABLE spip_noisettes ADD INDEX type_noisette (type_noisette)");
149        sql_alter("TABLE spip_noisettes ADD INDEX plugin (plugin)");
150        sql_alter("TABLE spip_noisettes ADD INDEX id_conteneur (id_conteneur)");
151        sql_alter("TABLE spip_noisettes ADD INDEX rang_noisette (rang_noisette)");
152        // -- Remplissage de la nouvelle colonne plugin avec la valeur 'noizetier'
153        //    et des colonnes id_conteneur et conteneur à partir des autres colonnes existantes.
154        $select = array('id_noisette', 'type', 'composition', 'objet', 'id_objet', 'bloc');
155        $from = 'spip_noisettes';
156        $noisettes = sql_allfetsel($select, $from);
157        if ($noisettes) {
158                include_spip('inc/ncore_conteneur');
159                foreach ($noisettes as $_cle => $_noisette) {
160                        // C'est le plugin noizetier
161                        $noisettes[$_cle]['plugin'] = 'noizetier';
162                        // On calcule le conteneur au format tableau et on appelle la fonction de service de construction
163                        // de l'id du conteneur
164                        // TODO : utiliser la fonction composer_conteneur
165                        $conteneur = array();
166                        if (!empty($_noisette['objet']) and !empty($_noisette['id_objet']) and intval($_noisette['id_objet'])) {
167                                $conteneur['objet'] = $_noisette['objet'];
168                                $conteneur['id_objet'] = $_noisette['id_objet'];
169                                $conteneur['squelette'] = $_noisette['bloc'];
170                        }
171                        else {
172                                $page = $_noisette['type'] . ($_noisette['composition'] ? "-{$_noisette['composition']}" : '');
173                                $conteneur['squelette'] = "{$_noisette['bloc']}/${page}";
174                        }
175                        $noisettes[$_cle]['conteneur'] = serialize($conteneur);
176                        $noisettes[$_cle]['id_conteneur'] = conteneur_identifier('noizetier', $conteneur);
177                }
178                sql_replace_multi($from, $noisettes);
179        }
180
181        // Mise à jour de la configuration du plugin
182        include_spip('inc/config');
183        $config = lire_config('noizetier', array());
184        if ($config and isset($config['objets_noisettes'])) {
185                $config_defaut['objets_noisettes'] = $config['objets_noisettes'];
186        }
187        ecrire_config('noizetier', $config_defaut);
188
189        // Suppression des caches devenus inutiles
190        include_spip('inc/flock');
191        supprimer_fichier(_DIR_CACHE . 'noisettes_descriptions.php');
192        supprimer_fichier(_DIR_CACHE . 'noisettes_ajax.php');
193        supprimer_fichier(_DIR_CACHE . 'noisettes_contextes.php');
194        supprimer_fichier(_DIR_CACHE . 'noisettes_inclusions.php');
195
196        // Déplacement de la liste des compositions virtuelles dans la table 'spip_noisettes_pages'
197        $compositions = lire_config('noizetier_compositions', array());
198        if ($compositions) {
199                $compositions_060 = array();
200                foreach ($compositions as $_type => $_compositions) {
201                        foreach ($_compositions as $_composition => $_description) {
202                                // Type et composition (ne sont jamais vides)
203                                $_description['type'] = $_type;
204                                $_description['composition'] = $_composition;
205                                // Construction de l'identifiant de la page
206                                $_description['page'] = "${_type}-${_composition}";
207                                // Nom par défaut si non précisé (identifiant de la page)
208                                if (empty($_description['nom'])) {
209                                        $_description['nom'] = $_description['page'];
210                                }
211                                // Icone par défaut si non précisé
212                                if (empty($_description['icon'])) {
213                                        $_description['icon'] = 'composition-24.png';
214                                }
215                                // Traitement des necessite pour identifier l'activité de la page
216                                $_description['est_active'] = 'oui';
217                                if (!empty($_description['necessite'])) {
218                                        foreach ($_description['necessite'] as $_plugin_necessite) {
219                                                if (!defined('_DIR_PLUGIN_' . strtoupper($_plugin_necessite))) {
220                                                        $_description['est_active'] = 'non';
221                                                        break;
222                                                }
223                                        }
224                                }
225                                // Blocs, necessite et branche: des tableaux à sérialiser
226                                $_description['blocs_exclus'] = isset($_description['blocs_exclus'])
227                                        ? serialize($_description['blocs_exclus'])
228                                        : serialize(array());
229                                $_description['necessite'] = isset($_description['necessite'])
230                                        ? serialize($_description['necessite'])
231                                        : serialize(array());
232                                $_description['branche'] = isset($_description['branche'])
233                                        ? serialize($_description['branche'])
234                                        : serialize(array());
235                                // Indicateur de type d'objet
236                                include_spip('base/objets');
237                                $tables_objets = array_keys(lister_tables_objets_sql());
238                                $_description['est_page_objet'] = in_array(table_objet_sql($_type), $tables_objets) ? 'oui' : 'non';
239                                // Indicateur de composition virtuelle
240                                $description['est_virtuelle'] = 'oui';
241                                $compositions_060[] = $_description;
242                        }
243                }
244                if ($compositions_060) {
245                        if (sql_preferer_transaction()) {
246                                sql_demarrer_transaction();
247                        }
248                        sql_insertq_multi('spip_noizetier_pages', $compositions_060);
249                        if (sql_preferer_transaction()) {
250                                sql_terminer_transaction();
251                        }
252                }
253        }
254        // On efface la meta des compositions maintenant que celles-ci sont stockées
255        // dans une table dédiées aux pages du noizetier
256        effacer_meta('noizetier_compositions');
257}
Note: See TracBrowser for help on using the repository browser.