source: spip-zone/_plugins_/mailsubscribers/trunk/formulaires/configurer_mailsubscribers.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.6 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;
9include_spip("inc/mailsubscribers");
10include_spip("inc/config");
11include_spip("inc/cvt_configurer");
12
13function formulaires_configurer_mailsubscribers_charger_dist(){
14        $valeurs = array(
15                'proposer_signup_optin' => lire_config('mailsubscribers/proposer_signup_optin',0),
16                'double_optin' => lire_config('mailsubscribers/double_optin',1),
17                'lists' => lire_config('mailsubscribers/lists',array()),
18                'listes_auto_auteurs' => lire_config('mailsubscribers/listes_auto_auteurs',array()),
19        );
20
21        foreach ($valeurs['lists'] as $k => $v){
22                $valeurs['lists'][$k]['id'] = mailsubscribers_filtre_liste($v['id']);
23        }
24
25        $valeurs['_auteurs_possibles'] = mailsubscribers_liste_statut_auteur_possibles($valeurs['lists']);
26        return $valeurs;
27}
28
29function formulaires_configurer_mailsubscribers_verifier_dist(){
30        $erreurs = array();
31
32        if ($lists = _request('lists')) {
33                foreach ($lists as $k => $v){
34                        if (strlen($v['id'])  AND !strlen($v['titre'])){
35                                $erreurs['lists'][$k]['titre'] = _T('info_obligatoire');
36                        }
37                }
38        }
39
40        return $erreurs;
41}
42
43/**
44 * Enregistrement de la configuration de mailsubscribers
45 *
46 * @note
47 *   La liste des listes de diffusion déclarées en configuration
48 *   est systématiquement complétée par celles présentes réellement
49 *   en base dans spip_mailsubscribers.
50 *
51 *   Changer l'identifiant d'une liste nécessite aussi de le
52 *   modifier dans spip_mailsubscribers.
53 *
54 * @return array
55**/
56function formulaires_configurer_mailsubscribers_traiter_dist(){
57        $mailsubscribers_synchro_lists = false;
58        if ($lists = _request('lists')) {
59                $renommages = array(); # un renommage a t'il eu lieu ?
60                foreach (_request('lists') as $k => $v) {
61
62                        // l'ancien nom d'identifiant. Ne pas normaliser s'il est vide !
63                        // sinon cela lui met 'newsletter::newsletter' d'office.
64                        if ($v['id_bak']) {
65                                $id_bak = mailsubscribers_normaliser_nom_liste($v['id_bak']);
66                        } else {
67                                $id_bak = '';
68                        }
69                        unset($v['id_bak']);
70
71                        // cas d'une suppression de liste d'information
72                        if ($id_bak AND $v['status'] == 'delete') {
73                                mailsubscribers_supprimer_identifiant_liste($id_bak);
74                                unset($lists[$k]);
75                                continue;
76                        }
77
78                        // autres cas (nouvelle ou modification)
79                        if (strlen(trim($v['id']))) {
80                                $lists[$k]['id'] = mailsubscribers_normaliser_nom_liste($v['id']);
81                                if (!in_array($v['status'], array('open', 'close'))) {
82                                        $lists[$k]['status'] = 'open';
83                                }
84
85                                // renommage d'une liste (il existe un ancien identifiant non vide)
86                                if ($id_bak AND ($lists[$k]['id'] != $id_bak)) {
87                                        mailsubscribers_renommer_identifiant_liste($id_bak, $lists[$k]['id']);
88                                        $renommages[$k] = $lists[$k]['id'];
89                                }
90                        }
91                        else {
92                                unset($lists[$k]);
93                        }
94                }
95
96                // si une liste est renommée (identifiant) du nom d'une autre existante,
97                // on supprime la liste renommée.
98                if ($renommages) {
99                        foreach ($renommages as $c => $id) {
100                                foreach ($lists as $k => $v) {
101                                        if (($c != $k) AND ($v['id'] == $id)) {
102                                                unset($lists[$c]);
103                                                break;
104                                        }
105                                }
106                        }
107                }
108
109                // creer les listes automatiques 0minirezo, 1comite, 6forum si besoin
110                if (count($la = _request('listes_auto_auteurs'))){
111                        $noms = mailsubscribers_liste_statut_auteur_possibles($lists);
112                        foreach($la as $s){
113                                $id = mailsubscribers_normaliser_nom_liste($s);
114                                foreach ($lists as $k => $v) {
115                                        if ($v['id']==$id){
116                                                $id="";
117                                        }
118                                }
119                                if ($id){
120                                        $lists[] = array('id'=>$id,'status'=>'open','titre'=>$noms[$s]);
121                                }
122                        }
123                        // lancer le genie de synchro
124                        $mailsubscribers_synchro_lists = charger_fonction("mailsubscribers_synchro_lists","genie");
125                }
126
127                set_request('lists',array_merge($lists)); // array_merge pour renumeroter les cles numeriques...
128                ecrire_config('mailsubscribers/',array('lists'=>$lists));
129        }
130
131
132        $trace = cvtconf_formulaires_configurer_enregistre('configurer_mailsubscribers',array());
133        if ($mailsubscribers_synchro_lists AND function_exists($mailsubscribers_synchro_lists))
134                $mailsubscribers_synchro_lists(0);
135
136        $res = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true);
137
138        // et on efface le request
139        set_request('lists');
140
141        return $res;
142}
143
144/**
145 * Trouver les statuts auteur qui n'ont pas encore de liste automatique
146 * @param $lists
147 * @return array
148 */
149function mailsubscribers_liste_statut_auteur_possibles($lists){
150        $possibles = array(
151                '0minirezo'=>'info_administrateurs',
152                '1comite'=>'info_redacteurs',
153                '6forum'=>'info_visiteurs'
154        );
155        foreach ($lists as $k => $v) {
156                if (isset($possibles[$v['id']])){
157                        unset($possibles[$v['id']]);
158                }
159        }
160
161        $possibles = array_map('_T',$possibles);
162        return $possibles;
163}
Note: See TracBrowser for help on using the repository browser.