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

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

Associaspip Interface avec le plugin Coordonnées pour gérer les adresses, mails (autre que celui de la table spip_auteurs) et télephones.
Au moment de l'upgrade, la fonction de MaJ demande a l'administrateur ce qu'il veut faire de ses données(éliminer ou transferer vers les tables de coordonnées). Il est tout de meme recommandé de faire une sauvegarde de la base avant d'effectuer cette mise a jour.

File size: 17.5 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        if (!isset($GLOBALS['association_metas']['base_version'])) {
44                lire_metas('asso_metas');
45                if (isset($GLOBALS['asso_metas']['base_version'])) {
46                        $n = $GLOBALS['asso_metas']['base_version'];
47                } elseif (isset($GLOBALS['meta']['association_base_version'])) {
48                        $n = $GLOBALS['meta']['association_base_version'];
49                } else $n = 0;
50                $GLOBALS['association_metas']['base_version'] = $n;
51        } else $n = $GLOBALS['association_metas']['base_version'];
52        effacer_meta('association_base_version');
53        spip_log("association upgrade: $table $meta = $n =>> $courante");
54        if (!$n) {
55                include_spip('base/create');
56                alterer_base($GLOBALS['association_tables_principales'],
57                             $GLOBALS['association_tables_auxiliaires']);
58                ecrire_meta($meta, $courante, NULL, $table);
59                return 0; // Reussite (supposee !)
60        } else {
61        // compatibilite avec les numeros de version non entiers
62                $installee = ($n > 1) ? $n : ($n * 100);
63                $GLOBALS['association_maj_erreur'] = 0;
64                if ($courante > $installee) {
65                        include_spip('base/upgrade');
66                        $n = maj_while($installee, $courante, $GLOBALS['association_maj'], $meta, $table);
67                        $n = $n ? $n[0] : $GLOBALS['association_maj_erreur'];
68                        // signaler que les dernieres MAJ sont a refaire
69                        if ($n) ecrire_meta($meta, $n-1, '', $table);
70                }
71                return $GLOBALS['association_maj_erreur'];
72        }
73}
74
75$GLOBALS['association_maj'][21] = array(array('sql_alter',"TABLE spip_asso_adherents ADD publication text NOT NULL AFTER secteur"));
76
77$GLOBALS['association_maj'][30] = array(
78        array('sql_drop_table', "spip_asso_bienfaiteurs"),
79        array('sql_drop_table', "spip_asso_financiers")
80                                        );
81
82$GLOBALS['association_maj'][40] = array(
83        array('sql_alter',"TABLE `spip_asso_comptes` ADD `valide` TEXT NOT NULL AFTER `id_journal` "));
84               
85$GLOBALS['association_maj'][50] = array(
86        array('sql_alter',"TABLE spip_asso_activites ADD membres TEXT NOT NULL AFTER accompagne, ADD non_membres TEXT NOT NULL AFTER membres "));
87               
88$GLOBALS['association_maj'][60] = array(array('sql_drop_table', "spip_asso_profil"));
89               
90$GLOBALS['association_maj'][61] = array(
91        array('spip_query',"RENAME TABLE spip_asso_banques TO spip_asso_plan"),
92        array('sql_drop_table',"spip_asso_livres")
93                                        );
94$GLOBALS['association_maj'][62] = array(array('sql_alter',"TABLE spip_asso_plan ADD actif TEXT NOT NULL AFTER commentaires"));
95
96$GLOBALS['association_maj'][63] = array(array('sql_alter',"TABLE spip_asso_ventes ADD id_acheteur BIGINT(20) NOT NULL AFTER acheteur"));
97               
98function association_maj_64(){
99
100        if (_ASSOCIATION_AUTEURS_ELARGIS == 'spip_auteurs_elargis') {
101                sql_alter("TABLE spip_auteurs_elargis ADD validite date NOT NULL default '0000-00-00'");
102                sql_alter("TABLE spip_auteurs_elargis ADD montant float NOT NULL default '0'");
103                sql_alter("TABLE spip_auteurs_elargis ADD date date NOT NULL default '0000-00-00' ");
104        } else {
105                if (_ASSOCIATION_INSCRIPTION2) {
106                        if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 64;
107                        return;
108                }
109                // Simulation provisoire
110                @sql_alter("TABLE spip_asso_adherents ADD commentaire text NOT NULL default ''");
111                @sql_alter("TABLE spip_asso_adherents ADD statut_interne text NOT NULL default '' ");
112                @sql_alter("TABLE spip_asso_adherents CHANGE COLUMN nom nom_famille text DEFAULT '' NOT NULL");
113        }
114}
115
116$GLOBALS['association_maj'][64] = array(array('association_maj_64'));
117
118// Recopie des metas geree par CFG dans la table asso_meta
119// Il faut charger a la main ses fichiers puisque plugin.xml ne le demande plus
120
121function association_maj_38192()
122{
123        global $association_tables_auxiliaires;
124
125        if (sql_create('spip_asso_metas', 
126                $association_tables_auxiliaires['spip_asso_metas']['field'],
127                $association_tables_auxiliaires['spip_asso_metas']['key'],
128                false, false)) {
129                include _DIR_PLUGINS . 'cfg/inc/cfg.php';
130                if (is_array($c = lire_config('association'))) {
131                        foreach($c as $k => $v) {
132                                ecrire_meta($k, $v, 'oui', 'association_metas');
133                        }
134                        // effacer les vieilles meta
135                        effacer_meta('association');
136                        effacer_meta('asso_base_version');
137                        effacer_meta('association_base_version');
138                }
139        } else spip_log("maj_38190: echec de  la creation de spip_asso_metas");
140}
141
142$GLOBALS['association_maj'][38192] = array(array('association_maj_38192'));
143
144$GLOBALS['association_maj'][38258] = array(array('sql_create','spip_asso_membres',
145                $association_tables_principales['spip_asso_membres']['field'],
146              $association_tables_principales['spip_asso_membres']['key'])
147                                        );
148$GLOBALS['association_maj'][38578] = array(
149        array('spip_query', 'rename table spip_asso_metas TO spip_association_metas'));
150
151function association_maj_42024()
152{
153        sql_alter("TABLE spip_asso_comptes ADD vu BOOLEAN default 0");
154        sql_update('spip_asso_comptes', array('vu' => 1), "valide='oui'");
155        sql_alter("TABLE spip_asso_comptes DROP valide");
156}
157
158$GLOBALS['association_maj'][42024] = array(array('association_maj_42024'));
159
160/* 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 */
161function association_maj_43909()
162{
163        global $association_tables_principales;
164
165        sql_alter("TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'");
166        sql_create('spip_asso_destination', 
167                $association_tables_principales['spip_asso_destination']['field'],
168                $association_tables_principales['spip_asso_destination']['key']);
169        sql_create('spip_asso_destination_op', 
170                $association_tables_principales['spip_asso_destination_op']['field'],
171                $association_tables_principales['spip_asso_destination_op']['key']);
172}
173
174$GLOBALS['association_maj'][43909] = array(array('association_maj_43909'));
175
176unset($GLOBALS['association_maj'][43909]); /* pour empecher l'execution de code fautif tout en gardant trace */
177
178function association_maj_46392() /* repare l'erreur commise sur la maj 43909 */
179{
180        global $association_tables_principales;
181
182        /* on elimine le champ mal nomme */
183        sql_alter("TABLE spip_asso_plan DROP destination");
184
185        /* et on refait la modif correctement: ca risque d'entrainer des erreurs SQL mais c'est pas grave */
186        sql_alter("TABLE spip_asso_plan ADD direction ENUM('credit','debit') NOT NULL default 'credit'");
187        sql_create('spip_asso_destination', 
188                $association_tables_principales['spip_asso_destination']['field'],
189                $association_tables_principales['spip_asso_destination']['key']);
190        sql_create('spip_asso_destination_op', 
191                $association_tables_principales['spip_asso_destination_op']['field'],
192                $association_tables_principales['spip_asso_destination_op']['key']);
193}
194
195$GLOBALS['association_maj'][46392] = array(array('association_maj_46392'));
196
197function association_maj_46779()
198{
199        global $association_tables_principales;
200        /* avant d'eliminer reference de la table spip_asso_plan, on recopie sa valeur(si non null) dans le champ commentaires */
201        $rows = sql_select("id_plan, reference, commentaire", 'spip_asso_plan', "reference <> ''");
202        while ($row = sql_fetch($rows)) {
203                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['reference']:$row['reference'];
204                sql_updateq('spip_asso_plan',
205                        array('commentaire' => $commentaire),
206                        "id_plan=".$row['id_plan']);
207        }
208        sql_alter("TABLE spip_asso_plan DROP reference");
209
210        /* modification du type de direction, on ajoute une troisieme valeur a l'enumeration, on renomme direction en type_op essentiellement
211        pour des raisons de compatibilite avec les differentes bases de donnees supportees par SPIP (impossible d'utiliser ALTER COLUMN ou MODIFY)*/
212        sql_alter("TABLE spip_asso_plan ADD type_op ENUM('credit','debit','multi') NOT NULL default 'multi'"); 
213        sql_update('spip_asso_plan', array('type_op' => 'direction'));
214        sql_alter("TABLE spip_asso_plan DROP direction");
215
216        /* transforme actif en booleen plutot que texte oui/non, et renomme pour la meme raison en active */
217        sql_alter("TABLE spip_asso_plan ADD active BOOLEAN default 1");
218        sql_update('spip_asso_plan', array('active' => 0), "actif='non'");
219        sql_alter("TABLE spip_asso_plan DROP actif");
220
221        /* avant d'eliminer don de la table spip_asso_ventes, on recopie sa valeur(si non null) dans le champ commentaires */
222        $rows = sql_select("id_vente, don, commentaire", 'spip_asso_ventes', "don <> ''");
223        while ($row = sql_fetch($rows)) {
224                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['don']:$row['don'];
225                sql_updateq('spip_asso_ventes',
226                        array('commentaire' => $commentaire),
227                        "id_vente=".$row['id_vente']);
228        }
229        sql_alter("TABLE spip_asso_ventes DROP don");
230       
231}
232
233$GLOBALS['association_maj'][46779] = array(array('association_maj_46779'));
234
235function association_maj_47144()
236{
237        global $association_tables_principales;
238        /* 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 */
239        $rows = sql_select("id_auteur, id_asso, commentaire", 'spip_asso_membres', "id_asso <> '' AND id_asso <> 0");
240        while ($row = sql_fetch($rows)) {
241                $commentaire = $row['commentaire']?$row['commentaire']." - Ref. Int. ".$row['id_asso']:"Ref. Int. ".$row['id_asso'];
242                sql_updateq('spip_asso_membres',
243                        array('commentaire' => $commentaire),
244                        "id_auteur=".$row['id_auteur']);
245        }
246        sql_alter("TABLE spip_asso_membres DROP id_asso");
247}
248
249$GLOBALS['association_maj'][47144] = array(array('association_maj_47144'));
250
251unset($GLOBALS['association_maj'][47144]); /* finalement on garde le champ id_asso, on n'effectue donc pas la maj_47144 */
252
253function association_maj_47501() /* revert de la 47144 pour ceux qui l'aurait effectue avant qu'elle ne soit supprimee */
254{
255        global $association_tables_principales;
256        /* 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 */
257        $trouver_table = charger_fonction('trouver_table', 'base');
258        $table_membres = $trouver_table('spip_asso_membres');
259        if (!$table_membres['field']['id_asso']) { /* pas de champ id_asso, il faut le restaurer */
260                sql_alter("TABLE spip_asso_membres ADD id_asso TEXT NOT NULL AFTER id_auteur");
261
262                /* on va voir dans commentaire si on trouve un champ qui ressemble a ce que la 47144 a sauvegarde */
263                $rows = sql_select("id_auteur, commentaire", 'spip_asso_membres', "commentaire LIKE '% - Ref. Int. %' OR commentaire LIKE 'Ref. Int. %'");
264                while ($row = sql_fetch($rows)) {
265                        if (preg_match('/^(.*?)( - )?Ref\. Int\. (.*)$/', $row['commentaire'], $matches)) {
266                                $commentaire = $matches[1];
267                                $id_asso = $matches[3];
268                                sql_updateq('spip_asso_membres',
269                                        array('commentaire' => $commentaire, 'id_asso' => $id_asso),
270                                        "id_auteur=".$row['id_auteur']);
271                        }
272                }               
273        }
274}
275$GLOBALS['association_maj'][47501] = array(array('association_maj_47501'));
276
277function association_maj_47731() /* eliminer le champ id_achat de la table ressources car il est inutile et non utilise, rien a sauvegarder */
278{
279        global $association_tables_principales;
280        sql_alter("TABLE spip_asso_ressources DROP id_achat");
281}
282
283$GLOBALS['association_maj'][47731] = array(array('association_maj_47731'));
284
285/* mise a jour integrant l'utilisation du plugin Coordonnees */
286function association_maj_48001() 
287{
288        global $association_tables_principales;
289
290        $effectuer_maj = false;
291
292        /* cette partie du code s'execute au premier chargement, on n'a pas encore interroge l'utilisateur sur ce qu'il veut faire de ses donnees si il en a  ou il n'a pas voulu faire la maj */
293        if (!_request('valider_association_maj_coordonnees')) {
294                /* on commence par verifier si des informations de la table spip_asso_membres sont potentiellement transferable vers les tables de coordonnees */
295                $presence_donnees = sql_countsel('spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
296
297                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
298                if (!$presence_donnees) {
299                        $effectuer_maj = true;
300                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
301                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
302                        echo '<form method="post">';
303                        /* on commence par determiner si le plugin Coordonnees est installe */
304                        include_spip('inc/plugin');
305                        $liste_plugins = liste_plugin_actifs();
306                        $plugin_coordonnees_actif = isset($liste_plugins['COORDONNEES']);
307
308                        if (!$plugin_coordonnees_actif) {/* Le plugin coordonnees n'est pas actif */
309                                echo '<p>'._T('asso:maj_coordonnees_plugin_inactif').'</p>';
310                        } else { /* le plugin coordonnees est actif */
311                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
312                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
313                        }
314                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
315                        echo '</form>';
316                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
317                }
318        } else { /* l'utilisateur veut effectuer la maj, on controlle si il y a des precision quand a l'ecrasement de donnees existentes */
319                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
320                        if ($choix_donnees == "merge") { /* on integre les donnees d'association dans Coordonnees */
321                                include_spip('action/editer_numero');
322                                include_spip('action/editer_adresse');
323                                $nbr_adresses = 0;
324                                $nbr_numeros = 0;
325
326                                set_request("objet", "auteur"); /* parceque les fonction insert_numero et insert_adresse de Coordonnees recupere par un request cette valeur pour l'insertion dans la table de liens */
327                               
328                                /* On recupere toutes les coordonnees */
329                                $coordonnees_membres = sql_select('id_auteur, adresse, code_postal, ville, telephone, mobile', 'spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
330                                while ($data = sql_fetch($coordonnees_membres)) {
331                                        set_request("id_objet", $data['id_auteur']); /* parceque les fonction insert_numero et insert_adresse de Coordonnees recupere par un request cette valeur pour l'insertion dans la table de liens */
332
333                                        /* si on a une adresse, meme partielle */
334                                        if (($data['adresse'] != '') or ($data['code_postal'] != '') or ($data['ville'] != '')) {
335                                                $id_adresse = insert_adresse();
336                                                if ($id_adresse) revisions_adresses($id_adresse, array("voie" => $data['adresse'], "code_postal" => $data['code_postal'], "ville" => $data['ville']));
337                                                $nbr_adresses++;
338                                               
339                                        }
340
341                                        /* si on a un numero de telephone */
342                                        if ($data['telephone'] != '') {
343                                                $id_numero = insert_numero();
344                                                if ($id_numero) revisions_numeros($id_numero, array("titre" => "telephone", "numero" => $data['telephone']));
345                                                $nbr_numeros++;
346                                        }
347
348                                        /* si on a un numero de mobile */
349                                        if ($data['mobile'] != '') {
350                                                $id_numero = insert_numero();
351                                                if ($id_numero) revisions_numeros($id_numero, array("titre" => "mobile", "numero" => $data['mobile']));
352                                                $nbr_numeros++;
353                                        }
354                                }
355                                echo "<fieldset><p>".$nbr_adresses._T('asso:maj_coordonnees_adresses_inserees').'<br/>'.$nbr_numeros._T('asso:maj_coordonnees_numeros_inseres')."</p></fieldset>";
356                        }
357
358                        $effectuer_maj = true;
359        }
360
361        /* on effectue si besoin la mise a jour */
362        if ($effectuer_maj) {
363                /* on supprime les champs de la table spip_asso_membres, ils ont deja ete sauvegarde dans les tables de Coordonnees si besoin */
364                sql_alter("TABLE spip_asso_membres DROP telephone");
365                sql_alter("TABLE spip_asso_membres DROP mobile");
366                sql_alter("TABLE spip_asso_membres DROP adresse");
367                sql_alter("TABLE spip_asso_membres DROP code_postal");
368                sql_alter("TABLE spip_asso_membres DROP ville");
369                sql_alter("TABLE spip_asso_membres DROP email");
370        } else { /* la mise a jour n'est pas effectuee : on le signale dans les maj_erreur pour y revenir au prochain chargement de la page de gestion des plugins */
371                if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 48001; 
372        }
373}
374
375$GLOBALS['association_maj'][48001] = array(array('association_maj_48001'));
376?>
Note: See TracBrowser for help on using the repository browser.