source: spip-zone/_plugins_/mailsubscribers/trunk/mailsubscribers_pipelines.php @ 67911

Last change on this file since 67911 was 67911, checked in by cedric@…, 7 years ago
  • Obfuscation des emails des inscriptions suspendues : on reprend une bonne idee de clevermail qui consiste a masquer les emails suspendus par un md5@…. Si le meme email veut se reinscrire ou que l'on tente de creer un nouvel inscrit depuis le back-office avec cet email, il est repéré et on rétablit l'email grace à la saisie.


  • Gestion des listes de diffusion : filtre des inscription par liste, edition et titrage des listes depuis le formulaire de configuration.

Le plugin passe en v0.7 et en test car toute la TODO est implémentée.
Les installations des version dev doivent être désinstallées puis réinstallées pour garantir la structure de la base.

File size: 4.7 KB
Line 
1<?php
2/**
3 * Plugin mailsubscribers
4 * (c) 2012 Cédric Morin
5 * Licence GNU/GPL v3
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10/**
11 * Ajouter un jeton unique sur chaque inscrit (sert aux signatures d'action)
12 * @param $flux
13 * @return mixed
14 */
15function mailsubscribers_pre_insertion($flux){
16        if ($flux['args']['table']=='spip_mailsubscribers'
17          AND !isset($flux['data']['jeton'])){
18                include_spip("inc/acces");
19                $flux['data']['jeton'] = creer_uniqid();
20                include_spip("inc/mailsubscribers");
21                if (!isset($flux['data']['listes']))
22                        $flux['data']['listes'] = mailsubscribers_normaliser_nom_liste();
23                if (!isset($flux['data']['email'])){
24                        include_spip("inc/acces");
25                        $flux['data']['email'] = creer_uniqid(); // eviter l'eventuel echec unicite sur email vide
26                }
27        }
28        return $flux;
29}
30
31/**
32 * Quand le statut de l'abonnement est change, tracer par qui (date, ip, #id si auteur loge, nom/email si en session)
33 * Permet d'opposer l'optin d'un internaute a son abonnement
34 * (et a contrario de tracer que l'abonnement n'a pas ete fait par lui si c'est le cas...)
35 * @param $flux
36 * @return mixed
37 */
38function mailsubscribers_pre_edition($flux){
39        if ($flux['args']['table']=='spip_mailsubscribers'
40          AND $flux['args']['action']=='instituer'
41          AND $id_mailsubscriber = $flux['args']['id_objet']
42          AND $statut_ancien = $flux['args']['statut_ancien']
43          AND isset($flux['data']['statut'])
44          AND $statut = $flux['data']['statut']
45          AND $statut != $statut_ancien
46          AND ($statut=='valide' OR $statut_ancien=='valide')){
47
48                // on change le statut : logons date et par qui dans le champ optin
49                $optin = sql_getfetsel("optin","spip_mailsubscribers","id_mailsubscriber=".intval($id_mailsubscriber));
50                $optin = trim($optin);
51                $optin .=
52                  "\n"
53                  . _T('mailsubscriber:info_statut_'.$statut)." : "
54                        . date('Y-m-d H:i:s').", "
55                  . _T('public:par_auteur').' '
56                          . (isset($GLOBALS['visiteur_session']['id_auteur'])?"#".$GLOBALS['visiteur_session']['id_auteur'].' ':'')
57                          . (isset($GLOBALS['visiteur_session']['nom'])?$GLOBALS['visiteur_session']['nom'].' ':'')
58                          . (isset($GLOBALS['visiteur_session']['session_nom'])?$GLOBALS['visiteur_session']['session_nom'].' ':'')
59                          . (isset($GLOBALS['visiteur_session']['session_email'])?$GLOBALS['visiteur_session']['session_email'].' ':'')
60                    . '('.$GLOBALS['ip'].')'
61                ;
62                $optin = trim($optin);
63                $flux['data']['optin'] = $optin;
64        }
65        return $flux;
66}
67
68
69/**
70 * Optimiser la base de donnee en supprimant inscriptions non confirmees
71 * ainsi que les inscriptions a la poubelle
72 *
73 * @param array $flux
74 * @return array
75 */
76function mailsubscribers_optimiser_base_disparus($flux){
77        $n = &$flux['data'];
78        $mydate = $flux['args']['date'];
79
80
81        # passer en refuser les inscriptions en attente non confirmees
82        sql_updateq("spip_mailsubscribers",array("statut"=>"refuse"), "statut=".sql_quote('prepa')." AND date < ".sql_quote($mydate));
83
84        # supprimer les inscriptions a la poubelle
85        sql_delete("spip_mailsubscribers", "statut=".sql_quote('poubelle')." AND date < ".sql_quote($mydate));
86
87        return $flux;
88
89}
90
91/**
92 * Ajout de la coche d'optin sur le formulaire inscription
93 *
94 * @param array $flux
95 * @return array
96 */
97function mailsubscribers_formulaire_charger($flux){
98        if ($flux['args']['form']=="inscription"){
99                // ici on ne lit pas la config pour aller plus vite (pas grave si on a ajoute le champ sans l'utiliser)
100                $flux['data']['mailsubscriber_optin'] = '';
101        }
102        return $flux;
103}
104
105/**
106 * Ajout de la coche d'optin sur le formulaire inscription
107 *
108 * @param array $flux
109 * @return array
110 */
111function mailsubscribers_formulaire_fond($flux){
112        if ($flux['args']['form']=="inscription"){
113                include_spip('inc/config');
114                if (lire_config("mailsubscribers/proposer_signup_optin",0)){
115                        if (($p = strpos($flux['data'],"</ul>"))!==false){
116                                $input = recuperer_fond("formulaires/inc-optin-subscribe",$flux['args']['contexte']);
117                                $flux['data'] = substr_replace($flux['data'],$input,$p,0);
118                        }
119                }
120        }
121        return $flux;
122}
123
124/**
125 * Ajout de la coche d'optin sur le formulaire inscription
126 *
127 * @param array $flux
128 * @return array
129 */
130function mailsubscribers_formulaire_traiter($flux){
131        if ($flux['args']['form']=="inscription"
132          AND _request('mailsubscriber_optin')
133          AND isset($flux['data']['id_auteur'])
134                AND $id_auteur = $flux['data']['id_auteur']){
135                // si on a poste l'optin et auteur inscrit en base
136                // verifier quand meme que la config autorise cet optin, et que l'inscription s'est bien faite)
137                include_spip('inc/config');
138                if (lire_config("mailsubscribers/proposer_signup_optin",0)){
139                        $row = sql_fetsel('nom,email','spip_auteurs','id_auteur='.intval($id_auteur));
140                        if ($row){
141                                // inscrire le nom et email
142                                $newsletter_subscribe = charger_fonction('subscribe','newsletter');
143                                $newsletter_subscribe($row['email'],array('nom'=>$row['nom']));
144                        }
145                }
146        }
147        return $flux;
148}
149
150?>
Note: See TracBrowser for help on using the repository browser.