source: spip-zone/_plugins_/mailsubscribers/trunk/newsletter/subscribers.php @ 86542

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

Oups : il manque une normalisation qui empeche l'envoi aux listes (nicod)

File size: 3.0 KB
Line 
1<?php
2/**
3 * Plugin mailsubscribers
4 * (c) 2012 Cédric Morin
5 * Licence GNU/GPL v3
6 *
7 */
8
9if (!defined('_ECRIRE_INC_VERSION')) return;
10
11include_spip('inc/mailsubscribers');
12include_spip('mailsubscribers_fonctions');
13
14/**
15 * Renvoi les inscrits a une ou plusieurs listes
16 * si plusieurs listes sont demandee, c'est un OU qui s'applique (renvoie les inscrits a au moins une des listes)
17 *
18 * @param array $listes
19 *   listes de diffusion. 'newsletter' si non precise
20 * @param array $options
21 *   count : si true renvoyer le nombre de resultats au lieu de la liste (perf issue, permet de tronconner)
22 *   limit : ne recuperer qu'un sous ensemble des inscrits "10,20" pour recuperer 20 resultats a partir du 10e (idem SQL)
23 * @return int|array
24 *   liste d'utilisateurs, chacun decrit par un array dans le meme format que newsletter/subscriber
25 */
26function newsletter_subscribers_dist($listes = array(),$options = array()){
27        static $count = null;
28
29        $select = "email,nom,listes,lang,'on' AS status,jeton";
30        $where = array('statut='.sql_quote('valide'));
31        $limit = "";
32
33        // si pas de liste precisee : liste newsletter par defaut (newsletter::newsletter)
34        if (!$listes OR !is_array($listes)){
35                $listes = array(mailsubscribers_normaliser_nom_liste());
36        }
37
38        // si simple comptage d'une seule liste, faisons plus rapidement pour eviter les regexp sur une grosse base
39        // on en profite pour tout compter pour ne le faire qu'une fois
40        if (isset($options['count']) AND $options['count'] AND count($listes)==1){
41                if (is_null($count)
42                        AND !_request('var_mode')
43                  AND isset($GLOBALS['meta']['newsletter_subscribers_count'])
44                  AND $c = unserialize($GLOBALS['meta']['newsletter_subscribers_count']))
45                        $count = $c;
46                if (is_null($count)){
47                        $rows = sql_allfetsel("listes,count(id_mailsubscriber) as n","spip_mailsubscribers",$where,"listes");
48                        foreach($rows as $row){
49                                $ls = explode(",",$row["listes"]);
50                                $ls = array_filter($ls);
51                                $ls = array_unique($ls);
52                                foreach($ls as $l){
53                                        if (!isset($count[$l])) $count[$l] = 0;
54                                        $count[$l] += $row['n'];
55                                }
56                        }
57                        ecrire_meta("newsletter_subscribers_count",serialize($count));
58                }
59                $liste = mailsubscribers_normaliser_nom_liste(reset($listes));
60                return (isset($count[$liste])?$count[$liste]:0);
61        }
62
63        $sous_where = array();
64        foreach ($listes as $l){
65                $l = mailsubscribers_normaliser_nom_liste($l);
66                $sous_where[] = "listes REGEXP ".sql_quote('(,|^)'.$l.'(,|$)');
67        }
68        if (count($sous_where)){
69                $sous_where = "(".implode(" OR ",$sous_where).")";
70                $where[] = $sous_where;
71        }
72
73        // si simple comptage de plusieurs listes, on arrive ici
74        if (isset($options['count']) AND $options['count'])
75                return sql_countsel("spip_mailsubscribers",$where);
76
77        if (isset($options['limit']) AND $options['limit'])
78                $limit = $options['limit'];
79
80        // selection, par date
81        // ca permet ainsi que les derniers inscrits (en cours de diffusion) se retrouvent dans le dernier lot
82        // et premier inscrits, premiers servis
83        $rows = sql_allfetsel($select,"spip_mailsubscribers",$where,"","date",$limit);
84        $rows = array_map('mailsubscribers_informe_subscriber',$rows);
85
86        return $rows;
87}
Note: See TracBrowser for help on using the repository browser.