Changeset 67911 in spip-zone


Ignore:
Timestamp:
Nov 23, 2012, 3:48:16 PM (7 years ago)
Author:
cedric@…
Message:
  • Obfuscation des emails des inscriptions suspendues : on reprend une bonne idee de clevermail qui consiste a masquer les emails suspendus par un md5@…. Si le meme email veut se reinscrire ou que l'on tente de creer un nouvel inscrit depuis le back-office avec cet email, il est repéré et on rétablit l'email grace à la saisie.


  • Gestion des listes de diffusion : filtre des inscription par liste, edition et titrage des listes depuis le formulaire de configuration.

Le plugin passe en v0.7 et en test car toute la TODO est implémentée.
Les installations des version dev doivent être désinstallées puis réinstallées pour garantir la structure de la base.

Location:
_plugins_/mailsubscribers/trunk
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsubscribers/trunk/formulaires/configurer_mailsubscribers.html

    r67853 r67911  
    3535                                </div>
    3636                        </li>
     37                        <li class="fieldset">
     38                                <fieldset>
     39                                        <legend><:mailsubscriberscfg:legend_listes_diffusion:></legend>
     40                                        #SET{tableau,#ARRAY{category,newsletter}|mailsubscribers_listes}
     41                                        <BOUCLE_listes(POUR){tableau #GET{tableau}|array_merge{#ARRAY{new1,#LISTE,new2,#LISTE}}}>
     42                                                #SET{index,#COMPTEUR_BOUCLE|moins{1}}
     43                                                <ul class="liste-diffusion">
     44                                                        #SET{name,id}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs/lists/#GET{index}/#GET{name}}}
     45                                                        <li class="editer editer_lists_[(#GET{index})]_#GET{name}[ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     46                                                                <label for="lists_[(#GET{index})]_#GET{name}">[(#GET{fl}|concat{':label_list_',#GET{name}}|_T)]</label>[
     47                                                                <span class='erreur_message'>(#GET{erreurs})</span>
     48                                                                ]<input type="text" name="lists[#GET{index}][#GET{name}]" class="text" value="#ENV*{lists/#GET{index}/#GET{name},#VALEUR{#GET{name}}}" id="lists_[(#GET{index})]_#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     49                                                        </li>
     50                                                        #SET{name,titre}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs/lists/#GET{index}/#GET{name}}}
     51                                                        <li class="editer editer_lists_[(#GET{index})]_#GET{name}[ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     52                                                                <label for="lists_[(#GET{index})]_#GET{name}">[(#GET{fl}|concat{':label_list_',#GET{name}}|_T)]</label>[
     53                                                                <span class='erreur_message'>(#GET{erreurs})</span>
     54                                                                ]<input type="text" name="lists[#GET{index}][#GET{name}]" class="text" value="#ENV*{lists/#GET{index}/#GET{name},#VALEUR{#GET{name}}}" id="lists_[(#GET{index})]_#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     55                                                        </li>
     56                                                        #SET{name,status}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs/lists/#GET{index}/#GET{name}}}
     57                                                        <li class="editer editer_lists_[(#GET{index})]_#GET{name}[ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     58                                                                <label for="lists_[(#GET{index})]_#GET{name}">[(#GET{fl}|concat{':label_list_',#GET{name}}|_T)]</label>[
     59                                                                <span class='erreur_message'>(#GET{erreurs})</span>
     60                                                                ]
     61                                                                #SET{val,open}
     62                                                                <div class="choix left">
     63                                                                        <input type="radio" name="lists[#GET{index}][#GET{name}]" class="radio" id="lists_[(#GET{index})]_#GET{name}_#GET{val}" value="#GET{val}"[(#ENV*{lists/#GET{index}/#GET{name},#VALEUR{#GET{name}}}|=={#GET{val}}|oui)checked="checked"] />
     64                                                                        <label for="lists_[(#GET{index})]_#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     65                                                                </div>
     66                                                                #SET{val,close}
     67                                                                <div class="choix right">
     68                                                                        <input type="radio" name="lists[#GET{index}][#GET{name}]" class="radio" id="lists_[(#GET{index})]_#GET{name}_#GET{val}" value="#GET{val}"[(#ENV*{lists/#GET{index}/#GET{name},#VALEUR{#GET{name}}}|=={#GET{val}}|oui)checked="checked"] />
     69                                                                        <label for="lists_[(#GET{index})]_#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     70                                                                </div>
     71                                                        </li>
     72                                                </ul>
     73                                        </BOUCLE_listes>
     74                                </fieldset>
     75                        </li>
     76
    3777                </ul>
    3878
     
    4181        </form>
    4282</div>
     83<style type="text/css">
     84ul.liste-diffusion {border-bottom: 1px solid #eee;padding-top: 1em !important;padding-bottom: 1em !important;}
     85ul.liste-diffusion .editer {padding-top: 2px;padding-bottom: 2px;}
     86ul.liste-diffusion .editer .choix.left {float: left}
     87ul.liste-diffusion .editer .choix.right {float: right}
     88</style>
  • _plugins_/mailsubscribers/trunk/formulaires/editer_mailsubscriber.php

    r67900 r67911  
    3333 */
    3434function formulaires_editer_mailsubscriber_verifier_dist($id_mailsubscriber='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
    35         $erreurs = formulaires_editer_objet_verifier('mailsubscriber',$id_mailsubscriber, array('email','listes'));
     35        $erreurs = formulaires_editer_objet_verifier('mailsubscriber',$id_mailsubscriber, array('email'));
    3636        if (!isset($erreurs['email'])){
    3737                $email = _request('email');
     
    5555function formulaires_editer_mailsubscriber_traiter_dist($id_mailsubscriber='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
    5656        set_request('lang',_request('langue'));
    57         set_request('listes',implode(',',_request('langue')));
     57        if (_request('listes'))
     58                set_request('listes',implode(',',_request('listes')));
     59
     60        // creation : verifier qu'on retombe pas sur un email obfusque, et dans ce cas se retablir dessus
     61        if (!intval($id_mailsubscriber)
     62                AND $id = sql_getfetsel('id_mailsubscriber','spip_mailsubscribers',"email=".sql_quote(mailsubscribers_obfusquer_email(_request('email')))))
     63                $id_mailsubscriber = $id;
    5864        return formulaires_editer_objet_traiter('mailsubscriber',$id_mailsubscriber,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
    5965}
  • _plugins_/mailsubscribers/trunk/formulaires/importer_mailsubscribers.php

    r67882 r67911  
    175175        $newsletter_subscribe = charger_fonction('subscribe','newsletter');
    176176        include_spip('inc/filtres'); // email_valide
    177         include_spip('action/editer_objet'); // email_valide
     177        include_spip('action/editer_objet');
     178        include_spip('inc/mailsubscribers');
    178179        set_request('id_auteur',''); // pas d'auteur associe a nos inscrits
    179180
     
    200201                                if (isset($set['listes'])) $set['listes'] = implode(',',$set['listes']);
    201202                                if (isset($d['date'])) $set['date'] = $d['date'];
    202                                 if ($id = sql_getfetsel("id_mailsubscriber","spip_mailsubscribers","email=".sql_quote($email))){
     203                                if ($id = sql_getfetsel("id_mailsubscriber","spip_mailsubscribers","email=".sql_quote($email)." OR email=".sql_quote(mailsubscribers_obfusquer_email($email)))){
     204                                        $set['email'] = $email; // si mail obfusque
    203205                                        $set['statut'] = $d['statut'];
    204206                                        objet_modifier("mailsubscriber",$id,$set);
  • _plugins_/mailsubscribers/trunk/inc/mailsubscribers.php

    r67900 r67911  
    3535}
    3636
     37function mailsubscribers_obfusquer_email($email){
     38        return md5($email)."@example.org";
     39}
    3740
    3841/**
     
    8083        if (isset($options['status']))
    8184                $filtrer_status = $options['status'];
     85        if (isset($options['category']))
     86                $filtrer_category = $options['category'];
    8287
    8388        $listes = array();
     
    9499                                if (!$filtrer_status OR $filtrer_status==$status) {
    95100                                        $listes[$id] = array(
     101                                                'id' => $id,
    96102                                                'titre' => $kl['titre'],
    97103                                                'status' => $status
     
    105111        // pas la peine si on a demande de filtrer les listes open ou close
    106112        if ($filtrer_status!=='?') {
    107                 $rows = sql_allfetsel("DISTINCT listes","spip_mailsubscribers","statut=".sql_quote('valide'));
     113                $rows = sql_allfetsel("DISTINCT listes","spip_mailsubscribers","statut!=".sql_quote('poubelle'));
    108114                foreach ($rows as $row){
    109115                        $ll = explode(",",$row['listes']);
    110116                        foreach($ll as $l){
    111 
    112117                                if ($id=$l
    113118                                        AND (
     
    115120                                        )){
    116121                                        if (!isset($listes[$id]))
    117                                                 $listes[$id] = array('titre'=>$id,'status'=>'?');
     122                                                $listes[$id] = array('id'=>$id,'titre'=>$id,'status'=>'?');
    118123                                }
    119124                        }
  • _plugins_/mailsubscribers/trunk/lang/mailsubscriber_fr.php

    r67898 r67911  
    2525        'icone_creer_mailsubscriber' => 'Ajouter une inscription',
    2626        'icone_modifier_mailsubscriber' => 'Modifier cette inscription',
    27         'info_1_mailsubscriber' => '1 inscrit à la newsletter',
    28         'info_aucun_mailsubscriber' => 'Aucun inscrit à la newsletter',
    29         'info_nb_mailsubscribers' => '@nb@ inscrits à la newsletter',
     27        'info_1_mailsubscriber' => '1 inscrit aux envois',
     28        'info_aucun_mailsubscriber' => 'Aucun inscrit aux envois',
     29        'info_nb_mailsubscribers' => '@nb@ inscrits aux envois',
    3030        'info_1_adresse_a_importer' => '1 adresse à importer',
    3131        'info_nb_adresses_a_importer' => '@nb@ adresses à importer',
     
    4545        'label_mailsubscriber_optin' => 'Je veux recevoir la Newsletter',
    4646        'label_file_import' => 'Fichier à importer',
     47        'label_toutes_les_listes' => 'Toutes',
    4748
    4849        // M
     
    7980        'titre_logo_mailsubscriber' => 'Logo de cet inscrit',
    8081        'titre_mailsubscriber' => 'Inscrit à la newsletter',
    81         'titre_mailsubscribers' => 'Inscrits à la newsletter',
     82        'titre_mailsubscribers' => 'Inscrits aux envois par email',
    8283        'titre_export_mailsubscribers' => 'Exporter les inscrits',
    8384        'titre_export_mailsubscribers_all' => 'Exporter toutes les adresses',
    8485        'titre_import_mailsubscribers' => 'Importer des adresses',
     86        'titre_listes_de_diffusion' => 'Listes de diffusion',
    8587
    8688
  • _plugins_/mailsubscribers/trunk/lang/mailsubscriberscfg_fr.php

    r67853 r67911  
    1212        'label_double_optin_1' => 'Double Opt-in (mail de confirmation avec lien de validation de l\'inscription)',
    1313
     14        'label_list_id' => 'Identifiant',
     15        'label_list_titre' => 'Nom de la liste',
     16        'label_list_status' => 'Statut',
     17        'label_status_open' => 'Ouverte',
     18        'label_status_close' => 'Fermee',
     19
    1420        'label_proposer_signup_optin_1'=> 'Proposer l\'inscription à la Newsletter lors de l\'inscription au site',
     21
     22        'legend_listes_diffusion' => 'Listes de diffusion',
    1523
    1624        // T
  • _plugins_/mailsubscribers/trunk/mailsubscribers_administrations.php

    r67897 r67911  
    214214                        else {
    215215                                // un abonnement suspendu est passe en md5(email)@example.com
    216                                 if (strpos($email,'@example.com')!==false)
     216                                if (strpos($email,'@example.com')!==false){
    217217                                        $set['statut'] = 'refuse';
     218                                        $email = str_replace("@example.com","@example.org",$email);
     219                                }
    218220                                else
    219221                                        $set['statut'] = 'prepa';
     
    235237        if (!$email) return false;
    236238        $GLOBALS['instituermailsubscriber_status'] = false;
    237         if ($id = sql_getfetsel("id_mailsubscriber","spip_mailsubscribers","email=".sql_quote($email))){
     239        if ($id = sql_getfetsel("id_mailsubscriber","spip_mailsubscribers","email=".sql_quote($email)." OR email=".sql_quote(mailsubscribers_obfusquer_email($email)))){
     240                $set['email'] = $email; // si mail obfusque
    238241                objet_modifier("mailsubscriber",$id,$set);
    239242                return $id;
  • _plugins_/mailsubscribers/trunk/mailsubscribers_pipelines.php

    r67853 r67911  
    2121                if (!isset($flux['data']['listes']))
    2222                        $flux['data']['listes'] = mailsubscribers_normaliser_nom_liste();
     23                if (!isset($flux['data']['email'])){
     24                        include_spip("inc/acces");
     25                        $flux['data']['email'] = creer_uniqid(); // eviter l'eventuel echec unicite sur email vide
     26                }
    2327        }
    2428        return $flux;
  • _plugins_/mailsubscribers/trunk/newsletter/subscribe.php

    r67867 r67911  
    5050
    5151        // chercher si un tel email est deja en base
    52         $row = sql_fetsel('*','spip_mailsubscribers','email='.sql_quote($email));
     52        $row = sql_fetsel('*','spip_mailsubscribers','email='.sql_quote($email)." OR email=".sql_quote(mailsubscribers_obfusquer_email($email)));
    5353
    5454        // Si c'est une creation d'inscrit
     
    6565                $set['date'] = date('Y-m-d H:i:s');
    6666
    67                 // Envoyer aux plugins
    68                 $champs = pipeline('pre_insertion',
    69                         array(
    70                                 'args' => array(
    71                                         'table' => 'spip_mailsubscribers',
    72                                 ),
    73                                 'data' => $set
    74                         )
    75                 );
    76 
    77                 if ($id = sql_insertq('spip_mailsubscribers', $set)){
    78 
    79                         pipeline('post_insertion',
    80                                 array(
    81                                         'args' => array(
    82                                                 'table' => 'spip_mailsubscribers',
    83                                                 'id_objet' => $id,
    84                                         ),
    85                                         'data' => $champs
    86                                 )
    87                         );
    88 
     67                if ($id = objet_inserer("mailsubscriber",0,$set)){
    8968                        $row = sql_fetsel('*','spip_mailsubscribers','id_mailsubscriber='.intval($id));
    9069                        $set = array();
     
    9776        }
    9877        else {
     78                $set['email'] = $email; // si email obfusque
    9979                // si on est graceful et que l'inscrit s'est deja desabonne, on ne fait rien
    10080                if ($row['statut']=='refuse'
  • _plugins_/mailsubscribers/trunk/newsletter/unsubscribe.php

    r67857 r67911  
    4646                        if (!count($listes)){
    4747                                $set['statut'] = "refuse";
     48                                $set['email'] = md5($email)."@example.org";
    4849                        }
    4950                }
     
    6263                        else {
    6364                                $set['statut'] = "refuse";
     65                                $set['email'] = mailsubscribers_obfusquer_email($email);
    6466                        }
    6567                }
  • _plugins_/mailsubscribers/trunk/paquet.xml

    r67902 r67911  
    22        prefix="mailsubscribers"
    33        categorie="communication"
    4         version="0.6.6"
    5         etat="dev"
     4        version="0.7.0"
     5        etat="test"
    66        compatibilite="[3.0.0;3.0.*]"
    77        logo="prive/themes/spip/images/mailsubscriber-32.png"
  • _plugins_/mailsubscribers/trunk/prive/squelettes/navigation/mailsubscribers.html

    r67902 r67911  
     1<!-- Filtrer par listes de diffusion -->
     2<B_listes>
     3        [(#BOITE_OUVRIR{<h3><:mailsubscriber:titre_listes_de_diffusion:></h3>,simple})]
     4        <ul class="liste-items">
     5                <li class="item[(#ENV{liste}|trim|non)on]">[(#SELF|parametre_url{liste,' '}|lien_ou_expose{<:mailsubscriber:label_toutes_les_listes:>,#ENV{liste}|trim|non})]</li>
     6        <BOUCLE_listes(POUR){tableau #REM|mailsubscribers_listes}>
     7                <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>
     10                </li>
     11        </BOUCLE_listes>
     12        </ul>
     13        #BOITE_FERMER
     14</B_listes>
     15
    116[(#AUTORISER{exporter,_mailsubscribers}|oui)
    217#BOITE_OUVRIR{'','raccourcis'}
     
    2035]
    2136
    22 
    23 <!-- Filtrer par listes de diffusion -->
    24 <B_listes>
    25         <div class="listes">
    26                 <h3>Listes</h3>
    27         <ul class="liste-items">
    28                 <li class="item[(#ENV{liste}|non)on]">[(#SELF|parametre_url{liste,' '}|lien_ou_expose{Toutes,#ENV{liste}|trim|non})]</li>
    29         <BOUCLE_listes(POUR){tableau #REM|mailsubscribers_listes}>
    30                 <li class="item[(#ENV{liste}|=={#CLE}|oui)on]">[(#SELF|parametre_url{liste,#CLE}|lien_ou_expose{#VALEUR{titre},#ENV{liste}|=={#CLE}})]</li>
    31         </BOUCLE_listes>
    32         </ul>
    33         </div>
    34 </B_listes>
Note: See TracChangeset for help on using the changeset viewer.