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

Last change on this file since 86325 was 86325, checked in by cedric@…, 5 years ago

Evolutions fonctionnelles :

  • on peut creer automatiquement une liste des Administrateurs, Redacteurs et/ou Visiteurs, en cochant une case, qui seront synchronisées automatiquement une fois par jour
  • par extension, on peut synchroniser facilement la liste de son choix avec toutes données externes en ecrivant la fonction mailsubscribers_synchro_list_newsletter_{$id}() qui devra retourner une liste des abonnes avec au moins le champs 'email' pour chaque et optionnellement les champs 'nom' et 'prenom'. Des que la fonction existe, un message informe que la liste est synchronisée automatiquement
  • fonction de synchronisation facile d'une liste avec un tableau d'abonnes. Pour le moment la fonction ne peut fonctionner qu'avec un tableau, ce qui limite aux listes raisonnables (quelques milliers, mais pas plusieurs centaines de millier)
File size: 4.9 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
10function mailsubscribers_taches_generales_cron($taches){
11        // a peu pres tous les jours mais en se decalant un peu
12        $taches['mailsubscribers_synchro_lists'] = 23 * 3600;
13        return $taches;
14}
15
16/**
17 * Ajouter un jeton unique sur chaque inscrit (sert aux signatures d'action)
18 * @param $flux
19 * @return mixed
20 */
21function mailsubscribers_pre_insertion($flux){
22        if ($flux['args']['table']=='spip_mailsubscribers'
23          AND !isset($flux['data']['jeton'])){
24                include_spip("inc/acces");
25                $flux['data']['jeton'] = creer_uniqid();
26                include_spip("inc/mailsubscribers");
27                if (!isset($flux['data']['listes']))
28                        $flux['data']['listes'] = mailsubscribers_normaliser_nom_liste();
29                if (!isset($flux['data']['email'])){
30                        include_spip("inc/acces");
31                        $flux['data']['email'] = creer_uniqid(); // eviter l'eventuel echec unicite sur email vide
32                }
33        }
34        return $flux;
35}
36
37/**
38 * Quand le statut de l'abonnement est change, tracer par qui (date, ip, #id si auteur loge, nom/email si en session)
39 * Permet d'opposer l'optin d'un internaute a son abonnement
40 * (et a contrario de tracer que l'abonnement n'a pas ete fait par lui si c'est le cas...)
41 * @param $flux
42 * @return mixed
43 */
44function mailsubscribers_pre_edition($flux){
45        if ($flux['args']['table']=='spip_mailsubscribers'
46          AND $flux['args']['action']=='instituer'
47          AND $id_mailsubscriber = $flux['args']['id_objet']
48          AND $statut_ancien = $flux['args']['statut_ancien']
49          AND isset($flux['data']['statut'])
50          AND $statut = $flux['data']['statut']
51          AND $statut != $statut_ancien
52          AND ($statut=='valide' OR $statut_ancien=='valide')){
53
54                // on change le statut : logons date et par qui dans le champ optin
55                $optin = sql_getfetsel("optin","spip_mailsubscribers","id_mailsubscriber=".intval($id_mailsubscriber));
56                $optin = trim($optin);
57                $optin .=
58                  "\n"
59                  . _T('mailsubscriber:info_statut_'.$statut)." : "
60                        . date('Y-m-d H:i:s').", "
61                  . _T('public:par_auteur').' '
62                          . (isset($GLOBALS['visiteur_session']['id_auteur'])?"#".$GLOBALS['visiteur_session']['id_auteur'].' ':'')
63                          . (isset($GLOBALS['visiteur_session']['nom'])?$GLOBALS['visiteur_session']['nom'].' ':'')
64                          . (isset($GLOBALS['visiteur_session']['session_nom'])?$GLOBALS['visiteur_session']['session_nom'].' ':'')
65                          . (isset($GLOBALS['visiteur_session']['session_email'])?$GLOBALS['visiteur_session']['session_email'].' ':'')
66                    . '('.$GLOBALS['ip'].')'
67                ;
68                $optin = trim($optin);
69                $flux['data']['optin'] = $optin;
70        }
71        return $flux;
72}
73
74
75/**
76 * Optimiser la base de donnee en supprimant inscriptions non confirmees
77 * ainsi que les inscriptions a la poubelle
78 *
79 * @param array $flux
80 * @return array
81 */
82function mailsubscribers_optimiser_base_disparus($flux){
83        $n = &$flux['data'];
84        $mydate = $flux['args']['date'];
85
86
87        # passer en refuser les inscriptions en attente non confirmees
88        sql_updateq("spip_mailsubscribers",array("statut"=>"refuse"), "statut=".sql_quote('prepa')." AND date < ".sql_quote($mydate));
89
90        # supprimer les inscriptions a la poubelle
91        sql_delete("spip_mailsubscribers", "statut=".sql_quote('poubelle')." AND date < ".sql_quote($mydate));
92
93        return $flux;
94
95}
96
97/**
98 * Ajout de la coche d'optin sur le formulaire inscription
99 *
100 * @param array $flux
101 * @return array
102 */
103function mailsubscribers_formulaire_charger($flux){
104        if ($flux['args']['form']=="inscription"){
105                // ici on ne lit pas la config pour aller plus vite (pas grave si on a ajoute le champ sans l'utiliser)
106                $flux['data']['mailsubscriber_optin'] = '';
107        }
108        return $flux;
109}
110
111/**
112 * Ajout de la coche d'optin sur le formulaire inscription
113 *
114 * @param array $flux
115 * @return array
116 */
117function mailsubscribers_formulaire_fond($flux){
118        if ($flux['args']['form']=="inscription"){
119                include_spip('inc/config');
120                if (lire_config("mailsubscribers/proposer_signup_optin",0)){
121                        if (($p = strpos($flux['data'],"</ul>"))!==false){
122                                $input = recuperer_fond("formulaires/inc-optin-subscribe",$flux['args']['contexte']);
123                                $flux['data'] = substr_replace($flux['data'],$input,$p,0);
124                        }
125                }
126        }
127        return $flux;
128}
129
130/**
131 * Ajout de la coche d'optin sur le formulaire inscription
132 *
133 * @param array $flux
134 * @return array
135 */
136function mailsubscribers_formulaire_traiter($flux){
137        if ($flux['args']['form']=="inscription"
138          AND _request('mailsubscriber_optin')
139          AND isset($flux['data']['id_auteur'])
140                AND $id_auteur = $flux['data']['id_auteur']){
141                // si on a poste l'optin et auteur inscrit en base
142                // verifier quand meme que la config autorise cet optin, et que l'inscription s'est bien faite)
143                include_spip('inc/config');
144                if (lire_config("mailsubscribers/proposer_signup_optin",0)){
145                        $row = sql_fetsel('nom,email','spip_auteurs','id_auteur='.intval($id_auteur));
146                        if ($row){
147                                // inscrire le nom et email
148                                $newsletter_subscribe = charger_fonction('subscribe','newsletter');
149                                $newsletter_subscribe($row['email'],array('nom'=>$row['nom']));
150                        }
151                }
152        }
153        return $flux;
154}
155
156?>
Note: See TracBrowser for help on using the repository browser.