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

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

Associaspip Introduction de la gestion des droits d'accès, pour l'instant limités aux membres de l'association et à la gestion des groupes et autorisations.

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