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 | ?> |
---|