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

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

Associaspip Oups (merci Jeannot).

File size: 17.9 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                $adresse = sql_countsel('spip_asso_membres', "adresse <> '' OR code_postal <> '' OR ville <> ''");
296                $telephone = sql_countsel('spip_asso_membres', "telephone <> '' OR mobile <> ''");
297
298                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
299                if (! ($adresse OR $telephone)) {
300                        $effectuer_maj = true;
301                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
302                        echo '<form method="post" action="">';
303                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
304                        /* on commence par determiner si le plugin Coordonnees est installe */
305                        include_spip('inc/plugin');
306                        $liste_plugins = liste_plugin_actifs();
307                        $plugin_coordonnees_actif = isset($liste_plugins['COORDONNEES']);
308
309                        if (!$plugin_coordonnees_actif) {/* Le plugin coordonnees n'est pas actif */
310                                echo '<p>'._T('asso:maj_coordonnees_plugin_inactif').'</p>';
311                        } else { /* le plugin coordonnees est actif */
312                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
313                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
314                                echo "\n<input type='hidden' name='association_maj_adresses' value='$adresse' />";
315                                echo "\n<input type='hidden' name='association_maj_telephones' value='$telephone' />";
316                        }
317                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
318                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
319                        echo '</form>';
320                }
321        } else { /* l'utilisateur veut effectuer la maj, on controle si il y a des precision quand a l'ecrasement de donnees existentes */
322                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
323                        if ($choix_donnees == "merge") { /* on integre les donnees d'association dans Coordonnees */
324                                include_spip('action/editer_numero');
325                                include_spip('action/editer_adresse');
326                                include_spip('inc/modifier');
327
328                                /* pre-remplissage pour les fonctions insert_numero et insert_adresse de Coordonnees */
329                                $liens = array('objet' => 'auteur'); 
330                                $telephone = array('titre' => 'telephone');
331                                $mobile = array('titre' => 'mobile');
332                                $invalideur = array('invalideur' => 0);
333
334                                /* On recupere les coordonnees utiles */
335                                $coordonnees_membres = sql_select('id_auteur, adresse AS voie, code_postal, ville, telephone, mobile', 'spip_asso_membres', "adresse <> '' OR mobile <> '' OR code_postal <> '' OR ville <> '' OR telephone <> ''");
336                                while ($data = sql_fetch($coordonnees_membres)) {
337                                        $liens['id_objet'] = $data['id_auteur'];
338                                        unset($data['id_auteur']); 
339
340                                        /* si on a un numero de telephone */
341                                        if ($telephone['numero'] = $data['telephone']) {
342                                                if ($id_numero =  insert_numero($liens)) {
343                                                        $invalideur['invalideur'] = "id='id_numero/$id_numero'";
344                                                        modifier_contenu('numero', $id_numero, $invalideur, $telephone);
345                                                }
346                                        }
347                                        unset($data['telephone']); 
348
349                                        /* si on a un numero de mobile */
350                                        if ($mobile['numero'] = $data['mobile']) {
351                                                if ($id_numero = insert_numero($liens)) {
352                                                        $invalideur['invalideur'] = "id='id_numero/$id_numero'";
353                                                        modifier_contenu('numero', $id_numero, $invalideur, $mobile);
354                                                }
355                                        }
356                                        unset($data['mobile']); 
357
358                                        /* si on a une adresse, meme partielle */
359                                        if ($data['voie'] OR $data['code_postal'] OR $data['ville']) {
360                                                if ($id_adresse = insert_adresse($liens)) {
361                                                        $invalideur['invalideur'] = "id='id_adresse/$id_adresse'";
362                                                        modifier_contenu('adresse', $id_adresse, $invalideur, $data);
363                                                }
364                                        }
365                                }
366                                echo "\n<fieldset>", intval(_request('association_maj_adresses')), _T('asso:maj_coordonnees_adresses_inserees'),
367                                  '<br/>', intval(_request('association_maj_telephones')), _T('asso:maj_coordonnees_numeros_inseres'), "\n</fieldset>";
368                        }
369
370                        $effectuer_maj = true;
371        }
372
373        /* on effectue si besoin la mise a jour */
374        if ($effectuer_maj) {
375                /* on supprime les champs de la table spip_asso_membres, ils ont deja ete sauvegarde dans les tables de Coordonnees si besoin */
376                sql_alter("TABLE spip_asso_membres DROP telephone");
377                sql_alter("TABLE spip_asso_membres DROP mobile");
378                sql_alter("TABLE spip_asso_membres DROP adresse");
379                sql_alter("TABLE spip_asso_membres DROP code_postal");
380                sql_alter("TABLE spip_asso_membres DROP ville");
381                sql_alter("TABLE spip_asso_membres DROP email");
382        } 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 */
383                if (!$GLOBALS['association_maj_erreur']) $GLOBALS['association_maj_erreur'] = 48001; 
384        }
385}
386
387$GLOBALS['association_maj'][48001] = array(array('association_maj_48001'));
388?>
Note: See TracBrowser for help on using the repository browser.