Changeset 86539 in spip-zone


Ignore:
Timestamp:
Dec 8, 2014, 12:27:28 PM (5 years ago)
Author:
cedric@…
Message:

Optimisation : ne pas compter les subscribers a chaque demande, mais une seule fois pour toutes les listes, et memorisee dans une meta qu'on reset a chaque desinscription/inscription

Location:
_plugins_/mailsubscribers/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsubscribers/trunk/newsletter/subscribe.php

    r83507 r86539  
    158158                autoriser_exception("instituer","mailsubscriber",$row['id_mailsubscriber'],false);
    159159        }
     160        effacer_meta("newsletter_subscribers_count");
    160161
    161162        return true;
  • _plugins_/mailsubscribers/trunk/newsletter/subscribers.php

    r69533 r86539  
    2525 */
    2626function newsletter_subscribers_dist($listes = array(),$options = array()){
     27        static $count = null;
    2728
    2829        $select = "email,nom,listes,lang,'on' AS status,jeton";
     
    3334        if (!$listes OR !is_array($listes)){
    3435                $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 = reset($listes);
     60                return (isset($count[$liste])?$count[$liste]:0);
    3561        }
    3662
     
    4571        }
    4672
    47         // si simple comptage
     73        // si simple comptage de plusieurs listes, on arrive ici
    4874        if (isset($options['count']) AND $options['count'])
    4975                return sql_countsel("spip_mailsubscribers",$where);
  • _plugins_/mailsubscribers/trunk/newsletter/unsubscribe.php

    r82178 r86539  
    8484                }
    8585        }
     86        effacer_meta("newsletter_subscribers_count");
    8687
    8788        return true;
  • _plugins_/mailsubscribers/trunk/paquet.xml

    r86498 r86539  
    22        prefix="mailsubscribers"
    33        categorie="communication"
    4         version="1.6.7"
     4        version="1.6.8"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
  • _plugins_/mailsubscribers/trunk/prive/squelettes/navigation/mailsubscribers.html

    r67911 r86539  
    66        <BOUCLE_listes(POUR){tableau #REM|mailsubscribers_listes}>
    77                <li class="item[(#ENV{liste}|=={#CLE}|oui)on]">[(#SELF|parametre_url{liste,#CLE}|lien_ou_expose{#VALEUR{titre},#ENV{liste}|=={#CLE}})]
    8                 [(#SET{listes,[(^|,)(#CLE)($|,)]})]
    9                 <BOUCLE_cpt(MAILSUBSCRIBERS){listes==#GET{listes}}{tout} />([(#TOTAL_BOUCLE)])<//B_cpt>
     8                ([(#CLE|mailsubscribers_compte_inscrits)])
    109                </li>
    1110        </BOUCLE_listes>
Note: See TracChangeset for help on using the changeset viewer.