source: spip-zone/_plugins_/spip-lettres/classes/abonne.php @ 48782

Last change on this file since 48782 was 48782, checked in by n.pavot@…, 10 years ago

De nouveaux paramètres sont désormais accessibles sur spip-lettres :

  • pour chaque thématique, on peut définir l'expéditeur ainsi que l'adresse e-mail qui recevra les retours en erreur

4 cas sont possibles :
1-défaut(facteur ou site)
2-webmaster
3-auteur de la lettre
4-un des auteurs/admins (0minirezo)

  • il est aussi possible de paramétrer dans la configuration avancée de spip-lettres, la personne qui recevra les notifications de désabonnements (webmaster ou un admin sélectionné).
  • N.B. : cette nouvelle version de spip-lettres nécessite les plugins YAML et saisies
File size: 23.6 KB
Line 
1<?php
2
3
4        /**
5         * SPIP-Lettres
6         *
7         * Copyright (c) 2006-2009
8         * Agence Artégo http://www.artego.fr
9         * 
10         * Ce programme est un logiciel libre distribue sous licence GNU/GPLv3.
11         * Pour plus de details voir http://www.gnu.org/licenses/gpl-3.0.html
12         * 
13         **/
14
15
16        include_spip('lettres_fonctions');
17        include_spip('public/assembler');
18        include_spip('inc/distant');
19        include_spip('inc/rubriques');
20        include_spip('base/lettres');
21        include_spip('classes/lettre');
22
23        /**
24         * abonne - classe pour la gestion des abonnes
25         *
26         * @copyright 2006-2009 Artégo
27         */
28
29        class abonne {
30
31                var $id_abonne;
32                var $objet = 'abonnes';
33                var $id_objet;
34                var $email;
35                var $code;
36                var $nom;
37                var $format = 'mixte';
38                var $extra;
39
40                var $existe = false;
41
42
43                /**
44                 * abonne : constructeur
45                 *
46                 * @param int id_abonne
47                 * @param string email
48                 * @return void
49                 **/
50                function abonne($id_abonne=0, $email='') {
51                        global $table_des_abonnes;
52                        if (intval($id_abonne) != 0) {
53                                $this->id_abonne = intval($id_abonne);
54                                $spip_abonne = sql_select('*', 'spip_abonnes', 'id_abonne='.$this->id_abonne);
55                                if (sql_count($spip_abonne) == 1) {
56                                        $abo = sql_fetch($spip_abonne);
57                                        $table                  = $table_des_abonnes[$abo['objet']]['table'];
58                                        $champ_email    = $table_des_abonnes[$abo['objet']]['champ_email'];
59                                        $champ_id               = $table_des_abonnes[$abo['objet']]['champ_id'];
60                                        $champ_nom              = $table_des_abonnes[$abo['objet']]['champ_nom'];
61                                        $obj = sql_select('OBJ.'.$champ_email.' AS email, '.(empty($champ_nom) ? '' : ' OBJ.'.$champ_nom.' AS nom, ').'OBJ.'.$champ_id.' AS id_objet', 'spip_'.$table.' AS OBJ', 'OBJ.'.$champ_id.'='.$abo['id_objet']);
62                                        if (sql_count($obj) == 1) {
63                                                $arr = sql_fetch($obj);
64                                                $this->existe           = true;
65                                                $this->objet            = $abo['objet'];
66                                                $this->id_objet         = $abo['id_objet'];
67                                                $this->email            = $arr['email'];
68                                                $this->code                     = $abo['code'];
69                                                $this->nom                      = $arr['nom'];
70                                                $this->format           = $abo['format'];
71                                                $this->extra            = $abo['extra'];
72                                                $this->maj                      = $abo['maj'];
73                                        }
74                                }
75                        } else if ($email AND lettres_verifier_validite_email($email)) {
76                                $this->email = $email;
77                                foreach ($table_des_abonnes as $valeur) {
78                                        $spip_objets = @sql_select('*', 'spip_'.$valeur['table'], $valeur['champ_email'].'='.sql_quote($this->email));
79                                        if ($arr = sql_fetch($spip_objets)) {
80                                                $this->nom                      = $arr[$valeur['champ_nom']];
81                                                $this->objet            = $valeur['table'];
82                                                $this->id_objet         = $arr[$valeur['champ_id']];
83                                                $spip_abonnes = sql_select('*', 'spip_abonnes', 'objet="'.$valeur['table'].'" AND id_objet='.$arr[$valeur['champ_id']]);
84                                                if (sql_count($spip_abonnes) == 1) {
85                                                        $abo = sql_fetch($spip_abonnes);
86                                                        $this->id_abonne        = $abo['id_abonne'];
87                                                        $this->code                     = $abo['code'];
88                                                        $this->format           = $abo['format'];
89                                                        $this->extra            = $abo['extra'];
90                                                        $this->maj                      = $abo['maj'];
91                                                        $this->existe           = true;
92                                                        break;
93                                                }
94                                        }
95                                }
96                        }
97                }
98
99
100                function enregistrer() {
101                        global $table_des_abonnes;
102                        if ($this->existe) {
103                                sql_updateq('spip_abonnes', array('format' => $this->format), 'id_abonne='.$this->id_abonne);
104                                if ($this->objet == 'abonnes')
105                                        sql_updateq('spip_abonnes', array('nom' => ucwords($this->nom), 'email' => strtolower($this->email)), 'id_abonne='.$this->id_abonne);
106                        } else {
107                                foreach ($table_des_abonnes as $valeur) {
108                                        $spip_objets = @sql_select('*', 'spip_'.$valeur['table'], $valeur['champ_email'].'='.sql_quote($this->email));
109                                        if (@sql_count($spip_objets) == 1) {
110                                                $arr = sql_fetch($spip_objets);
111                                                $this->objet    = $valeur['table'];
112                                                $this->id_objet = $arr[$valeur['champ_id']];
113                                                break;
114                                        }
115                                }
116                                $this->code = md5(uniqid(rand()));
117                                $this->id_abonne = sql_insertq('spip_abonnes', 
118                                                                                                array(
119                                                                                                        'objet' => $this->objet, 
120                                                                                                        'code' => $this->code, 
121                                                                                                        'format' => $this->format
122                                                                                                        )
123                                                                                                );
124
125                                if (!intval($this->id_objet))
126                                        $this->id_objet = $this->id_abonne;
127                                sql_updateq('spip_abonnes', array('id_objet' => intval($this->id_objet)), 'id_abonne='.intval($this->id_abonne));
128                                if ($this->objet == 'abonnes') {
129                                        sql_updateq('spip_abonnes', array('email' => strtolower($this->email), 'nom' => ucwords($this->nom)), 'id_abonne='.intval($this->id_abonne));
130                                }
131                                $req = sql_select('*', 'spip_abonnes_statistiques', 'periode="'.date('Y-m').'"');
132                                if (sql_count($req) == 0)
133                                        sql_insertq('spip_abonnes_statistiques', array('periode' => date('Y-m')));
134                                sql_update('spip_abonnes_statistiques', array('nb_inscriptions' => 'nb_inscriptions+1'), 'periode="'.date('Y-m').'"');
135                        }
136                        $this->existe = true;
137                        $this->enregistrer_champs_extra();
138                        $this->enregistrer_maj();
139                }
140
141
142                function enregistrer_statut($statut) {
143                        $ancien_statut = $this->statut;
144                        switch ($statut) {
145                                case 'valider':
146                                        $this->valider_abonnements_en_attente();
147                                        $redirection = generer_url_ecrire('abonnes', 'id_abonne='.$this->id_abonne, true);
148                                        break;
149                                case 'poubelle':
150                                        $this->supprimer();
151                                        $redirection = generer_url_ecrire('abonnes_tous');
152                                        break;
153                        }
154                        return $redirection;
155                }
156
157
158                function enregistrer_champs_extra($manuellement=false) {
159                        if (!$manuellement) {
160                                if ($champs_extra = $GLOBALS['champs_extra']['abonnes']) {
161                                        $extra = array();
162                                        foreach ($champs_extra as $cle => $valeur) {
163                                                $extra[$cle] = _request('suppl_'.$cle);
164                                        }
165                                        $this->extra = serialize($extra);
166                                }
167                        }
168                        sql_updateq('spip_abonnes', array('extra' => $this->extra), 'id_abonne='.intval($this->id_abonne));
169                }
170               
171               
172                function enregistrer_maj() {
173                        sql_updateq('spip_abonnes', array('maj' => 'NOW()'), 'id_abonne='.intval($this->id_abonne));
174                }
175               
176               
177                function enregistrer_abonnement($id_rubrique=0) {
178                        include_spip('inc/autoriser');
179                        if (autoriser('abonner','rubrique',$id_rubrique) OR lettres_rubrique_autorisee($id_rubrique)) {
180                                if (sql_countsel('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND id_rubrique='.intval($id_rubrique)))
181                                        sql_updateq('spip_abonnes_rubriques', array('statut' => 'a_valider', 'date_abonnement' => 'NOW()'), 'id_abonne='.intval($this->id_abonne).' AND id_rubrique='.intval($id_rubrique));
182                                else
183                                        sql_insertq('spip_abonnes_rubriques', array('id_abonne' => intval($this->id_abonne), 'id_rubrique' => intval($id_rubrique), 'statut' => 'a_valider', 'date_abonnement' => 'NOW()'));
184                                $this->enregistrer_maj();
185                        }
186                }
187
188
189                function enregistrer_format($format) {
190                        $this->format = $format;
191                        sql_updateq('spip_abonnes', array('format' => $this->format), 'id_abonne='.intval($this->id_abonne));
192                        $this->enregistrer_maj();
193                }
194
195
196                function enregistrer_envoi($id_lettre, $resultat) {
197                        static $mois = null;
198                        $statut = $resultat?'envoye':'echec';
199                       
200                        if (sql_countsel('spip_abonnes_lettres', 'id_abonne='.intval($this->id_abonne).' AND id_lettre='.intval($id_lettre)))
201                                sql_updateq('spip_abonnes_lettres', array('statut' => $statut, 'format' => $this->format, 'maj' => 'NOW()'), 'id_abonne='.intval($this->id_abonne).' AND id_lettre='.intval($id_lettre));
202                        else
203                                sql_insertq('spip_abonnes_lettres', array('id_abonne' => intval($this->id_abonne), 'id_lettre' => intval($id_lettre), 'statut' => $statut, 'format' => $this->format, 'maj' => 'NOW()'));
204
205                        if (!$mois) {
206                                $mois = date('Y-m');
207                                if (!sql_countsel('spip_lettres_statistiques', 'periode='.sql_quote($mois)))
208                                        sql_insertq('spip_lettres_statistiques', array('periode' => $mois,'nb_envois'=>0));
209                        }
210                        sql_update('spip_lettres_statistiques', array('nb_envois' => 'nb_envois+1'), 'periode='.sql_quote($mois));
211                }
212
213
214                function enregistrer_clic($id_clic) {
215                        $verification_url = sql_select('url, id_lettre', 'spip_clics', 'id_clic='.intval($id_clic));
216                        if (sql_count($verification_url) == 1) {
217                                $url = sql_fetch($verification_url);
218                                $redirection = $url['url'];
219                                $id_lettre = intval($url['id_lettre']);
220                        };
221                        if ($GLOBALS['meta']['spip_lettres_cliquer_anonyme']=='non') {
222                                $verification_abonne = sql_select('C.url', 'spip_clics AS C INNER JOIN spip_abonnes_lettres AS AL ON AL.id_lettre=C.id_lettre', 'AL.id_abonne='.intval($this->id_abonne).' AND C.id_clic='.intval($id_clic));
223                                if (sql_count($verification_abonne) == 1) {
224                                        sql_insertq('spip_abonnes_clics', array('id_abonne' => $this->id_abonne, 'id_clic' => intval($id_clic), 'id_lettre' => $id_lettre)); // le champ id_lettre pourrait être supprimé de la bdd, mais comme il est là on le renseigne
225                                        $urldeja = $url;
226                                        $url = sql_fetch($verification_abonne);         // inutile semblerait-il
227                                        $redirection = $url['url'];                             // inutile semblerait-il
228                                        if ($urldeja != $url)                                           // pour détecter si jamais c'est utile
229                                                spip_log ("Ya un truc à piger dans spip-lettres : urldeja=$urldeja different de url=$url", "enquete"); 
230                                        $this->enregistrer_maj();
231                                }
232                        } else  // on enregistre tout sur le compte du non-abonné '0'
233                                sql_insertq('spip_abonnes_clics', array('id_abonne' => 0, 'id_clic' => intval($id_clic), 'id_lettre' => $id_lettre));
234
235                        if ($redirection)
236                                return $redirection;
237                        else
238                                return $GLOBALS['meta']['adresse_site'];
239                }
240               
241                function envoyer_notification($action, $arguments=array()) {
242
243                        if (isset($arguments['rubriques'])) {
244                                foreach ($arguments['rubriques'] as $id_rubrique)
245                                        $chaine_rubriques.= '&rubriques[]='.$id_rubrique;
246                        }
247                        if (!empty($arguments['format'])) {
248                                $this->format = $arguments['format'];
249                                $chaine_format = '&format='.$this->format;
250                        }
251                        $parametres = 'lang='.$arguments['lang'].$chaine_rubriques.'&code='.$this->code.'&email='.$this->email.$chaine_format;
252
253                        switch ($action) {
254
255                                case 'abonnements':
256                                        $objet                  = recuperer_fond('emails/lettres_abonnements_titre', $arguments);
257                                        $message_html   = recuperer_fond('emails/lettres_abonnements_html', $arguments);
258                                        $message_texte  = recuperer_fond('emails/lettres_abonnements_texte', $arguments);
259                                        $url_action_validation_abonnements = url_absolue(generer_url_action('validation_abonnements', $parametres, true));
260                                        $message_html   = str_replace("%%URL_VALIDATION_ABONNEMENTS%%", $url_action_validation_abonnements, $message_html);
261                                        $message_texte  = str_replace("%%URL_VALIDATION_ABONNEMENTS%%", $url_action_validation_abonnements, $message_texte);
262                                        break;
263                                       
264                                case 'desabonnements':
265                                        $objet                  = recuperer_fond('emails/lettres_desabonnements_titre', $arguments);
266                                        $message_html   = recuperer_fond('emails/lettres_desabonnements_html', $arguments);
267                                        $message_texte  = recuperer_fond('emails/lettres_desabonnements_texte', $arguments);
268                                        $url_action_validation_desabonnements = url_absolue(generer_url_action('validation_desabonnements', $parametres, true));
269                                        $message_html   = str_replace("%%URL_VALIDATION_DESABONNEMENTS%%", $url_action_validation_desabonnements, $message_html);
270                                        $message_texte  = str_replace("%%URL_VALIDATION_DESABONNEMENTS%%", $url_action_validation_desabonnements, $message_texte);
271                                        break;
272                                       
273                                case 'changement_format':
274                                        $objet                  = recuperer_fond('emails/lettres_changement_format_titre', $arguments);
275                                        $message_html   = recuperer_fond('emails/lettres_changement_format_html', $arguments);
276                                        $message_texte  = recuperer_fond('emails/lettres_changement_format_texte', $arguments);
277                                        $url_action_validation_changement_format = url_absolue(generer_url_action('validation_changement_format', $parametres, true));
278                                        $message_html   = str_replace("%%URL_VALIDATION_CHANGEMENT_FORMAT%%", $url_action_validation_changement_format, $message_html);
279                                        $message_texte  = str_replace("%%URL_VALIDATION_CHANGEMENT_FORMAT%%", $url_action_validation_changement_format, $message_texte);
280                                        break;
281                                       
282                        }
283
284                        switch ($this->format) {
285                                case 'html':
286                                        $corps = array('html' => $message_html, 'texte' => '');
287                                        break;
288                                case 'texte':
289                                        $corps = array('html' => '', 'texte' => $message_texte);
290                                        break;
291                                case 'mixte':
292                                default:
293                                        $corps = array('html' => $message_html, 'texte' => $message_texte);
294                                        break;
295                        }
296
297                        $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
298                        return $envoyer_mail($this->email, $objet, $corps);
299                }
300
301
302                function envoyer_lettre($id_lettre) {
303                        if (!$this->existe)
304                                return;
305                        global $champs_extra;
306
307                        // le verrouillage est fait en amont, par la gestion des queue
308                        $lettre = new lettre($id_lettre);
309
310                        $objet = $lettre->titre;
311                        if ($lettre->statut == 'brouillon')
312                                $objet = 'TEST - '.$lettre->titre;
313
314                        $message_html   = $lettre->message_html;
315                        $message_texte  = $lettre->message_texte;
316
317                        $parametres = 'lang='.$lettre->lang.'&rubriques[]=-1&code='.$this->code.'&email='.$this->email;
318                        $url_action_validation_desabonnements = url_absolue(generer_url_action('validation_desabonnements', $parametres, true));
319                        $message_html   = str_replace("%%URL_VALIDATION_DESABONNEMENTS%%", $url_action_validation_desabonnements, $message_html);
320                        $message_texte  = str_replace("%%URL_VALIDATION_DESABONNEMENTS%%", $url_action_validation_desabonnements, $message_texte);
321
322                        $objet                  = str_replace("%%EMAIL%%", $this->email, $objet);
323                        $message_html   = str_replace("%%EMAIL%%", $this->email, $message_html);
324                        $message_texte  = str_replace("%%EMAIL%%", $this->email, $message_texte);
325
326                        $message_html   = str_replace("%%CODE%%", $this->code, $message_html);
327                        $message_texte  = str_replace("%%CODE%%", $this->code, $message_texte);
328
329                        $objet                  = lettres_remplacer_raccourci('NOM', $this->nom, $objet);
330                        $message_html   = lettres_remplacer_raccourci('NOM', $this->nom, $message_html);
331                        $message_texte  = lettres_remplacer_raccourci('NOM', $this->nom, $message_texte);
332
333                        if ($champs_extra['abonnes']) {
334                                $extra = unserialize($this->extra);
335                                foreach ($champs_extra['abonnes'] as $raccourci => $bidon) {
336                                        $objet                  = lettres_remplacer_raccourci($raccourci, $extra[$raccourci], $objet);
337                                        $message_html   = lettres_remplacer_raccourci($raccourci, $extra[$raccourci], $message_html);
338                                        $message_texte  = lettres_remplacer_raccourci($raccourci, $extra[$raccourci], $message_texte);
339                                }
340                        }
341
342                        if (function_exists('formulaires_remplacer_raccourci')) {
343                                $message_html   = formulaires_remplacer_raccourci($message_html, $this->email);
344                                $message_texte  = formulaires_remplacer_raccourci($message_texte, $this->email);
345                        }
346
347                        if (function_exists('lettres_specifique')) {
348                                $message_html   = lettres_specifique($message_html, $this->email);
349                                $message_texte  = lettres_specifique($message_texte, $this->email);
350                        }
351                       
352                        switch ($this->format) {
353                                case 'html':
354                                        $corps = array('html' => $message_html, 'texte' => '');
355                                        break;
356                                case 'texte':
357                                        $corps = array('html' => '', 'texte' => $message_texte);
358                                        break;
359                                case 'mixte':
360                                default:
361                                        $corps = array('html' => $message_html, 'texte' => $message_texte);
362                                        break;
363                        }
364
365                        $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
366
367                        // on récupère les paramètres d'envoi de la thématique
368                        $theme = sql_fetsel(
369                                        "expediteur_type, expediteur_id, retours_type, retours_id",
370                                        "spip_themes LEFT JOIN spip_lettres USING(id_rubrique)",
371                                        "id_lettre=".$id_lettre
372                        );
373                        $expediteur_type = $theme['expediteur_type'];
374                        $expediteur_id = $theme['expediteur_id'];
375                        $retours_type = $theme['retours_type'];
376                        $retours_id = $theme['retours_id'];
377
378
379                        if (!empty($expediteur_type) && 'author'!=$expediteur_type)
380                        {
381                                // l'expéditeur par défaut, dépend de la configuration de facteur et du site
382                                if (isset($GLOBALS['meta']['facteur_smtp_sender']) && !empty($GLOBALS['meta']['facteur_smtp_sender']))
383                                        $email_envoyeur =  $GLOBALS['meta']['facteur_smtp_sender'];
384                                else
385                                        $email_envoyeur =  $GLOBALS['meta']['email_webmaster'];
386
387                                $nom_envoyeur = strip_tags($GLOBALS['meta']['nom_site']);
388
389                                // l'expéditeur est le webmaster
390                                if ('webmaster'==$expediteur_type)
391                                {
392                                                $nom_envoyeur = _T('webmaster');
393                                                $email_envoyeur = $GLOBALS['meta']['email_webmaster'];
394                                }
395
396                                // l'expéditeur est un auteur sélectionné
397                                else if ('custom'==$expediteur_type)
398                                {
399                                                $auteur = sql_fetsel(
400                                                        "nom, email", 
401                                                        "spip_auteurs",
402                                                        "id_auteur=".$expediteur_id
403                                                );
404                                                $nom_envoyeur = $auteur['nom'];
405                                                $email_envoyeur = $auteur['email'];
406                                }
407
408                                $corps = array( 
409                                        'html' => $message_html, 
410                                        'texte' => $message_texte,
411                                        'nom_envoyeur' =>  $nom_envoyeur
412                                );
413                                $expediteur = $email_envoyeur;
414                        }
415
416                        // si signe_par_auteurs = oui
417                        else if ('author'==$expediteur_type || $GLOBALS['meta']['spip_lettres_signe_par_auteurs'] == 'oui') {
418                               
419                                // on récupère le 1er auteur; pas traité si plusieurs auteurs
420                                $envoyeur = sql_fetsel(
421                                        "nom, email", 
422                                        "spip_auteurs LEFT JOIN spip_auteurs_lettres USING(id_auteur)",
423                                        "id_lettre=".$id_lettre
424                                        );
425                                $nom_envoyeur = $envoyeur['nom'];
426                                $email_envoyeur = $envoyeur['email'];
427                                $corps = array( 
428                                        'html' => $message_html, 
429                                        'texte' => $message_texte,
430                                        'nom_envoyeur' =>  $nom_envoyeur
431                                );
432                                $expediteur = $email_envoyeur;
433                        }
434                       
435                        // on spécifie l'adresse e-mail pour les retours en erreur
436                        if (!empty($retours_type))
437                        {
438                                switch($retours_type)
439                                {
440                                        case "webmaster":
441                                                $corps['adresse_erreur'] =  $GLOBALS['meta']['email_webmaster'];
442                                                break;
443
444                                        case "author":
445                                                $auteur = sql_fetsel(
446                                                        "email", 
447                                                        "spip_auteurs LEFT JOIN spip_auteurs_lettres USING(id_auteur)",
448                                                        "id_lettre=".$id_lettre
449                                                );
450                                                $corps['adresse_erreur'] = $auteur['email'];
451                                                break;
452
453                                        case "custom":
454                                                $auteur = sql_fetsel(
455                                                        "email", 
456                                                        "spip_auteurs",
457                                                        "id_auteur=".$retours_id
458                                                );
459                                                $corps['adresse_erreur'] = $auteur['email'];
460                                                break;
461
462                                        default:
463                                                if (isset($GLOBALS['meta']['facteur_smtp_sender']) && !empty($GLOBALS['meta']['facteur_smtp_sender']))
464                                                        $corps['adresse_erreur'] =  $GLOBALS['meta']['facteur_smtp_sender'];
465                                                else
466                                                        $corps['adresse_erreur'] =  $GLOBALS['meta']['email_webmaster'];
467                                                break;
468                                }
469                        }
470
471                        return $envoyer_mail($this->email, $objet, $corps, $expediteur, $headers);
472                }
473               
474               
475                function renvoyer_lettre($id_lettre) {
476                        $resultat = $this->envoyer_lettre($id_lettre);
477                        if ($resultat) {
478                                $this->enregistrer_envoi($id_lettre, $resultat);
479                                return true;
480                        }
481                        return false;   
482                }
483               
484               
485                function verifier_code($code) {
486                        if (strcmp($this->code, $code) == 0)
487                                return true;
488                        else
489                                return false;
490                }
491               
492               
493                function valider_abonnement($id_rubrique=0, $partie_publique=false) {
494                        include_spip('inc/autoriser');
495                        if (autoriser('validerabonnement','rubrique',$id_rubrique) OR lettres_rubrique_autorisee($id_rubrique)) {
496                                sql_updateq('spip_abonnes_rubriques', array('statut' => 'valide', 'date_abonnement' => 'NOW()'), 'id_abonne='.intval($this->id_abonne).' AND id_rubrique='.intval($id_rubrique));
497                                $this->enregistrer_maj();
498                        }
499                        if ($partie_publique)
500                                $this->oublier_desabonnement();
501                        $this->supprimer_abonnements_inutiles();
502                }
503               
504               
505                function valider_abonnements_en_attente() {
506                        sql_updateq('spip_abonnes_rubriques', array('statut' => 'valide', 'date_abonnement' => 'NOW()'), 'id_abonne='.intval($this->id_abonne).' AND statut="a_valider"');
507                        $this->enregistrer_maj();
508                        $this->supprimer_abonnements_inutiles();
509                }
510               
511               
512                function valider_desabonnement($id_rubrique=0) {
513                        if ($id_rubrique == -1) {
514                                $this->memoriser_desabonnement();
515                                $this->supprimer();
516                        } else {
517                                include_spip('inc/autoriser');
518                                if (autoriser('validerdesabonnement','rubrique',$id_rubrique) or lettres_rubrique_autorisee($id_rubrique))
519                                        sql_delete('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND id_rubrique='.intval($id_rubrique));
520                        }
521                        $this->enregistrer_maj();
522                }
523               
524               
525                function memoriser_desabonnement() {
526                        sql_insertq('spip_desabonnes', array('email' => $this->email));
527                }
528               
529               
530                function oublier_desabonnement() {
531                        sql_delete('spip_desabonnes', 'email='.sql_quote($this->email));
532                }
533               
534               
535                function calculer_nombre_abonnements($mode='total') {
536                        $a_valider      = sql_countsel('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND statut="a_valider"');
537                        $valide = sql_countsel('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND statut="valide"');
538                        $total = $a_valider + $valide;
539                        switch ($mode) {
540                                case 'a_valider':
541                                        return $a_valider;
542                                case 'valide':
543                                        return $valide;
544                                case 'total':
545                                default:
546                                        return $total;
547                        }
548                }
549               
550               
551                function calculer_statut() {
552                        $statut = 'vide';
553                        $abonnements_a_valider  = sql_countsel('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND statut="a_valider"');
554                        if ($abonnements_a_valider > 0)
555                                $statut = 'a_valider';
556                        $abonnements_valides    = sql_countsel('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND statut="valide"');
557                        if ($abonnements_valides > 0)
558                                $statut = 'valide';
559                        return $statut;
560                }
561               
562               
563                function recuperer_abonnements($seulement_valides=true) {
564                        $abonnements = array();
565                        if ($seulement_valides)
566                                $res = sql_select('id_rubrique', 'spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne).' AND statut="valide"');
567                        else
568                                $res = sql_select('id_rubrique', 'spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne));
569                        while ($arr = sql_fetch($res)) {
570                                $abonnements[] = $arr['id_rubrique'];
571                        }
572                        return $abonnements;
573                }
574               
575               
576                function supprimer() {
577                        if ($GLOBALS['meta']['spip_lettres_notifier_suppression_abonne'] != 'non') {
578                                $objet                  = recuperer_fond('emails/lettres_suppression_abonne_titre', array('email' => $this->email));
579                                $message_html   = recuperer_fond('emails/lettres_suppression_abonne_html', array('email' => $this->email));
580                                $message_texte  = recuperer_fond('emails/lettres_suppression_abonne_texte', array('email' => $this->email));
581                                $corps = array('html' => $message_html, 'texte' => $message_texte);
582                                $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
583                               
584                                $email_recoit_desabonnement = $GLOBALS['meta']['email_webmaster'];
585
586                                if ('webmaster'!=$GLOBALS['meta']['spip_lettres_notifier_suppression_abonne'])
587                                {
588                                        $id_auteur = intval($GLOBALS['meta']['spip_lettres_notifier_suppression_abonne']);
589                                        $row = sql_fetsel("email", "spip_auteurs", "id_auteur=".$id_auteur);
590                                        $email_recoit_desabonnement = $row["email"];
591                                }
592                                $envoyer_mail($email_recoit_desabonnement, $objet, $corps);
593                        }
594                        $req = sql_select('*', 'spip_abonnes_statistiques', 'periode="'.date('Y-m').'"');
595                        if (sql_count($req) == 0)
596                                sql_insertq('spip_abonnes_statistiques', array('periode' => date('Y-m')));
597                        sql_update('spip_abonnes_statistiques', array('nb_desinscriptions' => 'nb_desinscriptions+1'), 'periode='.sql_quote(date('Y-m')));
598                        sql_delete('spip_abonnes', 'id_abonne='.intval($this->id_abonne));
599                        sql_delete('spip_abonnes_clics', 'id_abonne='.intval($this->id_abonne));
600                        sql_delete('spip_abonnes_lettres', 'id_abonne='.intval($this->id_abonne));
601                        sql_delete('spip_abonnes_rubriques', 'id_abonne='.intval($this->id_abonne));
602                }
603
604
605                function supprimer_si_zero_abonnement() {
606                        $nb_abonnements = count($this->recuperer_abonnements(false));
607                        if ($nb_abonnements == 0)
608                                $this->supprimer();
609                }
610               
611               
612                function supprimer_abonnements_inutiles() {
613                        $test_racine = sql_countsel('spip_abonnes_rubriques', 'id_rubrique=0 AND id_abonne='.intval($this->id_abonne));
614                        if ($test_racine)
615                                sql_delete('spip_abonnes_rubriques', 'id_rubrique!=0 AND id_abonne='.intval($this->id_abonne));
616                }
617
618
619        }
620
621?>
Note: See TracBrowser for help on using the repository browser.