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

Last change on this file since 113568 was 113519, checked in by root, 5 months ago

On rajoute la confgiuration du mode d'inclusion par défaut.
N-core considère que par défaut l'inclusion est statique mais le noiZetier permet de modifier ce défaut à dynamique si besoin.

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