Changeset 77629 in spip-zone


Ignore:
Timestamp:
Oct 24, 2013, 5:11:54 PM (6 years ago)
Author:
cedric@…
Message:

Revision des imports d'inscrit par fichier CSV : la constitution d'un fichier CSV bien formaté est un peu trop pénible pour la plupart des cas.
Si le fichier ne fournit pas de statut, on propose une case a cocher pour inscrire toutes les adresses importées
Si le fichier ne précise pas pour quelles listes, on propose de cocher pour quelles listes on veut inscrire les adresses importées
Et pour courroner le tout, on reconnait les en-tetes des CSV fournit par mailchimp (il suffit juste de passer les header en minuscule, d'ajouter le prenom au nom, et de reconnaitre le champ de date de confirmation)

Location:
_plugins_/mailsubscribers/trunk
Files:
4 edited

Legend:

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

    r68844 r77629  
    2626                                (#ENV**{erreurs/test}|propre)
    2727                                </div>
     28                                <style>
     29                                        .fieldset table.spip {width:100%;max-width: 100%;}
     30                                </style>
    2831                        </li>
     32                        [(#ENV{erreurs/demander_listes}|oui)
     33                        #SET{name,listes_import_subscribers}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     34                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     35                                <label>[(#GET{fl}|concat{':label_',#GET{name}}|_T)]</label>[
     36                                <span class='erreur_message'>(#GET{erreurs})</span>
     37                                ]
     38                                <INCLURE{fond=formulaires/inc-check-subscribinglists,name=#GET{name},choix_listes=#ENV{_listes_dispo},status=open,env} />
     39                        </li>
     40                        ]
     41                        [(#ENV{erreurs/demander_statut}|oui)
     42                        #SET{name,valid_subscribers}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     43                        <li class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[
     44                                <span class='erreur_message'>(#GET{erreurs})</span>
     45                                ]
     46                                #SET{val,0}
     47                                <input type="hidden" name="#GET{name}" value="#GET{val}" />
     48                                #SET{val,1}
     49                                <div class="choix">
     50                                        <input type="checkbox" name="#GET{name}" class="checkbox" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#GET{defaut}}|=={#GET{val}}|oui)checked="checked"] />
     51                                        <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label>
     52                                </div>
     53                        </li>
     54                        ]
    2955                        #SET{name,desactiver_notif}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
    3056                        <li class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[
  • _plugins_/mailsubscribers/trunk/formulaires/importer_mailsubscribers.php

    r75280 r77629  
    88if (!defined('_ECRIRE_INC_VERSION')) return;
    99include_spip('inc/session');
     10include_spip('inc/mailsubscribers');
    1011
    1112/**
     
    1516        $valeurs = array(
    1617                'file_import' => '',
     18                'valid_subscribers' => '',
     19                'listes_import_subscribers' => '',
    1720                'desactiver_notif' => '',
    1821                'vider_table' => '',
    1922        );
     23
     24        $valeurs['_listes_dispo'] = mailsubscribers_listes();
    2025        return $valeurs;
    2126}
     
    5055
    5156                $erreurs['test'] = "";
    52                 if (in_array("statut",$head)){
     57                if (in_array("statut",$head) AND in_array("listes",$head)){
    5358                        $erreurs['test'] .= "<p class='notice'>"._T('mailsubscriber:texte_avertissement_import')."</p>";
    5459                }
     
    6065                }
    6166                $erreurs['test'] .= "\n";
    62                 $erreurs['test'] .= "{{".singulier_ou_pluriel($count,'mailsubscriber:info_1_adresse_a_importer','mailsubscriber:info_nb_adresses_a_importer')."}}";
     67                $erreurs['test'] .= "<p class='explication'>{{".singulier_ou_pluriel($count,'mailsubscriber:info_1_adresse_a_importer','mailsubscriber:info_nb_adresses_a_importer')."}}</p>";
     68
     69                if (!in_array("statut",$head)){
     70                        $erreurs['demander_statut'] = ' ';
     71                }
     72                if (!in_array("listes",$head)){
     73                        $erreurs['demander_listes'] = ' ';
     74                }
    6375        }
    6476
     
    8092
    8193        $res = array('editable'=>true);
    82         $r = importer_mailsubscribers_importe(session_get('importer_mailsubscribers::filename'));
     94        $options = array();
     95        if (_request('valid_subscribers'))
     96                $options['statut'] = 'valide';
     97        if ($l = _request('listes_import_subscribers'))
     98                $options['listes'] = $l;
     99        $r = importer_mailsubscribers_importe(session_get('importer_mailsubscribers::filename'), $options);
    83100
    84101        $message =
     
    168185        $data = array();
    169186        while ($data_raw AND count($data_raw)){
    170                 $d = array_shift($data_raw);
    171                 if ($d){
    172                         if (isset($d['email']))
    173                                 $data[] = $d;
    174                         else
    175                                 $data[] = array('email'=>reset($d));
    176                 }
     187
     188                $row = array_shift($data_raw);
     189                $row = array_combine(array_map('strtolower',array_keys($row)),array_values($row));
     190
     191                $d = array();
     192                if (isset($row['email']))
     193                        $d['email'] = $row['email'];
     194                else
     195                        $d['email'] = reset($row);
     196
     197                foreach(array('nom','lang','listes','statut','date') as $k)
     198                        if (isset($row[$k]))
     199                                $d[$k] = $row[$k];
     200
     201                // Mailchimp
     202                if (isset($row['prenom'])){
     203                        $d['nom'] = trim($row['prenom'] . (isset($d['nom'])?" ".$d['nom']:""));
     204                }
     205                if (isset($row['confirm_time']) AND !isset($d['date'])){
     206                        $d['date'] = $row['confirm_time'];
     207                        if (!isset($d['statut']))
     208                                $d['statut'] = 'valide';
     209                }
     210
     211                $data[] = $d;
    177212        }
    178213
     
    180215}
    181216
    182 function importer_mailsubscribers_importe($filename){
     217/**
     218 *
     219 * @param string $filename
     220 * @param array $options
     221 *   statut
     222 *   listes
     223 * @return array
     224 */
     225function importer_mailsubscribers_importe($filename,$options=array()){
    183226        $res = array('count'=>0,'erreurs'=>array());
    184227
     
    196239                // mais graceful (sans forcer le reabonnement d'un desabonne)
    197240                $email = $d['email'];
    198                 if (email_valide($email) AND !mailsubscribers_test_email_obfusque($email)){
     241                if ($email AND email_valide($email) AND !mailsubscribers_test_email_obfusque($email)){
    199242                        $set = array();
    200243                        if (isset($d['nom'])) $set['nom'] = $d['nom'];
    201244                        if (isset($d['lang'])) $set['lang'] = $d['lang'];
    202245                        if (isset($d['listes'])) $set['listes'] = explode(',',$d['listes']);
     246
     247                        if (!isset($d['statut']) AND isset($options['statut']))
     248                                $d['statut'] = $options['statut'];
     249                        if (!isset($set['listes']) AND isset($options['listes']) AND is_array($options['listes']))
     250                                $set['listes'] = $options['listes'];
    203251
    204252                        if (!isset($d['statut'])){
     
    212260                                if (isset($set['listes'])) $set['listes'] = implode(',',$set['listes']);
    213261                                if (isset($d['date'])) $set['date'] = $d['date'];
    214                                 if ($id = sql_getfetsel("id_mailsubscriber","spip_mailsubscribers","email=".sql_quote($email)." OR email=".sql_quote(mailsubscribers_obfusquer_email($email)))){
     262                                if ($row = sql_fetsel("id_mailsubscriber,listes","spip_mailsubscribers","email=".sql_quote($email)." OR email=".sql_quote(mailsubscribers_obfusquer_email($email)))
     263                                  AND $id = $row["id_mailsubscriber"]){
    215264                                        $set['email'] = $email; // si mail obfusque
    216265                                        $set['statut'] = $d['statut'];
     266                                        // si la liste vient des options on la merge avec l'existante
     267                                        if (!isset($d['listes']) AND isset($set['listes']) AND $row['listes']){
     268                                                $l = array_unique(array_merge(explode(",",$row['listes']),explode(",",$set['listes'])));
     269                                                $set['listes'] = implode(",",$l);
     270                                        }
    217271                                        objet_modifier("mailsubscriber",$id,$set);
    218272                                        $res['count']++;
     
    233287                }
    234288                else {
    235                         $res['erreurs'][] = "email invalide \"<tt>$email</tt>\"";
    236                 }
    237         }
     289                        // ne pas produire une erreur pour un email vide
     290                        if ($email)
     291                                $res['erreurs'][] = "email invalide \"<tt>$email</tt>\"";
     292                }
     293        }
     294
     295        // debloquer les flags edition
     296        include_spip('inc/drapeau_edition');
     297        debloquer_tous($GLOBALS['visiteur_session']['id_auteur']);
     298
    238299
    239300        return $res;
  • _plugins_/mailsubscribers/trunk/lang/mailsubscriber_fr.php

    r72726 r77629  
    4545        'label_mailsubscriber_optin' => 'Je veux recevoir la Newsletter',
    4646        'label_file_import' => 'Fichier à importer',
     47        'label_listes_import_subscribers' => 'Inscrire aux listes',
    4748        'label_toutes_les_listes' => 'Toutes',
    4849        'label_desactiver_notif_1' => 'Desactiver la notification des inscriptions pour cet import',
     50        'label_valid_subscribers_1' => 'Valider directement les inscriptions sans demande de confirmation',
    4951        'label_vider_table_1' => 'Supprimer toutes les adresses en base avant cet import',
    5052
  • _plugins_/mailsubscribers/trunk/paquet.xml

    r76531 r77629  
    22        prefix="mailsubscribers"
    33        categorie="communication"
    4         version="1.3.5"
     4        version="1.4.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.