source: spip-zone/_plugins_/Association/Associaspip/base/association_gestion.php @ 47844

Last change on this file since 47844 was 47844, checked in by jeannolapin@…, 10 years ago

Associaspip Correction d'un bug dans la gestion des erreurs des fonctions de mise à jour du plugin.

File size: 12.6 KB
Line 
1<?php
2/***************************************************************************\
3 *  Associaspip, extension de SPIP pour gestion d'associations             *
4 *                                                                         *
5 *  Copyright (c) 2007 Bernard Blazin & François de Montlivault (V1)       *
6 *  Copyright (c) 2010-2011 Emmanuel Saint-James & Jeannot Lapin (V2)       *
7 *                                                                         *
8 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
9 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
10\***************************************************************************/
11
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14global $association_tables_principales, $association_tables_auxiliaires;
15include_spip('base/association');
16include_spip('base/abstract_sql');
17
18// A chaque modif de la base SQL ou ses conventions (raccourcis etc)
19// le fichier plugin.xml doit indiquer le numero de depot qui l'implemente sur
20// http://zone.spip.org/trac/spip-zone/timeline
21// Ce numero est fourni automatiquement par la fonction spip_plugin_install
22// lors de l'appel des fonctions de ce fichier.
23
24// desinstatllation
25
26function association_vider_tables($nom_meta, $table){
27        global $association_tables_principales, $association_tables_auxiliaires;
28        effacer_meta($nom_meta, $table);
29        foreach($association_tables_principales as $nom => $desc)
30                sql_drop_table($nom);
31        foreach($association_tables_auxiliaires as $nom => $desc)
32                sql_drop_table($nom);
33        spip_log("$table $nom_meta desinstalle");
34}
35
36// MAJ des tables de la base SQL
37// Retourne 0 si ok, le dernier numero de MAJ ok sinon
38
39function association_upgrade($meta, $courante, $table='meta')
40{
41  // Compatibilite: le nom de la meta donnant le numero de version
42  // n'etait pas std puis est parti dans une autre table puis encore une autre
43
44        if (!isset($GLOBALS['association_metas']['base_version'])) {
45                lire_metas('asso_metas');
46                if (isset($GLOBALS['asso_metas']['base_version'])) {
47                        $n = $GLOBALS['asso_metas']['base_version'];
48                } elseif (isset($GLOBALS['meta']['association_base_version'])) {
49                        $n = $GLOBALS['meta']['association_base_version'];
50                } else $n = 0;
51                $GLOBALS['association_metas']['base_version'] = $n;
52        } else $n = $GLOBALS['association_metas']['base_version'];
53        effacer_meta('association_base_version');
54        spip_log("association upgrade: $table $meta = $n =>> $courante");
55        if (!$n) {
56                include_spip('base/create');
57                alterer_base($GLOBALS['association_tables_principales'],
58                             $GLOBALS['association_tables_auxiliaires']);
59                ecrire_meta($meta, $courante, NULL, $table);
60                return 0; // Reussite (supposee !)
61        } else {
62        // compatibilite avec les numeros de version non entiers
63                $installee = ($n > 1) ? $n : ($n * 100);
64                $GLOBALS['association_maj_erreur'] = 0;
65                if ($courante > $installee) {
66                        include_spip('base/upgrade');
67                        $n = maj_while($installee, $courante, $GLOBALS['association_maj'], $meta, $table);
68                        $n = $n ? $n[0] : $GLOBALS['association_maj_erreur'];
69                        // signaler que les dernieres MAJ sont a refaire
70                        if ($n) ecrire_meta($meta, $n-1, '', $table);
71                }
72                return $GLOBALS['association_maj_erreur'];
73        }
74}
75
76$GLOBALS['association_maj'][21] = array(array('sql_alter',"TABLE spip_asso_adherents ADD publication text NOT NULL AFTER secteur"));
77
78$GLOBALS['association_maj'][30] = array(
79        array('sql_drop_table', "spip_asso_bienfaiteurs"),
80        array('sql_drop_table', "spip_asso_financiers")
81                                        );
82
83$GLOBALS['association_maj'][40] = array(
84        array('sql_alter',"TABLE `spip_asso_comptes` ADD `valide` TEXT NOT NULL AFTER `id_journal` "));
85               
86$GLOBALS['association_maj'][50] = array(
87        array('sql_alter',"TABLE spip_asso_activites ADD membres TEXT NOT NULL AFTER accompagne, ADD non_membres TEXT NOT NULL AFTER membres "));
88               
89$GLOBALS['association_maj'][60] = array(array('sql_drop_table', "spip_asso_profil"));
90               
91$GLOBALS['association_maj'][61] = array(
92        array('spip_query',"RENAME TABLE spip_asso_banques TO spip_asso_plan"),
93        array('sql_drop_table',"spip_asso_livres")
94                                        );
95$GLOBALS['association_maj'][62] = array(array('sql_alter',"TABLE spip_asso_plan ADD actif TEXT NOT NULL AFTER commentaires"));
96
97$GLOBALS['association_maj'][63] = array(array('sql_alter',"TABLE spip_asso_ventes ADD id_acheteur BIGINT(20) NOT NULL AFTER acheteur"));
98               
99function association_maj_64(){
100
101        if (_ASSOCIATION_AUTEURS_ELARGIS == 'spip_auteurs_elargis') {
102                sql_alter("TABLE spip_auteurs_elargis ADD validite date NOT NULL default '0000-00-00'");
103                sql_alter("TABLE spip_auteurs_elargis ADD montant float NOT NULL default '0'");
104                sql_alter("TABLE spip_auteurs_elargis ADD date date NOT NULL default '0000-00-00' ");
105        } else {
106                if (_ASSOCIATION_INSCRIPTION2) {
107                        if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 64;
108                        return;
109                }
110                // Simulation provisoire
111                @sql_alter("TABLE spip_asso_adherents ADD commentaire text NOT NULL default ''");
112                @sql_alter("TABLE spip_asso_adherents ADD statut_interne text NOT NULL default '' ");
113                @sql_alter("TABLE spip_asso_adherents CHANGE COLUMN nom nom_famille text DEFAULT '' NOT NULL");
114        }
115}
116
117$GLOBALS['association_maj'][64] = array(array('association_maj_64'));
118
119// Recopie des metas geree par CFG dans la table asso_meta
120// Il faut charger a la main ses fichiers puisque plugin.xml ne le demande plus
121
122function association_maj_38192()
123{
124        global $association_tables_auxiliaires;
125
126        if (sql_create('spip_asso_metas', 
127                $association_tables_auxiliaires['spip_asso_metas']['field'],
128                $association_tables_auxiliaires['spip_asso_metas']['key'],
129                false, false)) {
130                include _DIR_PLUGINS . 'cfg/inc/cfg.php';
131                if (is_array($c = lire_config('association'))) {
132                        foreach($c as $k => $v) {
133                                ecrire_meta($k, $v, 'oui', 'association_metas');
134                        }
135                        // effacer les vieilles meta
136                        effacer_meta('association');
137                        effacer_meta('asso_base_version');
138                        effacer_meta('association_base_version');
139                }
140        } else spip_log("maj_38190: echec de  la creation de spip_asso_metas");
141}
142
143$GLOBALS['association_maj'][38192] = array(array('association_maj_38192'));
144
145$GLOBALS['association_maj'][38258] = array(array('sql_create','spip_asso_membres',
146                $association_tables_principales['spip_asso_membres']['field'],
147              $association_tables_principales['spip_asso_membres']['key'])
148                                        );
149$GLOBALS['association_maj'][38578] = array(
150        array('spip_query', 'rename table spip_asso_metas TO spip_association_metas'));
151
152function association_maj_42024()
153{
154        sql_alter("TABLE spip_asso_comptes ADD vu BOOLEAN default 0");
155        sql_update('spip_asso_comptes', array('vu' => 1), "valide='oui'");
156        sql_alter("TABLE spip_asso_comptes DROP valide");
157}
158
159$GLOBALS['association_maj'][42024] = array(array('association_maj_42024'));
160
161/* cette mise a jour comporte une erreur: sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'"); le champ doit etre nomme direction et non destination */
162function association_maj_43909()
163{
164        global $association_tables_principales;
165
166        sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'");
167        sql_create('spip_asso_destination', 
168                $association_tables_principales['spip_asso_destination']['field'],
169                $association_tables_principales['spip_asso_destination']['key']);
170        sql_create('spip_asso_destination_op', 
171                $association_tables_principales['spip_asso_destination_op']['field'],
172                $association_tables_principales['spip_asso_destination_op']['key']);
173}
174
175$GLOBALS['association_maj'][43909] = array(array('association_maj_43909'));
176
177unset($GLOBALS['association_maj'][43909]); /* pour empecher l'execution de code fautif tout en gardant trace */
178
179function association_maj_46392() /* repare l'erreur commise sur la maj 43909 */
180{
181        global $association_tables_principales;
182
183        /* on elimine le champ mal nomme */
184        sql_alter("TABLE spip_asso_plan DROP destination");
185
186        /* et on refait la modif correctement: ca risque d'entrainer des erreurs SQL mais c'est pas grave */
187        sql_alter("TABLE spip_asso_plan ADD direction ENUM('credit','debit') NOT NULL default 'credit'");
188        sql_create('spip_asso_destination', 
189                $association_tables_principales['spip_asso_destination']['field'],
190                $association_tables_principales['spip_asso_destination']['key']);
191        sql_create('spip_asso_destination_op', 
192                $association_tables_principales['spip_asso_destination_op']['field'],
193                $association_tables_principales['spip_asso_destination_op']['key']);
194}
195
196$GLOBALS['association_maj'][46392] = array(array('association_maj_46392'));
197
198function association_maj_46779()
199{
200        global $association_tables_principales;
201        /* avant d'eliminer reference de la table spip_asso_plan, on recopie sa valeur(si non null) dans le champ commentaires */
202        $rows = sql_select("id_plan, reference, commentaire", 'spip_asso_plan', "reference <> ''");
203        while ($row = sql_fetch($rows)) {
204                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['reference']:$row['reference'];
205                sql_updateq('spip_asso_plan',
206                        array('commentaire' => $commentaire),
207                        "id_plan=".$row['id_plan']);
208        }
209        sql_alter("TABLE spip_asso_plan DROP reference");
210
211        /* modification du type de direction, on ajoute une troisieme valeur a l'enumeration, on renomme direction en type_op essentiellement
212        pour des raisons de compatibilite avec les differentes bases de donnees supportees par SPIP (impossible d'utiliser ALTER COLUMN ou MODIFY)*/
213        sql_alter("TABLE spip_asso_plan ADD type_op ENUM('credit','debit','multi') NOT NULL default 'multi'"); 
214        sql_update('spip_asso_plan', array('type_op' => 'direction'));
215        sql_alter("TABLE spip_asso_plan DROP direction");
216
217        /* transforme actif en booleen plutot que texte oui/non, et renomme pour la meme raison en active */
218        sql_alter("TABLE spip_asso_plan ADD active BOOLEAN default 1");
219        sql_update('spip_asso_plan', array('active' => 0), "actif='non'");
220        sql_alter("TABLE spip_asso_plan DROP actif");
221
222        /* avant d'eliminer don de la table spip_asso_ventes, on recopie sa valeur(si non null) dans le champ commentaires */
223        $rows = sql_select("id_vente, don, commentaire", 'spip_asso_ventes', "don <> ''");
224        while ($row = sql_fetch($rows)) {
225                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['don']:$row['don'];
226                sql_updateq('spip_asso_ventes',
227                        array('commentaire' => $commentaire),
228                        "id_vente=".$row['id_vente']);
229        }
230        sql_alter("TABLE spip_asso_ventes DROP don");
231       
232}
233
234$GLOBALS['association_maj'][46779] = array(array('association_maj_46779'));
235
236function association_maj_47144()
237{
238        global $association_tables_principales;
239        /* avant d'eliminer id_asso de la table spip_asso_membres, on recopie sa valeur(si non null et non egal a 0) dans le champ commentaires */
240        $rows = sql_select("id_auteur, id_asso, commentaire", 'spip_asso_membres', "id_asso <> '' AND id_asso <> 0");
241        while ($row = sql_fetch($rows)) {
242                $commentaire = $row['commentaire']?$row['commentaire']." - Ref. Int. ".$row['id_asso']:"Ref. Int. ".$row['id_asso'];
243                sql_updateq('spip_asso_membres',
244                        array('commentaire' => $commentaire),
245                        "id_auteur=".$row['id_auteur']);
246        }
247        sql_alter("TABLE spip_asso_membres DROP id_asso");
248}
249
250$GLOBALS['association_maj'][47144] = array(array('association_maj_47144'));
251
252unset($GLOBALS['association_maj'][47144]); /* finalement on garde le champ id_asso, on n'effectue donc pas la maj_47144 */
253
254function association_maj_47501() /* revert de la 47144 pour ceux qui l'aurait effectue avant qu'elle ne soit supprimee */
255{
256        global $association_tables_principales;
257        /* on verifie si le champ id_asso existe dans la table spip_asso_membre, si oui, rien a faire, la 47144 n'a pas ete effectuee */
258        $trouver_table = charger_fonction('trouver_table', 'base');
259        $table_membres = $trouver_table('spip_asso_membres');
260        if (!$table_membres['field']['id_asso']) { /* pas de champ id_asso, il faut le restaurer */
261                sql_alter("TABLE spip_asso_membres ADD id_asso TEXT NOT NULL AFTER id_auteur");
262
263                /* on va voir dans commentaire si on trouve un champ qui ressemble a ce que la 47144 a sauvegarde */
264                $rows = sql_select("id_auteur, commentaire", 'spip_asso_membres', "commentaire LIKE '% - Ref. Int. %' OR commentaire LIKE 'Ref. Int. %'");
265                while ($row = sql_fetch($rows)) {
266                        if (preg_match('/^(.*?)( - )?Ref\. Int\. (.*)$/', $row['commentaire'], $matches)) {
267                                $commentaire = $matches[1];
268                                $id_asso = $matches[3];
269                                sql_updateq('spip_asso_membres',
270                                        array('commentaire' => $commentaire, 'id_asso' => $id_asso),
271                                        "id_auteur=".$row['id_auteur']);
272                        }
273                }               
274        }
275}
276$GLOBALS['association_maj'][47501] = array(array('association_maj_47501'));
277
278function association_maj_47731() /* eliminer le champ id_achat de la table ressources car il est inutile et non utilise, rien a sauvegarder */
279{
280        global $association_tables_principales;
281        sql_alter("TABLE spip_asso_ressources DROP id_achat");
282}
283
284$GLOBALS['association_maj'][47731] = array(array('association_maj_47731'));
285?>
Note: See TracBrowser for help on using the repository browser.