source: spip-zone/_plugins_/inscription2/inscription2_2_0/base/inscription2_installer.php @ 31637

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

les ereg_replace deviennent preg_replace

On passe par les apis SPIP pour mettre à jour les tables (maj_tables)

On indente correctement le code

File size: 8.1 KB
Line 
1<?php
2/**
3 * Plugin Inscription2 pour SPIP
4 * Licence GPL v3
5 *
6 */
7
8$GLOBALS['inscription2_version'] = 0.71;
9
10/**
11 * Fonction d'installation et de mise à jour du plugin
12 * @return
13 */
14function inscription2_upgrade(){
15        spip_log('INSCRIPTION 2 : installation','inscription2');
16        $exceptions_des_champs_auteurs_elargis = pipeline('i2_exceptions_des_champs_auteurs_elargis',array());
17        include_spip('cfg_options');
18
19        //On force le fait d accepter les visiteurs
20        $accepter_visiteurs = $GLOBALS['meta']['accepter_visiteurs'];
21        if($accepter_visiteurs != 'oui'){
22                ecrire_meta("accepter_visiteurs", "oui");
23        }
24
25        $version_base = $GLOBALS['inscription2_version'];
26        $current_version = 0.0;
27
28        //insertion des infos par defaut
29        $inscription2_meta = $GLOBALS['meta']['inscription2'];
30
31        //Certaines montées de version ont oublié de corriger la meta de I2
32        //si ce n'est pas un array alors il faut reconfigurer la meta
33        if ($inscription2_meta && !is_array(unserialize($inscription2_meta))) {
34                spip_log("INSCRIPTION 2 : effacer la meta inscription2 et relancer l'install","inscription2");
35                echo "La configuration du plugin Inscription 2 a &eacute;t&eacute; effac&eacute;e.<br />";
36                effacer_meta('inscription2');
37                $GLOBALS['meta']['inscription2_version']=0.0;
38        }
39
40        // Si la version installee est la derniere en date, on ne fait rien
41        if ( (isset($GLOBALS['meta']['inscription2_version']) )
42                && (($current_version = $GLOBALS['meta']['inscription2_version'])==$version_base))
43        return;
44
45        //Si c est une nouvelle installation toute fraiche
46        if ($current_version==0.0){
47                //inclusion des fonctions pour les requetes sql
48                include_spip('base/abstract_sql');
49
50                // à passer en sous plugin
51
52                if(!$inscription2_meta){
53                ecrire_meta(
54                        'inscription2',
55                                serialize(array(
56                                        'nom' => 'on',
57                                        'nom_obligatoire' => 'on',
58                                        'nom_fiche_mod' => 'on',
59                                        'email' => 'on',
60                                        'email_obligatoire' => 'on',
61                                        'nom_famille' => 'on',
62                                        'nom_famille_table' => 'on',
63                                        'prenom' => 'on',
64                                        'prenom_table' => 'on',
65                                        'login' => 'on',
66                                        'login_fiche_mod' => 'on',
67                                        'adresse' => 'on',
68                                        'adresse_fiche_mod' => 'on',
69                                        'code_postal' => 'on',
70                                        'code_postal_fiche_mod' => 'on',
71                                        'ville' => 'on',
72                                        'ville_fiche_mod' => 'on',
73                                        'ville_table' => 'on',
74                                        'telephone' => 'on',
75                                        'telephone_fiche_mod' => 'on',
76                                        'statut_nouveau' => '6forum',
77                                        'statut_interne' => ''
78                                ))
79                        );
80                }
81
82                //inserer les auteurs qui existent deja dans la table spip_auteurs en non pas dans la table elargis
83                $s = sql_select("a.id_auteur","spip_auteurs a left join spip_auteurs_elargis b on a.id_auteur=b.id_auteur","b.id_auteur is null");
84                while($q = sql_fetch($s)){
85                        sql_insertq("spip_auteurs_elargis",array('id_auteur' => $q['id_auteur']));
86                }
87
88                /** Inscription 2 (0.70)
89                 * Les pays sont maintenant pris dans le plugin Geographie
90                 * On ne les installe si le plugin n'est pas actif,
91                 * pour ne pas en etre dependant.
92                 */
93                i2_installer_pays();
94
95                echo "Inscription2 installe @ ".$version_base;
96                ecrire_meta('inscription2_version',$current_version=$version_base);
97                $current_version = $version_base;
98        }
99
100        // Si la version installee est inferieur a O.6 on fait l homogeneisation avec spip_geo
101        if ($current_version<0.6){
102                include_spip('base/abstract_sql');
103                include(_DIR_PLUGIN_INSCRIPTION2."/inc/pays.php");
104                $table_pays = "spip_geo_pays";
105                $descpays = sql_showtable($table_pays, '', false);
106
107                $descpays_old = sql_showtable('spip_pays', '', false);
108                if(isset($descpays_old['field'])){
109                        sql_drop_table("spip_pays");
110                }
111
112                if(!isset($descpays['field']['pays'])){
113                        sql_create("spip_geo_pays",
114                                array("id_pays"=> "SMALLINT NOT NULL AUTO_INCREMENT","nom" => "varchar(255) NOT NULL"),
115                                array('PRIMARY KEY' => "id_pays")
116                        );
117                        spip_query("INSERT INTO spip_geo_pays (nom) VALUES (\"".join('"), ("',$liste_pays)."\")");
118                }
119
120                echo "Inscription2 update @ 0.6<br/>Spip_pays devient spip_geo_pays homogeneite avec spip_geo";
121                ecrire_meta('inscription2_version',$current_version=0.6);
122        }
123                // Si la version installee est inferieur a 0.6 on fait l homogeneisation avec spip_geo
124        if ($current_version<0.61){
125                include_spip('base/abstract_sql');
126                $table_pays = "spip_geo_pays";
127                $descpays = sql_showtable($table_pays, '', false);
128
129                if((isset($descpays['field']['nom'])) && (!isset($descpays['field']['pays']))){
130                        sql_alter("TABLE spip_geo_pays CHANGE nom pays varchar(255) NOT NULL");
131                }
132
133                echo "Inscription2 update @ 0.61<br/>On retablit le champs pays sur la table pays et pas nom";
134                ecrire_meta('inscription2_version',$current_version=0.61);
135        }
136        if ($current_version<0.63){
137                include_spip('base/abstract_sql');
138                // Suppression du champs id et on remet la primary key sur id_auteur...
139                sql_alter("TABLE spip_auteurs_elargis DROP id, DROP INDEX id_auteur, ADD PRIMARY KEY (id_auteur)");
140                echo "Inscription2 update @ 0.63<br />On supprime le champs id pour privilegier id_auteur";
141                ecrire_meta('inscription2_version',$current_version=0.63);
142        }
143        if ($current_version<0.65){
144                ecrire_meta('inscription2_version',$current_version=0.65);
145        }
146
147        if ($current_version<0.71){
148                /*
149                 * Reinstaller les pays de Geographie
150                 * pour ne pas etre dependant de ce plugin
151                 */
152                i2_installer_pays();
153                spip_log("Inscription2 update @ 0.71 : installation de la table pays de geographie", "maj");
154                ecrire_meta('inscription2_version',$current_version=0.71);
155        }
156
157        ecrire_metas();
158
159        // Creation de la table et des champs
160        $verifier_tables = charger_fonction('inscription2_verifier_tables','inc');
161        $verifier_tables();
162}
163
164
165/**
166 * Fonction de suppession du plugin
167 *
168 * Supprime les donnees de la table spip_auteurs_elargis
169 * Supprime la table si plus nécessaire
170 * Supprime la table des pays si nécessaire
171 */
172function inscription2_vider_tables() {
173        $exceptions_des_champs_auteurs_elargis = pipeline('i2_exceptions_des_champs_auteurs_elargis',array());
174        include_spip('cfg_options');
175        include_spip('base/abstract_sql');
176
177        //supprime la table spip_auteurs_elargis
178        if (is_array(lire_config('inscription2'))){
179                $clef_passee = array();
180                $desc = sql_showtable('spip_auteurs_elargis','', '', true);
181                foreach(lire_config('inscription2',array()) as $cle => $val){
182                        $cle = ereg_replace("_(obligatoire|fiche|table).*", "", $cle);
183                        if(!in_array($cle,$clef_passee)){
184                                if(isset($desc['field'][$cle]) and !in_array($cle,$exceptions_des_champs_auteurs_elargis)){
185                                        spip_log("INSCRIPTION 2 : suppression de $cle","inscription2");
186                                        $a = sql_alter('TABLE spip_auteurs_elargis DROP COLUMN '.$cle);
187                                        $desc['field'][$cle]='';
188                                }
189                                $clef_passee[] = $cle;
190                        }
191                }
192        }
193        if (!lire_config('plugin/SPIPLISTES')){
194                sql_drop_table('spip_auteurs_elargis');
195        }
196        if(!lire_config('spip_geo_base_version')
197        and !defined('_DIR_PLUGIN_GEOGRAPHIE')){
198                sql_drop_table('spip_geo_pays');
199                spip_log("INSCRIPTION 2 : suppression de la table spip_geo");
200        }
201        effacer_meta('inscription2');
202        effacer_meta('inscription2_version');
203        ecrire_metas();
204}
205
206
207// reinstaller la table de pays
208function i2_installer_pays() {
209        if (!defined('_DIR_PLUGIN_GEOGRAPHIE')) {
210                // 1) suppression de la table existante
211                // pour redemarrer les insert a zero
212                sql_drop_table("spip_geo_pays");
213                // 2) recreation de la table
214                include_spip('base/create');
215                creer_base();
216                // 3) installation des entrees
217                // importer les pays
218                include_spip('imports/pays');
219                include_spip('inc/charset');
220                foreach($GLOBALS['liste_pays'] as $k=>$p)
221                        sql_insertq('spip_geo_pays',array('id_pays'=>$k,'nom'=>unicode2charset(html2unicode($p))));
222        }
223}
224
225/**
226 * Surcharge de l'installe de SPIP par defaut
227 * car inscription2 gere une seconde meta pour tester son installation correcte.
228 */
229function inscription2_install($action){
230        $version_base = $GLOBALS['inscription2_version'];
231        switch ($action){
232                case 'test':
233                        if (!is_array(unserialize($GLOBALS['meta']['inscription2'])) OR !$GLOBALS['meta']['inscription2'] OR ($GLOBALS['meta']['inscription2']=='')){
234                                // Si cette meta n'est pas un array ... vaut mieux relancer l'ensemble du processus d'install
235                                return false;
236                        }
237                        return (isset($GLOBALS['meta']['inscription2_version']) AND ($GLOBALS['meta']['inscription2_version']>=$version_base));
238                        break;
239                case 'install':
240                        inscription2_upgrade();
241                        break;
242                case 'uninstall':
243                        inscription2_vider_tables();
244                        break;
245        }
246}
247?>
Note: See TracBrowser for help on using the repository browser.