Changeset 67843 in spip-zone


Ignore:
Timestamp:
Nov 21, 2012, 4:35:15 PM (7 years ago)
Author:
cedric@…
Message:

Implementation de l'API newsletter (qq modifs dans la spec, cf PHPDoc)
+ renommage du champ abonnements en listes
+ prise en charge des listes dans l'API, interface reste à faire

Location:
_plugins_/mailsuscribers
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsuscribers/base/mailsuscribers.php

    r67831 r67843  
    3232                        "email"              => "text NOT NULL DEFAULT ''",
    3333                        "nom"                => "text NOT NULL DEFAULT ''",
    34                         "abonnements"        => "text NOT NULL DEFAULT ''",
     34                        "listes"             => "text NOT NULL DEFAULT ''",
    3535                        "optin"              => "text NOT NULL DEFAULT ''",
    3636                        "date"               => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
     
    4747                'titre' => "email AS titre, lang AS lang",
    4848                'date' => "date",
    49                 'champs_editables'  => array('email', 'nom', 'abonnements', 'lang'),
    50                 'champs_versionnes' => array('email', 'nom', 'abonnements', 'lang'),
     49                'champs_editables'  => array('email', 'nom', 'listes', 'lang'),
     50                'champs_versionnes' => array('email', 'nom', 'listes', 'lang'),
    5151                'rechercher_champs' => array("email" => 1, "nom" => 1),
    5252                'tables_jointures'  => array(),
  • _plugins_/mailsuscribers/lang/mailsuscriber_fr.php

    r67840 r67843  
    3030
    3131        // L
    32         'label_abonnements' => 'Abonnements',
     32        'label_listes' => 'Listes',
    3333        'label_email' => 'Email',
    3434        'label_lang' => 'Langue',
  • _plugins_/mailsuscribers/mailsuscribers_administrations.php

    r67831 r67843  
    1414function mailsuscribers_upgrade($nom_meta_base_version, $version_cible) {
    1515        $maj = array();
     16        include_spip("inc/mailsuscribers");
    1617
    1718        $maj['create'] = array(
     
    2021
    2122        $maj['0.1.1'] = array(
    22                 array('maj_tables', array('spip_mailsuscribers'))
     23                array('maj_tables', array('spip_mailsuscribers')),
     24        );
     25        $maj['0.1.2'] = array(
     26                array('sql_alter',"TABLE spip_mailsuscribers CHANGE abonnements listes text NOT NULL DEFAULT ''"),
     27        );
     28        $maj['0.1.3'] = array(
     29                array('sql_updateq',"spip_mailsuscribers",array('listes'=>mailsuscribers_normaliser_nom_liste()),"listes=".sql_quote('')),
    2330        );
    2431
  • _plugins_/mailsuscribers/mailsuscribers_pipelines.php

    r67840 r67843  
    1818                include_spip("inc/acces");
    1919                $flux['data']['jeton'] = creer_uniqid();
     20                include_spip("inc/mailsuscribers");
     21                if (!isset($flux['data']['listes']))
     22                        $flux['data']['listes'] = mailsuscribers_normaliser_nom_liste();
    2023        }
    2124        return $flux;
  • _plugins_/mailsuscribers/newsletter/suscribe.php

    r67839 r67843  
    99if (!defined('_ECRIRE_INC_VERSION')) return;
    1010
     11include_spip("action/editer_objet");
     12include_spip('inc/mailsuscribers');
     13include_spip('inc/lire_config');
     14include_spip('inc/autoriser');
    1115
    1216/**
     
    2731 *   listes : array (si non fourni, inscrit a la liste generale 'newsletter')
    2832 *   lang : string
     33 *   force : bool permet de forcer une inscription sans doubleoptin (passe direct en valide)
    2934 * @return bool
    30  *   true si desinscrit comme demande, false sinon
     35 *   true si inscrit comme demande, false sinon
    3136 */
    3237function newsletter_suscribe_dist($email,$options = array()){
    3338
     39        $set = array();
     40        foreach (array('lang', 'nom') as $k){
     41                if (isset($options[$k]))
     42                        $set[$k] = $options[$k];
     43        }
     44        if (isset($options['listes'])
     45          AND is_array($options['listes'])){
     46                $set['listes'] = array_map('mailsuscribers_normaliser_nom_liste',$options['listes']);
     47                $set['listes'] = implode(',',$set['listes']);
     48        }
     49
     50        // chercher si un tel email est deja en base
     51        $row = sql_fetsel('*','spip_mailsuscribers','email='.sql_quote($email));
     52
     53        // Si c'est une creation d'inscrit
     54        if (!$row){
     55                // on utilise pas objet_inserer car email unique et on ne veut pas passer par etape insertion email='' qui peut echouer
     56                // en cas de doublon
     57                $set['email'] = $email;
     58                if (!isset($set['lang']))
     59                        $set['lang'] = $GLOBALS['meta']['langue_site'];
     60                if (!isset($set['listes']))
     61                        $set['listes'] = mailsuscribers_normaliser_nom_liste();
     62
     63                // Envoyer aux plugins
     64                $champs = pipeline('pre_insertion',
     65                        array(
     66                                'args' => array(
     67                                        'table' => 'spip_mailsuscribers',
     68                                ),
     69                                'data' => $set
     70                        )
     71                );
     72
     73                if ($id = sql_insertq('spip_mailsuscribers', $set)){
     74
     75                        pipeline('post_insertion',
     76                                array(
     77                                        'args' => array(
     78                                                'table' => 'spip_mailsuscribers',
     79                                                'id_objet' => $id,
     80                                        ),
     81                                        'data' => $champs
     82                                )
     83                        );
     84
     85                        $row = sql_fetsel('*','spip_mailsuscribers','id_mailsuscriber='.intval($id));
     86                        $set = array();
     87                }
     88
     89                else {
     90                        spip_log("Impossible de creer un mailsuscriber : ".var_export($set,true),"mailsuscribers."._LOG_ERREUR);
     91                        return false;
     92                }
     93        }
     94        else {
     95                if (!$row['listes'] AND !isset($set['listes']))
     96                        $set['listes'] = mailsuscribers_normaliser_nom_liste();
     97                // si c'est un inscrit existant faire les mises a jour des listes si besoins
     98                if (isset($set['listes'])){
     99                        $set['listes'] = array_merge(explode(',',$row['listes']),explode(',',$set['listes']));
     100                        $set['listes'] = array_map('trim',$set['listes']);
     101                        $set['listes'] = array_unique($set['listes']);
     102                        $set['listes'] = array_filter($set['listes']);
     103                        $set['listes'] = implode(",",$set['listes']);
     104                        if (!$set['listes'])
     105                                $set['listes'] = mailsuscribers_normaliser_nom_liste();
     106                }
     107        }
     108
     109        // si pas deja valide
     110        if ($row['statut']!=='valide'){
     111                // changer le statut en prop (doubleoptin) ou valide (simpleoptin)
     112                if (
     113                        (isset($options['force']) AND $options['force'])
     114                        OR !lire_config('mailsuscribers/double_optin',0)){
     115
     116                        $set['statut'] = 'valide';
     117                }
     118                else {
     119                        $set['statut'] = 'prop';
     120                }
     121        }
     122
     123        if (count($set)){
     124                autoriser_exception("modifier","mailsuscriber",$row['id_mailsuscriber']);
     125                objet_modifier("mailsuscriber",$row['id_mailsuscriber'],$set);
     126                autoriser_exception("modifier","mailsuscriber",$row['id_mailsuscriber'],false);
     127        }
     128
    34129        return true;
    35130}
  • _plugins_/mailsuscribers/newsletter/suscriber.php

    r67839 r67843  
    99if (!defined('_ECRIRE_INC_VERSION')) return;
    1010
     11include_spip('mailsuscribers_fonctions');
    1112
    1213/**
     
    1920 *   false si n'existe pas
    2021 *   array :
     22 *     email : string
    2123 *     nom : string
    2224 *     listes : array
     
    2729function newsletter_suscriber_dist($email){
    2830
     31        // chercher si un tel email est deja en base
     32        $infos = sql_fetsel('email,nom,listes,lang,statut,jeton','spip_mailsuscribers','email='.sql_quote($email));
     33        if ($infos){
     34                $infos['listes'] = explode(",",$infos['listes']);
     35                if ($infos['statut']=='valide')
     36                        $infos['status']=='on';
     37                elseif (in_array($infos['statut'],array('prepa','prop'))){
     38                        $infos['status']=='pending';
     39                }
     40                else {
     41                        $infos['status']=='off';
     42                }
     43                unset($infos['statut']);
     44
     45                $infos['url_unsuscribe'] = mailsuscriber_url_unsuscribe($infos['email'],$infos['jeton']);
     46                unset($infos['jeton']);
     47
     48                return $infos;
     49        }
     50
    2951        return false;
    3052}
  • _plugins_/mailsuscribers/newsletter/suscribers.php

    r67839 r67843  
    99if (!defined('_ECRIRE_INC_VERSION')) return;
    1010
     11include_spip('inc/mailsuscribers');
     12include_spip('mailsuscribers_fonctions');
    1113
    1214/**
     
    2426function newsletter_suscribers_dist($listes = array(),$options = array()){
    2527
    26         // est-ce qu'on veut simplement compter ?
    27         if (isset($options['count'])  AND $options['count'])
    28                 return 0;
     28        $select = "email,nom,listes,lang,'on' AS status,jeton";
     29        $where = array('statut='.sql_quote('valide'));
     30        $limit = "";
     31        if ($listes AND is_array($listes)){
     32                $sous_where = array();
     33                foreach ($listes as $l){
     34                        $l = mailsuscribers_normaliser_nom_liste($l);
     35                        $sous_where[] = "listes REGEXP ".sql_quote('(,|^)'.$l.'(,|$)');
     36                }
     37                if (count($sous_where)){
     38                        $sous_where = "(".implode(" OR ",$sous_where).")";
     39                        $where[] = $sous_where;
     40                }
     41        }
    2942
    30         return array();
     43        // si simple comptage
     44        if (isset($options['count']) AND $options['count'])
     45                return sql_countsel("spip_mailsuscribers",$where);
     46
     47        if (isset($options['limit']) AND $options['limit'])
     48                $limit = $options['limit'];
     49
     50        // selection, par date
     51        // ca permet ainsi que les derniers inscrits (en cours de diffusion) se retrouvent dans le dernier lot
     52        // et premier inscrits, premiers servis
     53        $rows = sql_allfetsel($select,"spip_mailsuscribers",$where,"","date",$limit);
     54        $rows = array_map('mailsuscribers_informe_suscriber',$rows);
     55
     56        return $rows;
    3157}
     58
     59/**
     60 * Informer un suscriber : ici juste l'url unsuscribe a calculer
     61 * @param array $infos
     62 * @return array mixed
     63 */
     64function mailsuscribers_informe_suscriber($infos){
     65        $infos['listes'] = explode(',',$infos['listes']);
     66        $infos['url_unsuscribe'] = mailsuscriber_url_unsuscribe($infos['email'],$infos['jeton']);
     67        unset($infos['jeton']);
     68        return $infos;
     69}
  • _plugins_/mailsuscribers/newsletter/unsuscribe.php

    r67839 r67843  
    99if (!defined('_ECRIRE_INC_VERSION')) return;
    1010
     11include_spip("action/editer_objet");
     12include_spip('inc/mailsuscribers');
     13include_spip('inc/lire_config');
     14include_spip('inc/autoriser');
    1115
    1216/**
     
    1418 * si une ou plusieurs listes precisees, le suscriber est desinscrit de ces seules listes
    1519 * si il n'en reste aucune, le statut du suscriber est suspendu
     20 *
    1621 * si aucune liste precisee, le suscriber est desinscrit de toutes les listes newsletter*
    1722 *
     
    2328 *   true si inscrit, false sinon
    2429 */
    25 function newsletter_desinscrire_suscriber_dist($email,$options = array()){
     30function newsletter_unsuscribe_dist($email,$options = array()){
     31
     32        // chercher si un tel email est deja en base
     33        $row = sql_fetsel('*','spip_mailsuscribers','email='.sql_quote($email));
     34        if ($row AND $row['statut']!=='poubelle'){
     35
     36                $set = array();
     37                $listes = explode(",",$row['listes']);
     38                $listes = array_map('trim',$listes);
     39                $listes = array_unique($listes);
     40                $listes = array_filter($listes);
     41
     42                if (isset($options['listes'])){
     43                        $retire = array_map('mailsuscribers_normaliser_nom_liste',$options['listes']);
     44                        $listes = array_diff($listes,$retire);
     45                        $set['listes'] = implode(",",$listes);
     46                        if (!count($listes)){
     47                                $set['statut'] = "refuse";
     48                        }
     49                }
     50                else {
     51                        // aucune liste precisee : on veut desabonner de toutes les newsletter
     52                        // si il n'y a que des newsletter:: on y touche pas et on change simplement le statut
     53                        // si il y a d'autres inscriptions, on ne laisse que celles-ci
     54                        $restantes = array();
     55                        foreach ($listes as $l){
     56                                if ($l!=="newsletter" AND strncmp($l,'newsletter::',12)!==0)
     57                                        $restantes[] = $l;
     58                        }
     59                        if (count($restantes)){
     60                                $set['listes'] = implode(",",$restantes);
     61                        }
     62                        else {
     63                                $set['statut'] = "refuse";
     64                        }
     65                }
     66
     67                if (count($set)){
     68                        autoriser_exception("modifier","mailsuscriber",$row['id_mailsuscriber']);
     69                        objet_modifier("mailsuscriber",$row['id_mailsuscriber'],$set);
     70                        autoriser_exception("modifier","mailsuscriber",$row['id_mailsuscriber'],false);
     71                }
     72        }
    2673
    2774        return true;
  • _plugins_/mailsuscribers/paquet.xml

    r67840 r67843  
    22        prefix="mailsuscribers"
    33        categorie="communication"
    4         version="0.1.6"
     4        version="0.2.0"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.0.*]"
    77        logo="prive/themes/spip/images/mailsuscriber-32.png"
    88        documentation="http://contrib.spip.net/mailsuscribers"
    9         schema="0.1.1"
     9        schema="0.1.3"
    1010>
    1111        <nom>Newsletter.Inscription</nom>
  • _plugins_/mailsuscribers/prive/objets/contenu/mailsuscriber.html

    r67831 r67843  
    1111</div>]
    1212
    13 [<div class="champ contenu_abonnements[ (#ABONNEMENTS*|strlen|?{'',vide})]">
    14         <div class='label'><:mailsuscriber:label_abonnements:> : </div>
    15         <span dir='#LANG_DIR' class='#EDIT{abonnements} abonnements'>(#ABONNEMENTS)</span>
     13[<div class="champ contenu_listes[ (#LISTES*|strlen|?{'',vide})]">
     14        <div class='label'><:mailsuscriber:label_listes:> : </div>
     15        <span dir='#LANG_DIR' class='#EDIT{listes} listes'>(#LISTES)</span>
    1616</div>]
    1717
  • _plugins_/mailsuscribers/prive/style_prive_plugin_mailsuscriber.html

    r67831 r67843  
    33]
    44
     5.mailsuscriber #wysiwyg .contenu_email {display:none;}
    56.mailsuscriber #wysiwyg .contenu_lang {margin:0.5em 0;}
    67.mailsuscriber #wysiwyg .contenu_lang .label {display: inline}
     8.mailsuscriber #wysiwyg .contenu_nom {font-weight: bold;}
     9.mailsuscriber #wysiwyg .contenu_nom .label {display: inline}
     10.mailsuscriber #wysiwyg .contenu_listes .label {display: inline}
     11
    712.mailsuscriber #wysiwyg .contenu_optin {margin:1em 0;}
    813.mailsuscriber #wysiwyg .contenu_optin .label {display: block}
Note: See TracChangeset for help on using the changeset viewer.