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

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

Adaptation du noizetier à la dernière version de N-Core (encapsulation).
Tout n'est pas fonctionnel, il manque encore :

  • un problème de détection de l'input radio balise_noisette dans la config du noizetier (bug Saisies ???)
  • la prise en compte du mode d'encapsulation auto pour cacher la config balise_noisette et la suppression des saisies balise et css dans l'edition d'une noisette.

A tester.

File size: 10.5 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 * @api
15 * @see boussole_declarer_tables_principales()
16 * @see boussole_declarer_tables_interfaces()
17 *
18 * @param string $nom_meta_base_version
19 *              Nom de la meta dans laquelle sera rangée la version du schéma
20 * @param string $version_cible
21 *              Version du schéma de données en fin d'upgrade
22 *
23 * @return void
24 */
25function noizetier_upgrade($nom_meta_base_version, $version_cible) {
26        $maj = array();
27
28        // Configurations par défaut
29        $config_060 = array(
30                'objets_noisettes' => array(),
31                'balise_noisette' => 'div',
32                'ajax_noisette' => 'on',
33                'profondeur_max' => '',
34        );
35
36        $maj['create'] = array(
37                array('maj_tables',array('spip_noizetier_pages', 'spip_types_noisettes', 'spip_noisettes')),
38                array('ecrire_config', 'noizetier', $config_060),
39        );
40
41        $maj['0.2.0'] = array(
42                array('maj_tables',array('spip_noisettes')),
43        );
44
45        $maj['0.3.0'] = array(
46                array('sql_alter','TABLE spip_noisettes DROP COLUMN contexte'),
47        );
48
49        $maj['0.4.0'] = array(
50                array('maj_tables',array('spip_noisettes')),
51        );
52       
53        $maj['0.5.0'] = array(
54                array('maj_tables',array('spip_noisettes')),
55                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (type(255))'),
56                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (composition(255))'),
57                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (bloc(255))'),
58                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (noisette(255))'),
59                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (objet)'),
60                array('sql_alter', 'TABLE spip_noisettes ADD INDEX (id_objet)'),
61        );
62
63        $maj['0.6.0'] = array(
64                array('maj_060', $config_060),
65        );
66
67        include_spip('base/upgrade');
68        maj_plugin($nom_meta_base_version, $version_cible, $maj);
69}
70
71/**
72 * Suppression de l'ensemble du schéma de données propre au plugin, c'est-à-dire
73 * les tables et les variables de configuration.
74 *
75 * @api
76 *
77 * @param string $nom_meta_base_version
78 *              Nom de la meta dans laquelle sera rangée la version du schéma
79 *
80 * @return void
81 */
82function noizetier_vider_tables($nom_meta_base_version) {
83
84        // On efface les tables du plugin
85        sql_drop_table('spip_noizetier_pages');
86        sql_drop_table('spip_types_noisettes');
87        sql_drop_table('spip_noisettes');
88
89        // On efface la version enregistrée du schéma des données du plugin
90        effacer_meta($nom_meta_base_version);
91        // On efface la configuration du plugin
92        effacer_meta('noizetier');
93}
94
95/**
96 * Migration du schéma 0.5 au 0.6.
97 *
98 * Les actions effectuées sont les suivantes:
99 * - ajout de la tables `spip_noisettes_pages` pour stocker l'ensemble des pages et compositions
100 *   explicites et virtuelles.
101 * - ajout du champ `balise` à la table `spip_noisettes` pour déterminer si le noiZetier doit inclure
102 *   la noisette concernée dans un div englobant et ajout du champ plugin pour étendre le stockage au-delà
103 *   du noiZetier.
104 * - mise à jour de la taille des champs type, composition et objet dans la table `spip_noisettes`
105 * - ajout d'une liste de variables de configuration initialisées
106 * - transfert des compositions virtuelles de la meta `noizetier_compositions` dans la nouvelle
107 *   table `spip_noizetier_pages` et suppression définitive de la meta.
108 *
109 * @param array $config_defaut
110 *              Tableau des variables de configuration intialisées.
111 *
112 * @return void
113 */
114function maj_060($config_defaut) {
115
116        // Ajout de la tables des pages du noizetier qui contiendra pages et compositions qu'elles soient
117        // explicites ou virtuelles et de la tables des types de noisette.
118        include_spip('base/create');
119        maj_tables(array('spip_noizetier_pages', 'spip_types_noisettes'));
120
121        // Modification de la table spip_noisettes
122        // -- Ajout de la colonne 'balise' qui indique pour chaque noisette si le noiZetier doit l'inclure dans un div
123        //    englobant ou pas. Le champ prend les valeurs 'on', '' ou 'defaut' qui indique qu'il faut prendre
124        //    en compte la valeur configurée par défaut (configuration du noizetier).
125        // -- Ajout de la colonne 'plugin' qui vaut 'noizetier' pour ce plugin.
126        // -- Ajout de la colonne 'id_conteneur'.
127        // -- Ajout de la colonne 'est_conteneur' toujours à la valeur 'non' car il n'existe pas de noisette de ce type
128        //    dans les versions précédentes du plugin.
129        sql_alter("TABLE spip_noisettes ADD plugin varchar(30) DEFAULT '' NOT NULL AFTER id_noisette");
130        sql_alter("TABLE spip_noisettes ADD id_conteneur varchar(255) DEFAULT '' NOT NULL AFTER plugin");
131        sql_alter("TABLE spip_noisettes ADD est_conteneur varchar(3) DEFAULT 'non' NOT NULL AFTER type_noisette");
132        sql_alter("TABLE spip_noisettes ADD balise varchar(6) DEFAULT 'defaut' NOT NULL AFTER parametres");
133        // -- Changement du nom du champ 'rang' en 'rang_noisette'
134        sql_alter("TABLE spip_noisettes CHANGE rang rang_noisette smallint DEFAULT 1 NOT NULL");
135        // -- Changement du nom du champ 'noisette' en 'type_noisette' et de sa taille
136        sql_alter("TABLE spip_noisettes CHANGE noisette type_noisette varchar(255) DEFAULT '' NOT NULL");
137        // -- Suppression des index pour des colonnes dont on va modifier la taille ou le type
138        sql_alter("TABLE spip_noisettes DROP INDEX type");
139        sql_alter("TABLE spip_noisettes DROP INDEX composition");
140        sql_alter("TABLE spip_noisettes DROP INDEX bloc");
141        sql_alter("TABLE spip_noisettes DROP INDEX noisette");
142        // Mise à jour des tailles des colonnes type, composition et objet pour cohérence
143        sql_alter("TABLE spip_noisettes MODIFY bloc varchar(255) DEFAULT '' NOT NULL");
144        sql_alter("TABLE spip_noisettes MODIFY type varchar(127) NOT NULL");
145        sql_alter("TABLE spip_noisettes MODIFY composition varchar(127) NOT NULL");
146        sql_alter("TABLE spip_noisettes MODIFY objet varchar(25) NOT NULL");
147        // -- Création des index détruits précédemment et des nouveaux index plugin et conteneur
148        sql_alter("TABLE spip_noisettes ADD INDEX type (type)");
149        sql_alter("TABLE spip_noisettes ADD INDEX composition (composition)");
150        sql_alter("TABLE spip_noisettes ADD INDEX bloc (bloc)");
151        sql_alter("TABLE spip_noisettes ADD INDEX type_noisette (type_noisette)");
152        sql_alter("TABLE spip_noisettes ADD INDEX plugin (plugin)");
153        sql_alter("TABLE spip_noisettes ADD INDEX id_conteneur (id_conteneur)");
154        sql_alter("TABLE spip_noisettes ADD INDEX rang_noisette (rang_noisette)");
155        // -- Remplissage de la nouvelle colonne plugin avec la valeur 'noizetier'
156        //    et de la colonne id_conteneur à partir des autres colonnes existantes.
157        $select = array('id_noisette', 'type', 'composition', 'objet', 'id_objet', 'bloc');
158        $from = 'spip_noisettes';
159        $noisettes = sql_allfetsel($select, $from);
160        if ($noisettes) {
161                include_spip('ncore/noizetier');
162                foreach ($noisettes as $_cle => $_noisette) {
163                        // C'est le plugin noizetier
164                        $noisettes[$_cle]['plugin'] = 'noizetier';
165                        // On calcule le conteneur au format tableau et on appelle la fonction de service de construction
166                        // de l'id du conteneur
167                        $conteneur = array();
168                        if (!empty($_noisette['objet']) and !empty($_noisette['id_objet']) and intval($_noisette['id_objet'])) {
169                                $conteneur['objet'] = $_noisette['objet'];
170                                $conteneur['id_objet'] = $_noisette['id_objet'];
171                                $conteneur['squelette'] = $_noisette['bloc'];
172                        }
173                        else {
174                                $page = $_noisette['type'] . ($_noisette['composition'] ? "-{$_noisette['composition']}" : '');
175                                $conteneur['squelette'] = "{$_noisette['bloc']}/${page}";
176                        }
177                        $noisettes[$_cle]['id_conteneur'] = noizetier_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.