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

Last change on this file since 59469 was 59469, checked in by gildas.cotomale@…, 8 years ago

correction de coquilles

File size: 29.0 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'))
13        return;
14
15include_spip('base/association');
16include_spip('base/abstract_sql');
17
18// desinstallation
19function association_vider_tables($nom_meta, $table)
20{
21        // on efface la meta [association_meta][base_version] pour que la fonction qui gere la desinstallation ne voie plus le plugin et confirme sa desinstallation
22        effacer_meta($nom_meta, $table);
23        spip_log("Plugin Associaspip (vb:$nom_meta_base_version) dereference",'associaspip');
24
25        // On liste les tables du plugin
26        $tables_a_supprimer = array(
27                'spip_asso_activites',
28                'spip_asso_categories',
29                'spip_asso_comptes',
30                'spip_asso_destination',
31                'spip_asso_destination_op',
32                'spip_asso_dons',
33                'spip_asso_exercices',
34                'spip_asso_groupes',
35                'spip_asso_groupes_liaisons',
36                'spip_asso_membres',
37                'spip_asso_plan',
38                'spip_asso_prets',
39                'spip_asso_ressources',
40                'spip_asso_ventes',
41                'spip_association_metas',
42        );
43        // On efface les tables du plugin en consignant le resultat dans /tmp/spip_prive.log
44        foreach($tables_a_supprimer as $table ) {
45                if (sql_drop_table($table))
46                        spip_log("Associaspip : echec de la desinstallation de la table '$table' ",'associaspip');
47                else {
48                        spip_log("Associaspip : echec de la desinstallation de la table '$table' ",'associaspip');
49                }
50        }
51
52}
53
54// MAJ des tables de la base SQL
55// Retourne 0 si ok, le dernier numero de MAJ ok sinon
56function association_upgrade($meta, $courante, $table='meta')
57{
58        // Compatibilite: le nom de la meta donnant le numero de version
59        // n'etait pas std puis est parti dans une autre table puis encore une autre
60        if (!isset($GLOBALS['association_metas']['base_version'])) {
61                lire_metas('asso_metas');
62                if (isset($GLOBALS['asso_metas']['base_version'])) {
63                        $n = $GLOBALS['asso_metas']['base_version'];
64                } elseif (isset($GLOBALS['meta']['association_base_version'])) {
65                        $n = $GLOBALS['meta']['association_base_version'];
66                } else
67                        $n = 0;
68                $GLOBALS['association_metas']['base_version'] = $n;
69        } else
70                $n = $GLOBALS['association_metas']['base_version'];
71        effacer_meta('association_base_version');
72        spip_log("association upgrade: $table $meta = $n =>> $courante",'associaspip');
73        if (!$n) {
74                include_spip('base/create');
75                alterer_base($GLOBALS['tables_principales'],
76                             $GLOBALS['tables_auxiliaires']);
77                ecrire_meta($meta, $courante, NULL, $table);
78                return 0; // Reussite (supposee !)
79        } else {
80        // compatibilite avec les numeros de version non entiers
81                $installee = ($n>1) ? $n : ($n*100);
82                $GLOBALS['association_maj_erreur'] = 0;
83                if ($courante>$installee) {
84                        include_spip('base/upgrade');
85                        $n = maj_while($installee, $courante, $GLOBALS['association_maj'], $meta, $table);
86                        $n = $n ? $n[0] : $GLOBALS['association_maj_erreur'];
87                        // signaler que les dernieres MAJ sont a refaire
88                        if ($n) ecrire_meta($meta, $n-1, '', $table);
89                }
90                return $GLOBALS['association_maj_erreur'];
91        }
92}
93
94// A chaque modif de la base SQL ou ses conventions (raccourcis etc)
95// le fichier plugin.xml doit indiquer le numero de depot qui l'implemente sur
96// http://zone.spip.org/trac/spip-zone/timeline
97// Ce numero est fourni automatiquement par la fonction spip_plugin_install
98// lors de l'appel des fonctions de ce fichier.
99
100$GLOBALS['association_maj'][21] = array(
101        array('sql_alter',"TABLE spip_asso_membres ADD publication TEXT NOT NULL "),
102);
103
104$GLOBALS['association_maj'][30] = array(
105        array('sql_drop_table', "spip_asso_bienfaiteurs"),
106        array('sql_drop_table', "spip_asso_financiers"),
107);
108
109$GLOBALS['association_maj'][40] = array(
110        array('sql_alter',"TABLE spip_asso_comptes ADD valide TEXT NOT NULL "),
111);
112
113$GLOBALS['association_maj'][50] = array(
114        array('sql_alter',"TABLE spip_asso_activites ADD membres TEXT NOT NULL, ADD non_membres TEXT NOT NULL "),
115);
116
117$GLOBALS['association_maj'][60] = array(
118        array('sql_drop_table', "spip_asso_profil"),
119);
120
121$GLOBALS['association_maj'][61] = array(
122        array('spip_query',"RENAME TABLE spip_asso_banques TO spip_asso_plan"),
123        array('sql_drop_table',"spip_asso_livres"),
124);
125
126$GLOBALS['association_maj'][62] = array(
127        array('sql_alter',"TABLE spip_asso_plan ADD actif TEXT NOT NULL "),
128);
129
130$GLOBALS['association_maj'][63] = array(
131        array('sql_alter',"TABLE spip_asso_ventes ADD id_acheteur BIGINT NOT NULL "),
132);
133
134function association_maj_64()
135{
136        if (_ASSOCIATION_AUTEURS_ELARGIS=='spip_auteurs_elargis') {
137                sql_alter("TABLE spip_auteurs_elargis ADD validite DATE NOT NULL default '0000-00-00'");
138                sql_alter("TABLE spip_auteurs_elargis ADD montant FLOAT NOT NULL default '0'");
139                sql_alter("TABLE spip_auteurs_elargis ADD date DATE NOT NULL default '0000-00-00' ");
140        } else {
141                if (_ASSOCIATION_INSCRIPTION2) {
142                        if (!$GLOBALS['association_maj_erreur'])
143                                $GLOBALS['association_maj_erreur'] = 64;
144                        return;
145                }
146                // Simulation provisoire
147                sql_alter("TABLE spip_asso_membres ADD commentaire TEXT NOT NULL default ''");
148                sql_alter("TABLE spip_asso_membres ADD statut_interne TEXT NOT NULL default '' ");
149                sql_alter("TABLE spip_asso_membres ADD nom_famille TEXT DEFAULT '' NOT NULL ");
150                sql_update('spip_asso_membres', array('nom'=>'nom_famille'), "nom<>''" );
151                sql_alter("TABLE spip_asso_membres DROP nom");
152        }
153}
154$GLOBALS['association_maj'][64] = array(
155        array('association_maj_64')
156);
157
158// Recopie des metas geree par CFG dans la table asso_meta
159function association_maj_38192()
160{
161        if (sql_create('spip_asso_metas',
162                $GLOBALS['tables_auxiliaires']['spip_asso_metas']['field'], $GLOBALS['tables_auxiliaires']['spip_asso_metas']['key'], false, false)) {
163                // Il faut charger a la main ses fichiers puisque plugin.xml ne le demande plus
164                include _DIR_PLUGINS . 'cfg/inc/cfg.php';
165                if (is_array($c = lire_config('association'))) {
166                        foreach($c as $k => $v) {
167                                ecrire_meta($k, $v, 'oui', 'association_metas');
168                        }
169                        // effacer les vieilles meta
170                        effacer_meta('association');
171                        effacer_meta('asso_base_version');
172                        effacer_meta('association_base_version');
173                }
174        } else
175                spip_log("maj_38190: echec de  la creation de spip_asso_metas",'associaspip');
176}
177$GLOBALS['association_maj'][38192] = array(
178        array('association_maj_38192')
179);
180
181$GLOBALS['association_maj'][38258] = array(
182        array('sql_create','spip_asso_membres',
183                $GLOBALS['tables_principales']['spip_asso_membres']['field'],
184            $GLOBALS['tables_principales']['spip_asso_membres']['key']
185        )
186);
187
188$GLOBALS['association_maj'][38578] = array(
189/* eviter les syntaxes proprietaires
190#       array('spip_query', "RENAME table spip_asso_metas TO spip_association_metas"), // syntaxe DB2 et MySQL
191#       array('spip_query', "SP_RENAME table spip_asso_metas , spip_association_metas"), // syntaxe SQL-Server / Transact-SQL
192* au profit de la syntaxe commune, gage de portabilite */
193        array('sql_alter', "TABLE spip_asso_metas RENAME TO spip_association_metas"), // syntaxe ANSI-SQL92 reconnue par MySQL Oracle PosgreSQL SQLite etc
194);
195
196$GLOBALS['association_maj'][42024] = array(
197        array('sql_alter', "TABLE spip_asso_comptes ADD vu BOOLEAN default 0"),
198        array('sql_update', 'spip_asso_comptes', array('vu' => 1), "valide='oui'"),
199        array('sql_alter', "TABLE spip_asso_comptes DROP valide"),
200);
201
202/* 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 */
203$GLOBALS['association_maj'][43909] = array(
204        array('sql_alter', "TABLE spip_asso_plan ADD destination ENUM('credit','debit') NOT NULL default 'credit'"),
205        array('sql_create', 'spip_asso_destination', $GLOBALS['tables_principales']['spip_asso_destination']['field'], $GLOBALS['tables_principales']['spip_asso_destination']['key']),
206        array('sql_create', 'spip_asso_destination_op', $GLOBALS['tables_principales']['spip_asso_destination_op']['field'], $GLOBALS['tables_principales']['spip_asso_destination_op']['key']),
207);
208unset($GLOBALS['association_maj'][43909]); /* pour empecher l'execution de code fautif tout en gardant trace */
209
210/* repare l'erreur commise sur la maj 43909 */
211$GLOBALS['association_maj'][46392] = array(
212        /* on elimine le champ mal nomme */
213        array('sql_alter', "TABLE spip_asso_plan DROP destination"),
214        /* et on refait la modif correctement: ca risque d'entrainer des erreurs SQL mais c'est pas grave */
215        array('sql_alter', "TABLE spip_asso_plan ADD direction ENUM('credit','debit') NOT NULL default 'credit'"),
216        array('sql_create', 'spip_asso_destination', $GLOBALS['tables_principales']['spip_asso_destination']['field'], $GLOBALS['tables_principales']['spip_asso_destination']['key']),
217        array('sql_create', 'spip_asso_destination_op', $GLOBALS['tables_principales']['spip_asso_destination_op']['field'], $GLOBALS['tables_principales']['spip_asso_destination_op']['key']),
218);
219
220function association_maj_46779()
221{
222        /* avant d'eliminer reference de la table spip_asso_plan, on recopie sa valeur(si non null) dans le champ commentaires */
223        $rows = sql_select("id_plan, reference, commentaire", 'spip_asso_plan', "reference <> ''");
224        while ($row = sql_fetch($rows)) {
225                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['reference']:$row['reference'];
226                sql_updateq('spip_asso_plan',
227                        array('commentaire' => $commentaire),
228                        "id_plan=".$row['id_plan']);
229        }
230        sql_alter("TABLE spip_asso_plan DROP reference");
231
232        /* modification du type de direction, on ajoute une troisieme valeur a l'enumeration, on renomme direction en type_op essentiellement
233        pour des raisons de compatibilite avec les differentes bases de donnees supportees par SPIP (impossible d'utiliser ALTER COLUMN ou MODIFY)*/
234        sql_alter("TABLE spip_asso_plan ADD type_op ENUM('credit','debit','multi') NOT NULL default 'multi'");
235        sql_update('spip_asso_plan', array('type_op' => 'direction'));
236        sql_alter("TABLE spip_asso_plan DROP direction");
237
238        /* transforme actif en booleen plutot que texte oui/non, et renomme pour la meme raison en active */
239        sql_alter("TABLE spip_asso_plan ADD active BOOLEAN default 1");
240        sql_update('spip_asso_plan', array('active' => 0), "actif='non'");
241        sql_alter("TABLE spip_asso_plan DROP actif");
242
243        /* avant d'eliminer don de la table spip_asso_ventes, on recopie sa valeur(si non null) dans le champ commentaires */
244        $rows = sql_select("id_vente, don, commentaire", 'spip_asso_ventes', "don <> ''");
245        while ($row = sql_fetch($rows)) {
246                $commentaire = $row['commentaire']?$row['commentaire']." - ".$row['don']:$row['don'];
247                sql_updateq('spip_asso_ventes',
248                        array('commentaire' => $commentaire),
249                        "id_vente=".$row['id_vente']);
250        }
251        sql_alter("TABLE spip_asso_ventes DROP don");
252
253}
254$GLOBALS['association_maj'][46779] = array(
255        array('association_maj_46779')
256);
257
258function association_maj_47144()
259{
260        /* 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 */
261        $rows = sql_select("id_auteur, id_asso, commentaire", 'spip_asso_membres', "id_asso <> '' AND id_asso <> 0");
262        while ($row = sql_fetch($rows)) {
263                $commentaire = $row['commentaire']?$row['commentaire']." - Ref. Int. ".$row['id_asso']:"Ref. Int. ".$row['id_asso'];
264                sql_updateq('spip_asso_membres',
265                        array('commentaire' => $commentaire),
266                        "id_auteur=".$row['id_auteur']);
267        }
268        sql_alter("TABLE spip_asso_membres DROP id_asso");
269}
270$GLOBALS['association_maj'][47144] = array(
271        array('association_maj_47144')
272);
273unset($GLOBALS['association_maj'][47144]); /* finalement on garde le champ id_asso, on n'effectue donc pas la maj_47144 */
274
275/* revert de la 47144 pour ceux qui l'aurait effectue avant qu'elle ne soit supprimee */
276function association_maj_47501()
277{
278        /* 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 */
279        $trouver_table = charger_fonction('trouver_table', 'base');
280        $table_membres = $trouver_table('spip_asso_membres');
281        if (!$table_membres['field']['id_asso']) { /* pas de champ id_asso, il faut le restaurer */
282                sql_alter("TABLE spip_asso_membres ADD id_asso TEXT NOT NULL ");
283
284                /* on va voir dans commentaire si on trouve un champ qui ressemble a ce que la 47144 a sauvegarde */
285                $rows = sql_select("id_auteur, commentaire", 'spip_asso_membres', "commentaire LIKE '% - Ref. Int. %' OR commentaire LIKE 'Ref. Int. %'");
286                while ($row = sql_fetch($rows)) {
287                        if (preg_match('/^(.*?)( - )?Ref\. Int\. (.*)$/', $row['commentaire'], $matches)) {
288                                $commentaire = $matches[1];
289                                $id_asso = $matches[3];
290                                sql_updateq('spip_asso_membres',
291                                        array('commentaire' => $commentaire, 'id_asso' => $id_asso),
292                                        "id_auteur=".$row['id_auteur']);
293                        }
294                }
295        }
296}
297$GLOBALS['association_maj'][47501] = array(
298        array('association_maj_47501')
299);
300
301/* eliminer le champ id_achat de la table ressources car il est inutile et non utilise, rien a sauvegarder */
302$GLOBALS['association_maj'][47731] = array(
303        array('sql_alter', "TABLE spip_asso_ressources DROP id_achat"),
304);
305
306/* mise a jour integrant l'utilisation du plugin Coordonnees */
307function association_maj_48001()
308{
309        $effectuer_maj = false;
310
311        /* 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 */
312        if (!_request('valider_association_maj_coordonnees')) {
313                /* on commence par verifier si des informations de la table spip_asso_membres sont potentiellement transferable vers les tables de coordonnees */
314                $adresse = sql_countsel('spip_asso_membres', "adresse <> '' OR code_postal <> '' OR ville <> ''");
315                $telephone = sql_countsel('spip_asso_membres', "telephone <> '' OR mobile <> ''");
316
317                /* si on n'a pas de donnees a sauvegarder, on fait la mise a jour sans poser de question */
318                if (! ($adresse OR $telephone)) {
319                        $effectuer_maj = true;
320                } else { /* on a des donnees, demander a l'utilisateur ce qu'il veut en faire */
321                        echo '<form method="post" action="">';
322                        echo '<fieldset><p>'._T('asso:maj_coordonnees_intro').'</p>';
323                        /* on commence par determiner si le plugin Coordonnees est installe */
324                        include_spip('inc/plugin');
325                        $liste_plugins = liste_plugin_actifs();
326                        $plugin_coordonnees_actif = isset($liste_plugins['COORDONNEES']);
327
328                        if (!$plugin_coordonnees_actif) {/* Le plugin coordonnees n'est pas actif */
329                                echo '<p>'._T('asso:maj_coordonnees_plugin_inactif').'</p>';
330                        } else { /* le plugin coordonnees est actif */
331                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="ignorer">'._T('asso:maj_coordonnees_ignorer').'</input><br/>';
332                                echo '<input type="radio" name="association_maj_coordonnees_traitement_data" value="merge" checked="checked">'._T('asso:maj_coordonnees_merge').'</input>';
333                                echo "\n<input type='hidden' name='association_maj_adresses' value='$adresse' />";
334                                echo "\n<input type='hidden' name='association_maj_telephones' value='$telephone' />";
335                        }
336                        echo '<p><input type="submit" name="valider_association_maj_coordonnees" value="'._T('asso:effectuer_la_maj').'"/></p>';
337                        echo '<p>'._T('asso:maj_coordonnees_notes').'</p></fieldset>';
338                        echo '</form>';
339                }
340        } else { /* l'utilisateur veut effectuer la maj, on controle si il y a des precision quand a l'ecrasement de donnees existentes */
341                        $choix_donnees = _request('association_maj_coordonnees_traitement_data');
342                        if ($choix_donnees=='merge') { /* on integre les donnees d'association dans Coordonnees */
343                                include_spip('action/editer_numero');
344                                include_spip('action/editer_adresse');
345                                include_spip('inc/modifier');
346
347                                /* pre-remplissage pour les fonctions insert_numero et insert_adresse de Coordonnees */
348                                $liens = array('objet' => 'auteur');
349                                $telephone = array('titre' => 'telephone');
350                                $mobile = array('titre' => 'mobile');
351
352                                $spip_table_numero = table_objet_sql('numero');
353                                $id_table_numero = id_table_objet('numero');
354
355                                $spip_table_adresse = table_objet_sql('adresse');
356                                $id_table_adresse = id_table_objet('adresse');
357
358                                /* On recupere les coordonnees utiles */
359                                $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 <> ''");
360                                while ($data = sql_fetch($coordonnees_membres)) {
361                                        $liens['id_objet'] = $data['id_auteur'];
362                                        unset($data['id_auteur']);
363
364                                        /* si on a un numero de telephone */
365                                        if ($telephone['numero'] = $data['telephone']) {
366                                                if ($id_numero =  insert_numero($liens)) {
367                                                        sql_updateq($spip_table_numero, $telephone, "$id_table_numero=$id_numero");
368                                                }
369                                        }
370                                        unset($data['telephone']);
371
372                                        /* si on a un numero de mobile */
373                                        if ($mobile['numero'] = $data['mobile']) {
374                                                if ($id_numero = insert_numero($liens)) {
375                                                        sql_updateq($spip_table_numero, $mobile, "$id_table_numero=$id_numero");
376                                                }
377                                        }
378                                        unset($data['mobile']);
379
380                                        /* si on a une adresse, meme partielle */
381                                        if ($data['voie'] OR $data['code_postal'] OR $data['ville']) {
382                                                if ($id_adresse = insert_adresse($liens)) {
383                                                        sql_updateq($spip_table_adresse, $data, "$id_table_adresse=$id_adresse");
384                                                }
385                                        }
386                                }
387                                echo "\n<fieldset>", intval(_request('association_maj_adresses')), _T('asso:maj_coordonnees_adresses_inserees'),
388                                  '<br/>', intval(_request('association_maj_telephones')), _T('asso:maj_coordonnees_numeros_inseres'), "\n</fieldset>";
389                        }
390
391                        $effectuer_maj = true;
392        }
393
394        /* on effectue si besoin la mise a jour */
395        if ($effectuer_maj) {
396                /* on supprime les champs de la table spip_asso_membres, ils ont deja ete sauvegarde dans les tables de Coordonnees si besoin */
397                sql_alter("TABLE spip_asso_membres DROP telephone");
398                sql_alter("TABLE spip_asso_membres DROP mobile");
399                sql_alter("TABLE spip_asso_membres DROP adresse");
400                sql_alter("TABLE spip_asso_membres DROP code_postal");
401                sql_alter("TABLE spip_asso_membres DROP ville");
402                sql_alter("TABLE spip_asso_membres DROP email");
403        } 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 */
404                if (!$GLOBALS['association_maj_erreur'])
405                        $GLOBALS['association_maj_erreur'] = 48001;
406        }
407}
408$GLOBALS['association_maj'][48001] = array(
409        array('association_maj_48001')
410);
411
412// passer l'horodatage des modifications de ligne en TIMESTAMP automatique
413$GLOBALS['association_maj'][48225] = array(
414        array ('sql_alter', "TABLE spip_asso_categories CHANGE maj maj TIMESTAMP"),
415        array ('sql_alter', "TABLE spip_asso_dons CHANGE maj maj TIMESTAMP"),
416        array ('sql_alter', "TABLE spip_asso_ventes CHANGE maj maj TIMESTAMP"),
417        array ('sql_alter', "TABLE spip_asso_comptes CHANGE maj maj TIMESTAMP"),
418        array ('sql_alter', "TABLE spip_asso_plan CHANGE maj maj TIMESTAMP"),
419        array ('sql_alter', "TABLE spip_asso_ressources CHANGE maj maj TIMESTAMP"),
420        array ('sql_alter', "TABLE spip_asso_prets CHANGE maj maj TIMESTAMP"),
421        array ('sql_alter', "TABLE spip_asso_activites CHANGE maj maj TIMESTAMP"),
422);
423
424/* cette mise a jour introduit un controle sur l'activation des modules de gestions des dons, */
425/* ventes, prets, activites subordonnes a l'activation de la gestion comptable.               */
426/* la fonction de mise a jour desactive donc d'eventuels modules actives si la gestion        */
427/* comptable n'est pas activee                                                               */
428function association_maj_48466()
429{
430        include_spip('inc/association_comptabilite');
431        /* on verifie la validite du plan comptable existant */
432        if ($GLOBALS['association_metas']['comptes'] && !association_valider_plan_comptable()) {
433                ecrire_meta('comptes', '', 'oui', 'association_metas');
434                echo '<p>'._T('asso:maj_desactive_gestion_comptable').'</p>';
435        }
436
437        $desactivation = false;
438        if (!$GLOBALS['association_metas']['comptes']) {
439                if ($GLOBALS['association_metas']['dons']) { ecrire_meta('dons', '', 'oui', 'association_metas'); $desactivation = true; }
440                if ($GLOBALS['association_metas']['ventes']) { ecrire_meta('ventes', '', 'oui', 'association_metas'); $desactivation = true; }
441                if ($GLOBALS['association_metas']['prets']) { ecrire_meta('prets', '', 'oui', 'association_metas'); $desactivation = true; }
442                if ($GLOBALS['association_metas']['activites']) { ecrire_meta('activites', '', 'oui', 'association_metas'); $desactivation = true; }
443        }
444
445        /* si on a desactive des modules, on le signale par un message */
446        if ($desactivation) echo '<p>'._T('asso:maj_desactive_modules').'</p>';
447
448        /* on en profite pour effacer des metas qui ne servent plus */
449        effacer_meta('comptes_stricts', 'association_metas');
450        effacer_meta('indexation', 'association_metas');
451}
452$GLOBALS['association_maj'][48466] = array(
453        array('association_maj_48466')
454);
455
456$GLOBALS['association_maj'][51602] = array(
457        array('sql_alter', "TABLE spip_asso_membres ADD date_adhesion DATE "),
458);
459
460/* Ces champs de configuration n'etant plus geres par defaut, les passer en personalises pour ceux qui les utilisent */
461$GLOBALS['association_maj'][52476] = array(
462        array('sql_update', 'spip_association_metas', array('nom' => "'meta_utilisateur_n_siret'" ), "nom='siret' AND valeur<>''" ),
463        array('sql_delete', 'spip_association_metas', "nom='siret' AND valeur=''" ),
464        array('sql_update', 'spip_association_metas', array('nom' => "'meta_utilisateur_n_tva'" ), "nom='tva' AND valeur<>''" ),
465        array('sql_delete', 'spip_association_metas', "nom='tva' AND valeur=''" ),
466);
467
468/* mise a jour introduisant les groupes */
469function association_maj_53901()
470{
471        sql_create('spip_asso_groupes',
472                $GLOBALS['tables_principales']['spip_asso_groupes']['field'],
473                $GLOBALS['tables_principales']['spip_asso_groupes']['key']);
474        sql_alter("TABLE spip_asso_groupes AUTO_INCREMENT = 100");
475        sql_create('spip_asso_groupes_liaisons',
476                $GLOBALS['tables_principales']['spip_asso_groupes_liaisons']['field'],
477                $GLOBALS['tables_principales']['spip_asso_groupes_liaisons']['key']);
478
479        /* si on a des membres avec une fonction defini, on recupere tout et on les mets dans un groupe appele bureau */
480        $liste_membres_bureau = sql_select("id_auteur, fonction" ,"spip_asso_membres", "fonction <> ''");
481        if (sql_count($liste_membres_bureau )) {
482                /* on cree un groupe "Bureau" */
483                $id_groupe = sql_insertq("spip_asso_groupes", array('nom' => 'Bureau', 'affichage' => '1'));
484                /* et on y insere tous les membres qui avaient une fonction */
485                while ($membre_bureau = sql_fetch($liste_membres_bureau)) {
486                        sql_insertq("spip_asso_groupes_liaisons", array(
487                                'id_groupe' => $id_groupe,
488                                'id_auteur' => $membre_bureau['id_auteur'],
489                                'fonction'  => $membre_bureau['fonction'],
490                        ));
491                }
492        }
493
494        /* on supprime le champs fonction de la table spip_asso_membres car il est maintenant gere dans spip_asso_groupes_liaison */
495        sql_alter("TABLE spip_asso_membres DROP fonction");
496}
497$GLOBALS['association_maj'][53901] = array(
498        array('association_maj_53901')
499);
500
501/* Creation de la table 'exercices' permettant de gerer la comptabilite en exercice comptable */
502/* sur une 'annee civile', une 'annee scolaire', ou sur des periodes donnees */
503$GLOBALS['association_maj'][55177] = array(
504        array('sql_create','spip_asso_exercices',
505        $GLOBALS['tables_principales']['spip_asso_exercices']['field'],
506        $GLOBALS['tables_principales']['spip_asso_exercices']['key']),
507);
508
509/* Changer les champs FLOAT (ou parfois TEXT...) en DECIMAL */
510// correction de r57429 (etourderie: 2 decimales et non 4), et rajout de deux champs confirmes (spip_asso_dons)
511$GLOBALS['association_maj'][57896] = array(
512        array ('sql_alter', "TABLE spip_asso_categories CHANGE cotisation cotisation DECIMAL(19,2) NOT NULL"),
513        array ('sql_alter', "TABLE spip_asso_ventes CHANGE prix_vente prix_vente DECIMAL(19,2) NOT NULL"),
514        array ('sql_alter', "TABLE spip_asso_ventes CHANGE frais_envoi frais_envoi DECIMAL(19,2) NOT NULL"),
515        array ('sql_alter', "TABLE spip_asso_comptes CHANGE recette recette DECIMAL(19,2) NOT NULL"),
516        array ('sql_alter', "TABLE spip_asso_comptes CHANGE depense depense DECIMAL(19,2) NOT NULL"),
517        array ('sql_alter', "TABLE spip_asso_plan CHANGE solde_anterieur solde_anterieur DECIMAL(19,2) NOT NULL"),
518        array ('sql_alter', "TABLE spip_asso_destination_op CHANGE recette recette DECIMAL(19,2) NOT NULL"),
519        array ('sql_alter', "TABLE spip_asso_destination_op CHANGE depense depense DECIMAL(19,2) NOT NULL"),
520        array ('sql_alter', "TABLE spip_asso_ressources CHANGE pu pu DECIMAL(19,2) NOT NULL"),
521        array ('sql_alter', "TABLE spip_asso_activites CHANGE montant montant DECIMAL(19,2) NOT NULL"),
522        array ('sql_alter', "TABLE spip_asso_dons CHANGE argent argent DECIMAL(19,2) NOT NULL"),
523        array ('sql_alter', "TABLE spip_asso_dons CHANGE valeur valeur DECIMAL(19,2) NOT NULL"),
524);
525
526// Revue de la gestion des ressources et prets (debut)
527$GLOBALS['association_maj'][58825] = array(
528        array ('sql_alter', "TABLE spip_asso_prets DROP statut"), // ce champ ne sert pas, donc...
529        array ('sql_alter', "TABLE spip_asso_prets CHANGE date_sortie date_sortie DATETIME NOT NULL"), // permettre une gestion plus fine (duree inferieure a la journee)
530        array ('sql_alter', "TABLE spip_asso_prets CHANGE date_retour date_retour DATETIME NOT NULL"), // permettre une gestion plus fine (duree inferieure a la journee)
531        array('sql_update', 'spip_asso_ressources', array('statut' => 1), "statut='ok'"), // nouveau statut numerique gerant simultanement les quantites
532        array('sql_update', 'spip_asso_ressources', array('statut' => 0), "statut='reserve'"), // nouveau statut numerique gerant simultanement les quantites
533        array('sql_update', 'spip_asso_ressources', array('statut' => -1), "statut='suspendu'"), // nouveau statut numerique gerant simultanement les quantites
534/* Ne pas convertir le champ si on a des statuts personnalises... le code prevoit la compatibilite ascendante (sauf ajout de fonctionnalite incompatible) */
535        array ('sql_alter', "TABLE spip_asso_ressources CHANGE statut statut TINYTEXT NULL"), // changement temporaire pour rendre le champ nullable
536        array('sql_update', 'spip_asso_ressources', array('statut' => NULL), "statut='sorti'"), // nouveau statut numerique gerant simultanement les quantites
537        array ('sql_alter', "TABLE spip_asso_ressources CHANGE statut statut TINYINT NULL DEFAULT 1"), // nouvelle gestion numerique
538);
539
540// Revue de la gestion des ressources et prets (suite)
541$GLOBALS['association_maj'][58824] = array(
542        array ('sql_alter', "TABLE spip_asso_prets ADD prix_unitaire DECIMAL(19,2) NOT NULL DEFAULT 0 "), // comme pour les ventes (asso_ventes.prix_vente) et les activites (asso_activites.montant) on garde le cout de base facture car celui-ci (asso_ressources.pu) peut changer par la suite
543);
544
545// Revue de la gestion des ressources et prets (fin)
546$GLOBALS['association_maj'][58825] = array(
547// on reprend ici les requetes erronnees de maj-57780 ("bienfaiteur" y est malencontreusement+logiquement nomme "donateur")
548        /* En liant le nom du bienfaiteur avec l'ID membre avant d'enregistrer, il faut penser a defaire cela a chaque edition pour eviter de se retrouver avec [un nom->membreXX] qui devient [[un nom->mebreXX]->membreXX] au moment de reediter. Il semble plus simple de ne pas transformer la saisie a stocker mais seulement l'affichage avec la nouvelle fonction association_calculer_lien_nomid($nom,$id) Du coup il faut quand meme retablir les champs pour ne pas reproduire a l'affichage le souci qu'on avait a l'edition... */
549        array('sql_update', 'spip_asso_dons', array('bienfaiteur' => "SUBSTR(bienfaiteur,2, INSTR(bienfaiteur,'->membre')-1)"), "bienfaiteur LIKE '[%->membre%]'"), // SUBSTR est compris par la plupart meme s'il y a d'autres appelations comme SUBSTRING (SQL Server et mySQL). INSTR (pour lequel Oracle accepte deux parametres optionnels de plsu que mySQL) ou POSITION ou PARTINDEX ou CHARINDEX ou LOCATE ... pfff. peut-etre vaut-il mieux le faire en PHP pour etre certain d'etre independant de l'implementation SQL ?!? ou tenter l'approche par REPLACE("dans quelle chaine","sous-chaine a trouver","sous-chaine de remplacement") qui est commun a beaucoup de SGBD_SQL (mais pas dans la norme de 92 non plus si j'ai bonne memoire) ? faut voir...
550// on reprend ici les requetes erronnees de maj-58798
551        array ('sql_alter', "TABLE spip_asso_ressources ADD ud CHAR(1) NOT NULL DEFAULT 'D' "), // unite des durees de location
552// on reprend ici les requetes erronnees de maj-58824
553        array ('sql_alter', "TABLE spip_asso_ressources ADD prix_acquisition DECIMAL(19,2) NOT NULL DEFAULT 0 "), // garder trace du cout d'acquisition pour mieux evaluer l'amortissement et la rentabilite
554        array('sql_update', 'spip_asso_prets AS a_p INNER JOIN spip_asso_ressources AS a_r ON a_p.id_ressource=a_r.id_ressource', array('prix_unitaire'=>'pu' ), "prix_unitaire=0"), // mettre a jour avec les tarifs actuels...
555);
556
557$GLOBALS['association_maj'][58894] = array(
558// renommer le champ "date" en "date_inscription" qui est plus parlant et n'est pas un mot reserve
559        array('sql_alter', "TABLE spip_asso_activites ADD date_inscription DATE NOT NULL DEFAULT '0000-00-00' "),
560        array('sql_update', 'spip_asso_activites', array('date'=>'date_inscription') ),
561        array('sql_alter', "TABLE spip_asso_activites DROP date "),
562);
563
564
565
566?>
Note: See TracBrowser for help on using the repository browser.