source: spip-zone/_plugins_/rang/branches/automatique/rang_administrations.php @ 110204

Last change on this file since 110204 was 110204, checked in by rastapopoulos@…, 23 months ago

Correction gros bug : le plugin supprimer les champs rang même sur les tables qui l'avaient déjà avant. Du coup on fait une fonction avec static qui garde en mémoire les tables avec ce champ déclaré avant que Rang ne complète la déclaration des objets. Et du coup lors de la désinstallation on a cette liste pour ne pas supprimer. Au passage on ne déclare aussi que si le champ n'est pas déjà déclaré.

  • Property svn:executable set to *
File size: 2.9 KB
Line 
1<?php
2/**
3 * Fichier gérant l'installation et désinstallation du plugin Rang
4 *
5 * @plugin     Rang
6 * @copyright  2016
7 * @author     Peetdu
8 * @licence    GNU/GPL
9 * @package    SPIP\Rang\Installation
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16
17/**
18 * Fonction d'installation et de mise à jour du plugin Rang.
19 *
20 * @param string $nom_meta_base_version
21 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
22 * @param string $version_cible
23 *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
24 * @return void
25**/
26function rang_upgrade($nom_meta_base_version, $version_cible) {
27        $maj = array();
28       
29        // Déplacer l'ancienne config
30        $maj['1.0.0'] = array(
31                array('rang_maj_1_0_0'),
32        );
33       
34        // Transformation de la config en liste tableau normal, pas à virgule
35        $maj['1.0.1'] = array(
36                array('rang_maj_1_0_1'),
37        );
38       
39        include_spip('base/upgrade');
40        maj_plugin($nom_meta_base_version, $version_cible, $maj);
41}
42
43/**
44 * Maj 1.0.0 : déplacer l'ancienne config
45 **/
46function rang_maj_1_0_0() {
47        include_spip('inc/config');
48       
49        if ($objets = lire_config('rang_objets')) {
50                ecrire_config('rang/rang_objets', $objets);
51                effacer_config('rang_objets');
52        }
53}
54
55/**
56 * Maj 1.0.1 : pas de config à virgule alors qu'on sait très bien stocker des listes et tableaux
57 **/
58function rang_maj_1_0_1() {
59        include_spip('inc/config');
60       
61        if (
62                $config_actuelle = lire_config('rang/rang_objets')
63                and is_string($config_actuelle)
64        ) {
65                // On transforme en tableau liste
66                $config_nouvelle = explode(',', $config_actuelle);
67                $config_nouvelle = array_map('trim', $config_nouvelle);
68                $config_nouvelle = array_filter($config_nouvelle);
69               
70                // On enregistre
71                ecrire_config('rang/objets', $config_nouvelle);
72                effacer_config('rang/rang_objets');
73        }
74}
75
76/**
77 * Fonction de désinstallation du plugin Rang.
78 *
79 * @param string $nom_meta_base_version
80 *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
81 * @return void
82**/
83function rang_vider_tables($nom_meta_base_version) {
84        include_spip('inc/rang_api');
85        include_spip('base/objets');
86       
87        // On appelle la fonction pour que ça lance le pipeline de Rang
88        // et donc remplisse les tables ayant déjà un rang AVANT
89        lister_tables_objets_sql();
90        $tables_deja_rang = rang_lister_tables_deja_rang();
91
92        // Supprimer les champs 'rang' sur les tables qui ne l'avaient pas avant
93        // note : ici que faire si un objet a ete selectionne, puis deselectionne dans la config ?
94        $objets = lire_config('rang/objets');
95        foreach ($objets as $table) {
96                $champs_table = sql_showtable($table);
97               
98                // S'il y a bien toujours un champ "rang" mais que la table ne l'avait PAS avant
99                if (isset($champs_table['field']['rang']) and !in_array($table, $tables_deja_rang)) {
100                        sql_alter("TABLE $table DROP rang");
101                }
102        }
103
104        // Effacer les metas
105        effacer_meta('rang');
106        effacer_meta($nom_meta_base_version);
107}
Note: See TracBrowser for help on using the repository browser.