source: spip-zone/_plugins_/mailsubscribers/trunk/notifications/instituermailsubscriptions.php @ 115392

Last change on this file since 115392 was 115392, checked in by cy.altern@…, 14 months ago

éviter de passer une chaîne à un foreach (le pipeline peut avoir un retour de la forme $valdata? cf https://code.spip.net/autodoc/tree/ecrire/inc/utils.php.html#function_pipeline)

File size: 5.0 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// Notifier la modification de statut d'une ou plusieurs inscriptions a des listes (d'un meme subscriber)
11// etend l'ancienne instituermailsubscription
12function notifications_instituermailsubscriptions_dist($quoi, $id_mailsubscriber, $options) {
13
14        // @deprecated : il faut normalement utiliser l'option notify de subscribe et unsubscribe
15        // pour eviter l'envoi des notifications d'inscription/desincription
16        if (isset($GLOBALS['notification_instituermailsubscriber_status']) AND !$GLOBALS['notification_instituermailsubscriber_status'])
17                return;
18
19        $envois = array();
20        include_spip('inc/texte');
21
22        if (isset($options['subscriptions']) and count($options['subscriptions'])) {
23
24                foreach ($options['subscriptions'] as $subscription) {
25
26                        if (!isset($subscription['id_mailsubscribinglist'])){
27                                spip_log("instituermailsubscriptions #$id_mailsubscriber : id_mailsubscribinglist inconnu " . json_encode($subscription), 'notifications'._LOG_INFO_IMPORTANTE);
28                                continue; // rien d'autre a faire pour cette subscription
29                        }
30                        $id_mailsubscribinglist = $subscription['id_mailsubscribinglist'];
31
32                        // ne devrait jamais se produire
33                        if (isset($subscription['statut'])
34                                and ($subscription['statut'] == $subscription['statut_ancien'])
35                        ){
36                                spip_log("instituermailsubscriptions #$id_mailsubscriber a liste #$id_mailsubscribinglist : statut inchange", 'notifications'._LOG_INFO_IMPORTANTE);
37                                continue; // rien d'autre a faire pour cette subscription
38                        }
39
40                        // trouver le modele d'envoi
41                        $modele = "";
42                        if (isset($subscription['statut'])
43                                and $subscription['statut'] == 'valide'
44                        ) {
45                                $modele = "notifications/mailsubscriber_subscribe";
46                        } elseif (isset($subscription['statut_ancien'])
47                                and $subscription['statut_ancien'] == 'valide'
48                        ) {
49                                $modele = "notifications/mailsubscriber_unsubscribe";
50                        } elseif (isset($subscription['statut'])
51                                and $subscription['statut'] == 'prop'
52                        ) {
53                                if (isset($subscription['invite_email_from']) AND strlen($subscription['invite_email_from'])) {
54                                        $modele = "notifications/mailsubscriber_invite_confirm";
55                                } else {
56                                        $modele = "notifications/mailsubscriber_confirm";
57                                }
58                        }
59
60                        if ($modele){
61
62                                if (!isset($envois[$modele])) {
63                                        $envois[$modele] = array(
64                                                'id_mailsubscribinglists' => array(),
65                                                'contexte' => array(),
66                                        );
67                                }
68
69                                $envois[$modele]['id_mailsubscribinglists'][] = $id_mailsubscribinglist;
70                                $envois[$modele]['contexte'][$id_mailsubscribinglist] = $subscription;
71                        }
72
73
74                }
75
76        }
77
78        spip_log("instituermailsubscriptions #$id_mailsubscriber : " . count($envois) . ' mails differents a envoyer', 'notifications');
79
80        if ($envois) {
81                $contexte = $options;
82                unset($contexte['subscriptions']);
83                $contexte['id_mailsubscriber'] = $id_mailsubscriber;
84
85                $destinataires = sql_getfetsel("email", "spip_mailsubscribers", "id_mailsubscriber=" . intval($id_mailsubscriber));
86                $destinataires = pipeline('notifications_destinataires',
87                        array(
88                                'args' => array('quoi' => $quoi, 'id' => $id_mailsubscriber, 'options' => $options)
89                        ,
90                                'data' => $destinataires
91                        )
92                );
93
94                // precaution : enlever les adresses en "@example.org"
95                if (!is_array($destinataires)) 
96                        $destinataires = array($destinataires);
97                foreach ($destinataires as $k => $email) {
98                        if (preg_match(",@example.org$,i", $email)) {
99                                unset($destinataires[$k]);
100                        }
101                }
102                if (count($destinataires)) {
103                        $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email
104
105                        foreach ($envois as $modele => $envoi) {
106
107                                if (count($envoi['id_mailsubscribinglists'])>1
108                                  and $modele_multiples = "$modele-multiples"
109                                        and trouver_fond($modele_multiples)) {
110
111                                        spip_log("instituermailsubscriptions #$id_mailsubscriber : $modele_multiples : envoi en un seul mail pour listes #" . implode(', #', $envoi['id_mailsubscribinglists']), 'notifications' . _LOG_INFO_IMPORTANTE);
112
113                                        $env = array();
114                                        while (count($envoi['contexte'])) {
115                                                $env = array_merge($env, array_shift($envoi['contexte']));
116                                        }
117                                        $env = array_merge($env, $contexte);
118                                        $env['id_mailsubscribinglists'] = $envoi['id_mailsubscribinglists'];
119                                        unset($env['statut']);
120
121                                        $texte = recuperer_fond($modele_multiples, $env);
122                                        notifications_envoyer_mails($destinataires, $texte);
123
124                                }
125                                else {
126
127                                        foreach ($envoi['id_mailsubscribinglists'] as $id_mailsubscribinglist) {
128
129                                                spip_log("instituermailsubscriptions #$id_mailsubscriber : $modele : envoi mail pour liste #$id_mailsubscribinglist", 'notifications' . _LOG_INFO_IMPORTANTE);
130
131                                                $env = array_merge($envoi['contexte'][$id_mailsubscribinglist], $contexte);
132                                                unset($env['statut']);
133                                                $env['id_mailsubscribinglist'] = $id_mailsubscribinglist;
134
135                                                $texte = recuperer_fond($modele, $env);
136                                                notifications_envoyer_mails($destinataires, $texte);
137
138                                        }
139
140                                }
141
142                        }
143                }
144                else {
145                        spip_log("instituermailsubscriptions #$id_mailsubscriber : aucun destinataire - rien a faire", 'notifications' . _LOG_INFO_IMPORTANTE);
146                }
147        }
148
149}
Note: See TracBrowser for help on using the repository browser.