[90] | 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 | ?> |
---|