source: trunk/spip/esqueleto-redcta/plugins/spip-listes_1_9_2/base/spiplistes_upgrade.php @ 358

Last change on this file since 358 was 90, checked in by guille, 15 years ago

importacion de spip-listes-1_9_2

File size: 13.3 KB
Line 
1<?php
2
3/******************************************************************************************/
4/* SPIP-listes est un système de gestion de listes d'information par email pour SPIP      */
5/* Copyright (C) 2004 Vincent CARON  v.caron<at>laposte.net , http://bloog.net            */
6/*                                                                                        */
7/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
8/* de la Licence Publique Générale GNU publiée par la Free Software Foundation            */
9/* (version 2).                                                                           */
10/*                                                                                        */
11/* Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE,       */
12/* ni explicite ni implicite, y compris les garanties de commercialisation ou             */
13/* d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU  */
14/* pour plus de détails.                                                                  */
15/*                                                                                        */
16/* Vous devez avoir reçu une copie de la Licence Publique Générale GNU                    */
17/* en même temps que ce programme ; si ce n'est pas le cas, écrivez à la                  */
18/* Free Software Foundation,                                                              */
19/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis.                   */
20/******************************************************************************************/
21
22        //version actuelle du plugin à changer en cas de maj
23        $GLOBALS['spiplistes_version'] = 1.98;
24       
25       
26        //initialiser les variables
27                if (!isset($GLOBALS['meta']['spiplistes_lots'])){
28                ecrire_meta('spiplistes_lots' , 30) ;
29                ecrire_metas();
30                }
31               
32                if (!isset($GLOBALS['meta']['spiplistes_charset_envoi'])){
33                ecrire_meta('spiplistes_charset_envoi' , 'iso-8859-1') ;
34                ecrire_metas();
35                }
36
37                if (!isset($GLOBALS['meta']['mailer_smtp'])){
38                ecrire_meta('mailer_smtp' , 'non') ;
39                ecrire_metas();
40                }
41               
42                if(!$abonnement_config = $GLOBALS['meta']['abonnement_config']){
43                ecrire_meta('abonnement_config', 'simple');
44                ecrire_metas();
45                }
46               
47        function spip_listes_upgrade_from_18(){
48                $trans_messages_couriers = array();
49                // regarder si des newsletter existent
50                $res = spip_query("SELECT * FROM spip_messages WHERE type='nl'");
51                if(@spip_num_rows($res) > 0) {
52                        echo "[spip_courriers] "._T('spiplistes:mettre_a_jour');
53                        while ($row = spip_fetch_array($res)){
54                                $result = spip_query("INSERT INTO spip_courriers (titre, texte, date, statut, type, id_auteur) VALUES ("
55                                ._q($row['titre']).","
56                                ._q($row['texte']).","
57                                ._q($row['date_heure']).","
58                                ._q($row['statut']).","
59                                ._q($row['type']).","
60                                ._q($row['id_auteur']).")");
61                                $trans_messages_couriers[$row['id_message']]= spip_insert_id();
62                        }
63                        //spip_query("DELETE FROM spip_messages WHERE type='nl'");
64                }
65
66                //Migrer des listes anciennes listes
67                $resultat_aff = spip_query("SELECT * FROM spip_articles WHERE statut='liste' OR statut='inact' OR statut='poublist'");
68                if(@spip_num_rows($resultat_aff) > 0){
69                        echo "[spip_listes] "._T('spiplistes:mettre_a_jour');
70                        while ($row = spip_fetch_array($resultat_aff)) {
71                                $id_article=$row['id_article'];
72                                $titre_liste=corriger_caracteres($row['titre']);
73                                $texte_liste = corriger_caracteres($row['texte']);
74                                $date_liste = $row['date'];
75                                $langue=$row["lang"];
76                                $statut = $row['statut'];
77                                $extra=unserialize($row['extra']);
78                                $patron_liste=$extra["squelette"];
79                                $periode_liste=$extra["periode"];
80                                $maj_liste=$extra["majnouv"];
81                                $email_envoi=$extra["email_envoi"];
82                                $message_auto=$extra["auto"];
83                                $options="<p>".$titre_liste."<br/>";
84                                echo $options."</p>";
85                               
86                                // ajout du pied de page
87                                include_spip('public/assembler');
88                                $contexte_pied = array('lang'=>$langue);
89                                $pied = recuperer_fond('modeles/piedmail', $contexte_pied);
90                               
91                                spip_query("INSERT INTO spip_listes (titre, texte, statut, date, lang, pied_page) VALUES ("
92                                        ._q($titre_liste).","._q($texte_liste).","._q($statut).","._q($date_liste).","._q($langue).","._q($pied).")" );
93                                $id_liste=spip_insert_id();
94                                if($message_auto=="oui")
95                                        spip_query("UPDATE spip_listes SET patron="._q($patron_liste).", periode="._q($periode_liste)
96                                          . ", maj=FROM_UNIXTIME("._q($maj_liste)."), email_envoi="._q($email_envoi)
97                                          . ", message_auto="._q($message_auto)." WHERE id_liste="._q($id_liste));
98                               
99                                //Auteur de la liste (moderateur)
100                                spip_query("DELETE FROM spip_auteurs_mod_listes WHERE id_liste ="._q($id_liste));
101                                spip_query("INSERT INTO spip_auteurs_mod_listes (id_auteur, id_liste) VALUES ("._q($connect_id_auteur).","._q($id_liste).")");
102                               
103                                //recuperer les abonnes (peut etre plus tard ?)
104                                $abos=spip_query("SELECT id_auteur, id_article FROM spip_auteurs_articles WHERE id_article="._q($id_article));
105                                while($abonnes=spip_fetch_array($abos)){
106                                        $abo=$abonnes["id_auteur"];
107                                        spip_query("INSERT INTO spip_auteurs_listes (id_auteur, id_liste) VALUES ("._q($abo).","._q($id_liste).")");
108                                }
109                               
110                                //effacer les anciens articles/abo
111                                #spip_query("DELETE FROM spip_articles WHERE id_article ="._q($id_article));
112                                #spip_query("DELETE FROM spip_auteurs_articles WHERE id_article ="._q($id_article));
113       
114                                //manque un traitement pour récuperer les courriers
115                        }
116                }
117               
118                //evaluer les extras de tous les auteurs et les virer
119                $result = spip_query('SELECT extra, id_auteur FROM spip_auteurs');
120                while ($row = spip_fetch_array($result)) {
121                        $abo = unserialize($row['extra']);
122                        if (is_array($abo)
123                          && isset($abo['abo'])
124                          && ($format = $abo['abo'])
125                          && ($format=="texte" OR $format=="html")){
126                                        spip_query("INSERT INTO spip_auteurs_elargis (id_auteur, `spip_listes_format`) VALUES ("._q($row['id_auteur']).","._q($format).") ");
127                          }
128                }
129               
130                echo _T('spiplistes:regulariser');
131
132                $result = spip_query("SELECT a.`email`, a.id_auteur FROM `spip_auteurs` a, `spip_auteurs_listes` l, `spip_auteurs_elargis` f
133                        WHERE a.id_auteur=f.id_auteur
134                        AND f.spip_listes_format = 'non'
135                        AND a.id_auteur = l.id_auteur
136                        AND a.statut!='5poubelle'
137                        GROUP BY email");
138               
139                while($res = spip_fetch_array($result)){
140                        spip_query("DELETE FROM spip_auteurs_listes WHERE id_auteur =".$res['id_auteur']) ;                     
141                } 
142        }
143       
144        function spiplistes_verifier_base(){
145               
146                //activer si besoin l'inscription des visiteurs
147                $accepter_visiteurs = lire_meta('accepter_visiteurs');
148                        if($accepter_visiteurs != 'oui'){
149                                $accepter_visiteurs = 'oui';
150                                ecrire_meta("accepter_visiteurs", $accepter_visiteurs);
151                                ecrire_metas();
152                                echo _T('spiplistes:autorisation_inscription');
153                        }
154               
155                //install
156                $version_base = $GLOBALS['spiplistes_version'];
157               
158                // Comparaison de la verison actuelle avec la version installee ($GLOBALS['meta']['spiplistes_version'])
159                $current_version = 0.0;
160                if (   (!isset($GLOBALS['meta']['spiplistes_version']) )
161                                || (($current_version = $GLOBALS['meta']['spiplistes_version'])!=$version_base)){
162                        include_spip('base/spip-listes');
163                       
164                        // si etait deja installe mais dans une vieille version, on reprend a zero
165                        include_spip('base/abstract_sql');
166                        $desc = spip_abstract_showtable("spip_listes", '', true);
167                        if (!isset($desc['field']['id_liste']))
168                                $current_version = 0.0;
169                        if (
170                                ($res=spip_query("SELECT * FROM spip_articles WHERE statut='liste' OR statut='inact' OR statut='poublist'"))
171                                AND ($row = spip_fetch_array($res)) )
172                                $current_version=0.0;
173
174                        if ($current_version==0.0){
175                                // Verifie que les tables spip_listes existent, sinon les creer
176                                spip_log('creation des tables spip_listes');
177                                include_spip('base/create');
178                                include_spip('base/abstract_sql');
179                                creer_base();
180                                spip_listes_upgrade_from_18(); // faire les eventuels imports depuis la contrib 1.8
181                                ecrire_meta('spiplistes_version',$current_version=$version_base,'non');
182                        }
183                       
184                        if ($current_version<1.92){
185                                echo "SpipListes Maj 1.92<br />";
186                                spip_query("ALTER TABLE spip_listes ADD titre_message varchar(255) NOT NULL default '';");
187                                spip_query("ALTER TABLE spip_listes ADD pied_page longblob NOT NULL;");
188                                ecrire_meta('spiplistes_version', $current_version=1.92);
189                        }
190                        if ($current_version<1.94){
191                                echo "SpipListes Maj 1.94<br />";
192                                include_spip('base/abstract_sql');
193                                if (($res=spip_query("SELECT id_auteur FROM spip_auteurs_mod_listes"))
194                                        AND (!spip_fetch_array($res))
195                                  AND ($desc = spip_abstract_showtable("spip_abonnes_listes", '', true))
196                                  AND isset($desc['field']['id_auteur'])) {
197                                        spip_query("DROP TABLE spip_auteurs_mod_listes"); // elle vient d'etre cree par un creer_base inopportun
198                                        spip_query("DROP TABLE spip_auteurs_courriers"); // elle vient d'etre cree par un creer_base inopportun
199                                }
200                                spip_query("ALTER TABLE spip_auteurs_listes RENAME spip_auteurs_mod_listes;");
201                                spip_query("ALTER TABLE spip_abonnes_listes RENAME spip_auteurs_listes;");
202                                spip_query("ALTER TABLE spip_abonnes_courriers RENAME spip_auteurs_courriers;");
203                                ecrire_meta('spiplistes_version', $current_version=1.94);
204                        }
205                        if ($current_version<1.95){
206                                echo "SpipListes Maj 1.95<br />";
207                                include_spip('base/abstract_sql');
208                                spip_query("ALTER TABLE spip_auteurs_courriers ADD etat varchar(5) NOT NULL default '' AFTER statut");
209                                ecrire_meta('spiplistes_version', $current_version=1.95);
210                        }
211                       
212                        if ($current_version<1.96){
213                                echo "SpipListes Maj 1.96<br />";
214                                include_spip('base/abstract_sql');
215                               
216                                //installer la table spip_auteurs_elargis si besoin
217                                $table_nom = "spip_auteurs_elargis";
218                                spip_query("CREATE TABLE IF NOT EXISTS ".$table_nom." (
219                                `id_auteur` BIGINT NOT NULL ,
220                                `spip_listes_format` VARCHAR( 8 ) DEFAULT 'non' NOT NULL
221                                 ) ");
222                               
223                                //evaluer les extras de tous les auteurs + compter tous les auteurs
224                                $result = spip_query(
225                                  'SELECT extra, spip_auteurs.id_auteur FROM spip_auteurs');
226                                $nb_inscrits = 0;
227                       
228                                //repartition des extras
229                                $cmpt = array('texte'=>0, 'html'=>0, 'non'=>0);
230                               
231                                while ($row = spip_fetch_array($result, SPIP_NUM)) {
232                                        $nb_inscrits ++ ;
233                                        $abo = unserialize($row[0]);
234                                        $format = $abo['abo'] ;
235                                if($format=="texte" OR $format=="html")
236                                spip_query("INSERT INTO `spip_auteurs_elargis` (`id_auteur`, `spip_listes_format`)
237                                VALUES ("._q($row[1]).","._q($format).") ");
238                                else
239                                spip_query("INSERT INTO `spip_auteurs_elargis` (`id_auteur`, `spip_listes_format`)
240                                VALUES ("._q($row[1]).","._q('non').") ");
241                               
242                                        if ($abo['abo']) {
243                                                $cmpt[$abo['abo']] ++;
244                                        }
245                                }
246                               
247                                echo "<br />html : ".$cmpt['html']." <br />texte : ".$cmpt['texte']."<br />non : ".$cmpt['non']."<br />somme :".$nb_inscrits  ;
248       
249                                ecrire_meta('spiplistes_version', $current_version=1.96);
250                        }
251                       
252                        if ($current_version<1.97){
253                                echo "SpipListes Maj 1.97<br />";
254                                include_spip('base/abstract_sql');
255
256                        echo "regulariser les desabonnes avec listes...<br />";
257
258                        $result = spip_query("SELECT a.`email`, a.id_auteur FROM `spip_auteurs` a, `spip_auteurs_listes` l, `spip_auteurs_elargis` f
259                        WHERE a.id_auteur=f.id_auteur
260                        AND f.spip_listes_format = 'non'
261                        AND a.id_auteur = l.id_auteur
262                        AND a.statut!='5poubelle'
263                        GROUP BY email
264                        ");
265                       
266                        $nb_inscrits = spip_num_rows($result);
267                        echo $nb_inscrits ;
268                       
269                        while($res = spip_fetch_array($result)){
270                        spip_query("DELETE FROM spip_auteurs_listes WHERE id_auteur =".$res['id_auteur']) ;                     
271                        } 
272
273
274                                ecrire_meta('spiplistes_version', $current_version=1.97);
275                        }
276                       
277                       
278                        if ($current_version<1.98){
279                               
280                                echo "SpipListes Maj 1.98<br />";
281                                include_spip('base/abstract_sql');
282                       
283                        echo "regulariser l'index";
284                        $table_nom = "spip_auteurs_elargis";
285                        //ajout des index
286                        $desc = spip_abstract_showtable($table_nom, '', true);
287                        if($desc['key']['PRIMARY KEY']!='id'){
288                                spip_query("ALTER TABLE ".$table_nom." DROP PRIMARY KEY");
289                                        if(!isset($desc['fields']['id']))
290                                        spip_query("ALTER TABLE ".$table_nom." ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY");
291                                        else 
292                                        spip_query("ALTER TABLE ".$table_nom." ADD PRIMARY KEY (id)");
293                        }
294                        if($desc['key']['KEY id_auteur'])
295                        spip_query("ALTER TABLE ".$table_nom." DROP INDEX id_auteur, ADD INDEX id_auteur (id_auteur)");
296                        else
297                        spip_query("ALTER TABLE ".$table_nom." ADD INDEX id_auteur (id_auteur)");
298                       
299                        ecrire_meta('spiplistes_version', $current_version=1.98);
300                        }
301                       
302                        ecrire_metas();
303                }
304        spip_log("spip-listes $current_version","spiplistes");
305        }
306       
307        function spiplistes_vider_tables() {
308                include_spip('base/agenda_evenements');
309                include_spip('base/abstract_sql');
310                // suppression du champ evenements a la table spip_groupe_mots
311                spip_query("DROP TABLE spip_courriers");
312                spip_query("DROP TABLE spip_listes");
313                spip_query("DROP TABLE spip_auteurs_courriers");
314                spip_query("DROP TABLE spip_auteurs_listes");
315                spip_query("DROP TABLE spip_auteurs_mod_listes");
316                effacer_meta('spiplistes_version');
317                effacer_meta('spiplistes_charset_envoi');
318                effacer_meta('spiplistes_lots');
319                effacer_meta('abonnement_config');
320                ecrire_metas();
321        }
322       
323        function spiplistes_install($action){
324                $version_base = $GLOBALS['spiplistes_version'];
325                switch ($action){
326                        case 'test':
327                                return (isset($GLOBALS['meta']['spiplistes_version']) 
328                                  AND ($GLOBALS['meta']['spiplistes_version']>=$version_base));
329                                break;
330                        case 'install':
331                                spiplistes_verifier_base();
332                                break;
333                        case 'uninstall':
334                                spiplistes_vider_tables();
335                                break;
336                }
337        }       
338?>
Note: See TracBrowser for help on using the repository browser.