source: spip-zone/_plugins_/newsletters/trunk/newsletters_administrations.php

Last change on this file was 100510, checked in by cedric@…, 3 years ago

On peut preciser un nom/email d'envoi pour chaque newsletter

File size: 9.3 KB
Line 
1<?php
2/**
3 * Plugin Newsletters
4 * (c) 2012 Cedric Morin
5 * Licence GNU/GPL
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11/**
12 * Fonction d'installation du plugin et de mise à jour.
13**/
14function newsletters_upgrade($nom_meta_base_version, $version_cible) {
15        $maj = array();
16
17        $maj['create'] = array(
18                array('maj_tables', array('spip_newsletters', 'spip_newsletters_liens')),
19                array('newsletters_import_from_spiplistes'),
20                array('newsletters_import_from_spiplettres'),
21                array('newsletters_import_from_clevermail'),
22        );
23
24        $maj['0.1.1'] = array(
25                array('sql_alter', "table spip_newsletters ADD baked tinyint NOT NULL DEFAULT 0"),
26        );
27
28        $maj['0.2.1'] = array(
29                array('sql_alter', "table spip_newsletters ADD recurrence text NOT NULL DEFAULT ''"),
30                array('sql_alter', "table spip_newsletters ADD email_test text NOT NULL DEFAULT ''"),
31                array('sql_alter', "table spip_newsletters ADD liste text NOT NULL DEFAULT ''"),
32        );
33        $maj['0.3.0'] = array(
34                array('maj_tables', array('spip_newsletters')),
35        );
36
37        include_spip('base/upgrade');
38        maj_plugin($nom_meta_base_version, $version_cible, $maj);
39}
40
41
42/**
43 * Fonction de désinstallation du plugin.
44**/
45function newsletters_vider_tables($nom_meta_base_version) {
46
47        sql_drop_table("spip_newsletters");
48        sql_drop_table("spip_newsletters_liens");
49
50        # Nettoyer les versionnages et forums
51        sql_delete("spip_versions",              sql_in("objet", array('newsletter')));
52        sql_delete("spip_versions_fragments",    sql_in("objet", array('newsletter')));
53        sql_delete("spip_forum",                 sql_in("objet", array('newsletter')));
54
55        effacer_meta($nom_meta_base_version);
56}
57
58
59
60
61/**
62 * Importe les lettres du plugin SPIP Listes
63 *
64 * @note
65 *     Très proche de l'import fait par 'mailshot' également.
66 *
67 * @return void|null
68**/
69function newsletters_import_from_spiplistes(){
70        $trouver_table = charger_fonction("trouver_table","base");
71        if ($desc = $trouver_table('spip_courriers')){
72
73                include_spip('inc/charsets');
74                include_spip("action/editer_objet");
75
76                sql_alter("TABLE spip_courriers ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
77                $res = sql_select(
78                        "C.id_courrier,C.titre as sujet, C.texte as html, C.message_texte as texte," .
79                        "C.date_fin_envoi as date,C.date_debut_envoi as date_start, C.statut AS statut",
80                        'spip_courriers AS C',"C.id_newsletter=0 AND C.total_abonnes>0 AND ".sql_in("C.type",array('nl','auto')));
81                while ($row = sql_fetch($res)){
82
83                        $id_courrier = $row['id_courrier'];
84                        unset($row['id_courrier']);
85
86                        // nettoyer les vieux hacks de spip-listes
87                        $row['html'] = preg_replace(",__bLg__[0-9@\.A-Z_-]+__bLg__,","",$row['html']);
88
89                        if ($GLOBALS['meta']['charset']=='utf-8'){
90                                if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
91                                if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
92                                if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
93                        }
94
95                        // id dans mailshot
96                        $hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));
97
98                        // remettre le format pour newsletter.
99                        $row['titre']        = $row['sujet'];
100                        $row['texte_email']  = $row['texte'];
101                        $row['html_email']   = $row['html'];
102                        $row['html_page']    = $row['html'];
103                        unset($row['sujet'], $row['texte'], $row['html'], $row['id'], $row['date_start']);
104                        if ($row['statut']=="auto")
105                                $row['statut'] = "publie";
106                        if (!in_array($row['statut'],array("publie","prop","prepa")))
107                                $row['statut'] = 'publie';
108                        $row['baked'] = 1;
109
110                        // inserer la lettre dans newsletter
111                        if ($id_newsletter = newsletters_import_one($row)){
112                                sql_updateq("spip_courriers",array('id_newsletter'=>$id_newsletter),"id_courrier=".intval($id_courrier));
113                                sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
114                                spip_log("import from spip_listes newsletters $id_newsletter ".var_export($row,true),"newsletters");
115                        }
116
117                        // timeout ? on reviendra
118                        if (time() >= _TIME_OUT)
119                                return;
120                }
121                sql_alter("TABLE spip_courriers DROP id_newsletter");
122        }
123}
124
125
126
127/**
128 * Importe les lettres & abonnés du plugin SPIP Lettres
129 *
130 * @note
131 *     Très proche de l'import fait par 'mailshot' également.
132 *
133 * @return void|null
134**/
135function newsletters_import_from_spiplettres(){
136        $trouver_table = charger_fonction("trouver_table","base");
137        if ($trouver_table('spip_lettres')
138          AND $trouver_table('spip_abonnes_lettres')){
139
140                include_spip('inc/charsets');
141                include_spip("action/editer_objet");
142
143                // importer les envois
144                sql_alter("TABLE spip_lettres ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
145                $res = sql_select(
146                        "id_lettre,titre as sujet,message_html as html,message_texte as texte,date_fin_envoi as date,date_debut_envoi as date_start",
147                        'spip_lettres',"id_newsletter=0 AND statut=".sql_quote('envoyee'));
148                while ($row = sql_fetch($res)){
149
150                        $id_lettre = $row['id_lettre'];
151                        unset($row['id_lettre']);
152
153                        if ($GLOBALS['meta']['charset']=='utf-8'){
154                                if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
155                                if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
156                                if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
157                        }
158
159                        // id dans mailshot
160                        $hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));
161
162                        $row['statut'] = 'publie';
163
164                        // remettre le format pour newsletter.
165                        $row['titre']        = $row['sujet'];
166                        $row['texte_email']  = $row['texte'];
167                        $row['html_email']   = $row['html'];
168                        $row['html_page']    = $row['html'];
169                        unset($row['sujet'], $row['texte'], $row['html'], $row['date_start']);
170                        $row['baked'] = 1;
171
172                        if ($id_newsletter = newsletters_import_one($row)){
173                                sql_updateq("spip_lettres",array('id_newsletter'=>$id_newsletter),"id_lettre=".intval($id_lettre));
174                                sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
175                                spip_log("import from spip_lettres newsletters $id_newsletter ".var_export($row,true),"newsletters");
176                        }
177
178                        // timeout ? on reviendra
179                        if (time() >= _TIME_OUT)
180                                return;
181                }
182
183                // et c'est tout !
184                sql_alter("TABLE spip_lettres DROP id_newsletter");
185        }
186}
187
188
189/**
190 * Importe les lettres du plugin Clevermail
191 *
192 * @note
193 *     Très proche de l'import fait par 'mailshot' également.
194 *
195 * @return void|null
196**/
197function newsletters_import_from_clevermail(){
198        $trouver_table = charger_fonction("trouver_table","base");
199        if ($trouver_table('spip_cm_posts')
200          AND $trouver_table('spip_cm_posts_done')) {
201                spip_log('Import des lettres clevermail', 'newsletters');
202
203                include_spip("inc/charsets");
204                include_spip("action/editer_objet");
205
206                // Importer les lettres
207                // ajout d'un champ le temps de l'import. Évite d'attraper 2 fois une même lettre et de reprendre sur timeout.
208                sql_alter("TABLE spip_cm_posts ADD id_newsletter bigint(21) NOT NULL DEFAULT 0");
209                $res = sql_select(array(
210                        "C.pst_id",
211                        "C.pst_subject AS sujet",
212                        "C.pst_html AS html",
213                        "C.pst_text AS texte",
214                        "C.pst_date_create AS date",
215                        "C.pst_date_sent AS date_start",
216                        ),
217                        'spip_cm_posts AS C',
218                        "C.id_newsletter=0");
219                while ($row = sql_fetch($res)){
220
221                        $pst_id = $row['pst_id'];
222                        unset($row['pst_id']);
223
224                        // Tant qu'à faire, remplacer des mauvais restes
225                        $row['html']  = str_replace('@@NOM_LETTRE@@', $row['sujet'], $row['html']);
226                        $row['texte'] = str_replace('@@NOM_LETTRE@@', $row['sujet'], $row['texte']);
227
228                        if ($GLOBALS['meta']['charset']=='utf-8'){
229                                if (!is_utf8($row['sujet'])) $row['sujet'] = importer_charset($row['sujet'] ,'iso-8859-15');
230                                if (!is_utf8($row['html']))  $row['html']  = importer_charset($row['html']  ,'iso-8859-15');
231                                if (!is_utf8($row['texte'])) $row['texte'] = importer_charset($row['texte'] ,'iso-8859-15');
232                        }
233
234                        // id dans mailshot
235                        $hash_id = md5(serialize(array('sujet'=>&$row['sujet'],'html'=>&$row['html'],'texte'=>&$row['texte'])));
236
237                        // corriger les dates actuellement en time
238                        $row['date']       = date('Y-m-d H:i:s', $row['date']);
239                        #$row['date_start'] = date('Y-m-d H:i:s', $row['date_start']);
240
241                        $row['statut'] = 'publie';
242
243                        // remettre le format pour newsletter.
244                        $row['titre']        = $row['sujet'];
245                        $row['texte_email']  = $row['texte'];
246                        $row['html_email']   = $row['html'];
247                        $row['html_page']    = $row['html'];
248                        unset($row['sujet'], $row['texte'], $row['html'], $row['date_start']);
249                        $row['baked'] = 1;
250
251                        // inserer la lettre dans newsletter
252                        if ($id_newsletter = newsletters_import_one($row)){
253                                sql_updateq("spip_cm_posts", array('id_newsletter'=>$id_newsletter), "pst_id=".intval($pst_id));
254                                sql_updateq("spip_mailshots", array('id'=>$id_newsletter), "id=".sql_quote($hash_id));
255                                spip_log("import from spip_cm_posts newsletter $id_newsletter ".var_export($row,true),"newsletters");
256                        }
257
258                        // timeout ? on reviendra
259                        if (time() >= _TIME_OUT)
260                                return;
261                }
262
263                // C'est fini !
264                sql_alter("TABLE spip_cm_posts DROP id_newsletter");
265        }
266
267}
268
269
270/**
271 * Insère une newsletter en base
272 *
273 * @param array $set
274 *     Couples de données à enregistrer
275 * @return int
276 *     Identifiant de la newsletter
277**/
278function newsletters_import_one($set){
279        include_spip("inc/drapeau_edition");
280        $id = objet_inserer("newsletter",0,$set);
281        objet_modifier("newsletter",$id,$set); // double detente
282        debloquer_tous($GLOBALS['visiteur_session']['id_auteur']);
283        return $id;
284}
285
286
287?>
Note: See TracBrowser for help on using the repository browser.