Changeset 101264 in spip-zone


Ignore:
Timestamp:
Dec 21, 2016, 5:40:35 PM (4 years ago)
Author:
tcharlss@…
Message:

version 3.1.14 : gestion des notifications *après* et *le jour même* des échéances. Depuis r99536 (version 3.1.6) on peut configurer des notifications après la date d'échéance, sauf que ces notifications ne partaient pas (attention aux copier/coller dans le code !), et de plus le contenu du mail ne prévoyait pas ce cas de figure.

Donc on fait les adaptations nécessaires pour ça. Quelques retouches au formulaire de configuration des notifs pour les afficher de façon un peu plus claire (« un jour avant » au lieu de « -1 jours » par ex.), les trier par date (avant, le jour même, après), et ajout d'une option « le jour même » dans le select, plus simple que de devoir mettre une durée de 0.

Pour le contenu du mail, obligé de scinder l'unique chaîne de langue en plusieurs parties pour prendre en compte tous les cas de figure.

Location:
_plugins_/abonnements/trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/abonnements/trunk/abonnements_administrations.php

    r101144 r101264  
    5252        );
    5353
     54        // Ajout d'une valeur possible au champ `quand`
     55        $maj['2.2.6'] = array(
     56                array('sql_alter',"TABLE spip_abonnements_offres_notifications CHANGE `quand` `quand` ENUM('avant','apres','pendant') DEFAULT 'avant' NOT NULL")
     57        );
     58
    5459        include_spip('base/upgrade');
    5560        maj_plugin($nom_meta_base_version, $version_cible, $maj);
  • _plugins_/abonnements/trunk/base/abonnements.php

    r99535 r101264  
    140140                        'duree' => 'int(11) NOT NULL DEFAULT 0',
    141141                        'periode' => 'varchar(25) NOT NULL DEFAULT ""',
    142                         'quand' => 'ENUM("avant","apres") DEFAULT "avant" NOT NULL',
     142                        'quand' => 'ENUM("avant","apres","pendant") DEFAULT "avant" NOT NULL',
    143143                ),
    144144                'key' => array(
  • _plugins_/abonnements/trunk/formulaires/editer_abonnements_offre_notifications.html

    r99537 r101264  
    11<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
     2        <h3 class="titrem">[(#CHEMIN_IMAGE{notifications-24}|balise_img{'','cadre-icone'})]<:abonnementsoffre:configurer_notifications:></h3>
    23        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
    34        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
     
    89                #ACTION_FORMULAIRE{#ENV{action}}
    910
     11                [(#REM) Liste des notifications enregistrées ]
    1012                <div class="liste-objets liste-objets-lies abonnements_offres_notifications">
    1113                        <table class="spip liste">
    12                                 <caption><strong class="caption"><:abonnementsoffre:configurer_notifications:></strong></caption>
    1314                                <thead>
    1415                                        <tr class="first_row">
     
    1819                                </thead>
    1920                                <tbody>
    20                                         <BOUCLE_notifications(ABONNEMENTS_OFFRES_NOTIFICATIONS){id_abonnements_offre}{!par periode}{!par duree}>
     21                                        [(#REM) Afficher les notifications dans l'ordre : avant, pendant, puis après l'échéance ]
     22                                        <BOUCLE_ordre(DATA){source table, #LISTE{avant,pendant,apres}}>
     23                                        <BOUCLE_notifications(ABONNEMENTS_OFFRES_NOTIFICATIONS)
     24                                                {id_abonnements_offre}
     25                                                {quand=#VALEUR}
     26                                                {par periode}{inverse #VALEUR|=={apres}|?{0,1}}
     27                                                {par duree}{inverse #VALEUR|=={apres}|?{0,1}}>
     28                                        #SET{is_notifications,oui}
    2129                                        <tr>
    2230                                                <td class="duree principale">
    23                                                         [(#QUAND|=={avant}|oui)-][(#QUAND|=={avant}|non)+][(#VAL{abonnementsoffre:champ_periode_nb_}|concat{#PERIODE}|_T{#ARRAY{nb,#DUREE}})]
     31                                                        [(#QUAND|=={pendant}|?{
     32                                                                <:abonnementsoffre:champ_quand_choix_pendant:>,
     33                                                                [(#DUREE|singulier_ou_pluriel{abonnementsoffre:info_1_[(#PERIODE)]_[(#QUAND)],abonnementsoffre:info_nb_[(#PERIODE)]_[(#QUAND)]})]
     34                                                        })]
    2435                                                </td>
    2536                                                <td class="supprimer">
     
    3142                                        </tr>
    3243                                        </BOUCLE_notifications>
     44                                        </BOUCLE_ordre>
     45                                        [(#GET{is_notifications}|non)
    3346                                        <tr>
    34                                                 <td colspan="2">Aucune notification</td>
     47                                                <td colspan="2"><:abonnementsoffre:info_aucune_notification:></td>
    3548                                        </tr>
    36                                         <//B_notifications>
     49                                        ]
    3750                                </tbody>
    3851                        </table>
    3952                </div>
    4053
    41                 <ul>
     54                <[(#DIV|sinon{ul})] class="editer-groupe">
    4255                        #GENERER_SAISIES{#ENV{_saisies}}
    43                 </ul>
     56                </[(#DIV|sinon{ul})]>
    4457
    4558                [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
  • _plugins_/abonnements/trunk/formulaires/editer_abonnements_offre_notifications.php

    r99536 r101264  
    77        return array(
    88                array(
     9                        'saisie' => 'selection',
     10                        'options' => array(
     11                                'nom' => 'quand',
     12                                'label' => _T('abonnementsoffre:champ_quand_label'),
     13                                'cacher_option_intro' => 'oui',
     14                                'datas' => array(
     15                                        'apres' => _T('abonnementsoffre:champ_quand_choix_apres'),
     16                                        'avant' => _T('abonnementsoffre:champ_quand_choix_avant'),
     17                                        'pendant' => _T('abonnementsoffre:champ_quand_choix_pendant'),
     18                                ),
     19                                'defaut' => 'avant',
     20                        ),
     21                ),
     22                array(
    923                        'saisie' => 'input',
    1024                        'options' => array(
     
    1226                                'label' => _T('abonnementsoffre:champ_duree_label'),
    1327                                'defaut' => '',
     28                                'afficher_si_remplissage' => '@quand@ !== "pendant"',
    1429                        ),
    1530                        'verifier' => array(
    1631                                'type' => 'entier',
    1732                                'options' => array(
    18                                         'min' => (_request('periode') == 'jours') ? 0 : 1,
     33                                        'min' => 0,
    1934                                ),
    2035                        ),
     
    3146                                ),
    3247                                'defaut' => 'mois',
    33                         ),
    34                 ),
    35                 array(
    36                         'saisie' => 'selection',
    37                         'options' => array(
    38                                 'nom' => 'quand',
    39                                 'label' => _T('abonnementsoffre:champ_quand_label'),
    40                                 'cacher_option_intro' => 'oui',
    41                                 'datas' => array(
    42                                         'apres' => _T('abonnementsoffre:champ_quand_choix_apres'),
    43                                         'avant' => _T('abonnementsoffre:champ_quand_choix_avant'),
    44                                 ),
    45                                 'defaut' => 'avant',
     48                                'afficher_si_remplissage' => '@quand@ !== "pendant"',
    4649                        ),
    4750                ),
     
    6669       
    6770        if (!$supprimer = _request('supprimer')){
    68                 if (!strlen(_request('duree'))){
     71                $duree   = _request('duree');
     72                $periode = _request('periode');
     73                $quand   = _request('quand');
     74                // Normalisons les valeurs pour les notifs le jour même
     75                if ($quand == 'pendant'
     76                        or (
     77                                        $quand != 'pendant'
     78                                        and $duree == 0
     79                                )
     80                ){
     81                        $duree   = 0;
     82                        $periode = 'jours';
     83                        $quand   = 'pendant';
     84                        set_request('duree', $duree);
     85                        set_request('periode', $periode);
     86                        set_request('quand', $quand);
     87                }
     88                // Durée obligatoire
     89                // (ne pas utiliser l'option "obligatoire" des saisies car on ne pourrait pas supprimer)
     90                if (!strlen($duree)){
    6991                        $erreurs['duree'] = _T('info_obligatoire');
     92                }
     93                // Vérifier les doublons
     94                if (sql_countsel('spip_abonnements_offres_notifications', array(
     95                        'id_abonnements_offre = ' . intval($id_abonnements_offre),
     96                        'duree = ' . intval($duree),
     97                        'periode = ' . sql_quote($periode),
     98                        'quand = ' . sql_quote($quand),
     99                ))){
     100                        $erreurs['message_erreur'] = _T('abonnementsoffre:erreur_notification_doublon');
    70101                }
    71102        }
  • _plugins_/abonnements/trunk/genie/abonnements_verifier_notifications.php

    r99536 r101264  
    1919                foreach ($notifications as $notification){
    2020                       
    21                         //avant ou après la date de fin de l'abonnement?
    22                         if($relance['quand'] == "apres") $operateur = " - ";
    23                         else $operateur = " + ";
     21                        // Avant ou après la date de fin de l'abonnement ?
     22                        switch ($notification['quand']){
     23                                case 'apres':
     24                                        $operateur = " - ";
     25                                        break;
     26                                default:
     27                                        $operateur = " + ";
     28                        }
    2429                       
    25                         // De combien doit-on modifier la date
     30                        // De combien doit-on modifier la date ?
    2631                        switch ($notification['periode']){
    2732                                case 'jours':
     
    4146                        }
    4247                       
    43                         // Pour cette notification on cherche donc tous les abonnés ayant cet échéance avec la même offre
     48                        // Pour cette notification on cherche donc tous les abonnés ayant cette échéance avec la même offre
    4449                        if ($a_notifier = sql_allfetsel(
    4550                                'id_abonnement, nom, email',
     
    5560                                        $id_job = job_queue_add(       
    5661                                                'abonnements_notifier_echeance',
    57                                                 "Notifier ${abonne['nom']} ${notification['duree']} ${notification['periode']} avant la fin de son abonnement ${abonne['id_abonnement']}",
    58                                                 array($abonne['id_abonnement'], $abonne['nom'], $abonne['email'], $notification['duree'], $notification['periode']),
     62                                                "Notifier ${abonne['nom']} ${notification['duree']} ${notification['periode']} ${notification['quand']} l'échéance de son abonnement ${abonne['id_abonnement']}",
     63                                                array(
     64                                                        $abonne['id_abonnement'],
     65                                                        $abonne['nom'],
     66                                                        $abonne['email'],
     67                                                        $notification['duree'],
     68                                                        $notification['periode'],
     69                                                        $notification['quand'],
     70                                                ),
    5971                                                'inc/abonnements',
    6072                                                true
  • _plugins_/abonnements/trunk/inc/abonnements.php

    r99115 r101264  
    250250}
    251251
    252 /*
    253  * Envoyer un courriel à l'abonné pour lui rappeler combien de temps il lui reste
    254  */
    255 function abonnements_notifier_echeance($id_abonnement, $nom, $email, $duree, $periode){
     252/**
     253 * Envoyer un courriel à l'abonné pour lui rappeler une échéance.
     254 *
     255 * @example
     256 * Échéances dans 15 jours, il y a 1 mois, et le jour même :
     257 * ````
     258 * abonnements_notifier_echeance(1, 'untel', 'x@email.ltd', 15, 'jours', 'avant');
     259 * abonnements_notifier_echeance(1, 'untel', 'x@email.ltd', 1, 'mois', 'apres');
     260 * abonnements_notifier_echeance(1, 'untel', 'x@email.ltd', 0, 'jours', 'pendant');
     261 * ````
     262 *
     263 * @param int $id_abonnement
     264 *     Numéro de l'abonnement
     265 * @param string $nom
     266 *     Nom de la personne à notifier
     267 * @param string $email
     268 *     Email de la personne à notifier
     269 * @param int $duree
     270 *     Durée de l'échéance
     271 * @param string $periode
     272 *     Période de l'échéance : `jours` | `mois`
     273 * @param string $quand
     274 *     Indique si on est avant, après, ou le jour même de l'échéance
     275 *     - `avant`   : on est avant la fin de l'abonnement (par défaut pour rétro compat)
     276 *     - `après`   : on est après la fin de l'abonnement
     277 *     - `pendant` : on est le jour même de la fin de l'abonnement
     278 * @return void
     279 */
     280function abonnements_notifier_echeance($id_abonnement, $nom, $email, $duree, $periode, $quand = 'avant'){
     281        // Assurons nous que le "quand" est cohérent
     282        if ($duree === 0){
     283                $quand = 'pendant';
     284        }
    256285        $quoi    = 'abonnement_echeance';
    257286        $options = array(
     
    261290                'duree'   => $duree,
    262291                'periode' => $periode,
     292                'quand'   => $quand,
    263293        );
    264294        $notifications = charger_fonction('notifications', 'inc');
  • _plugins_/abonnements/trunk/lang/abonnement_fr.php

    r97187 r101264  
    4343
    4444        // N
    45         'notification_echeance_corps' => '<p>Bonjour @nom@,</p>
    46                 <p>Vous recevez ce courriel car vous êtes abonné au site @nom_site_spip@ avec l’offre "@offre@".</p>
    47                 <p>Votre abonnement arrive à échéance dans : <strong>@echeance@</strong>.<br/>
    48                 Nous vous invitons donc à le renouveler avant son expiration.</p>
    49                 <p>Merci de votre confiance, et n’hésitez pas à nous contacter pour toute information complémentaire.</p>',
    50         'notification_echeance_sujet_jours' => 'Votre abonnement se termine dans @duree@ jour(s) !',
    51         'notification_echeance_sujet_mois' => 'Votre abonnement se termine dans @duree@ mois !',
     45        'notification_echeance_chapo' => '<p>Bonjour @nom@,</p>',
     46        'notification_echeance_corps_avant' => '<p>Vous recevez ce courriel car vous êtes abonné.e au site @nom_site_spip@ avec l’offre « @offre@ ».</p>
     47        <p>Votre abonnement arrive à échéance dans : <strong>@echeance@</strong>.<br/>
     48        Nous vous invitons donc à le renouveler avant son expiration.</p>',
     49        'notification_echeance_corps_apres' => '<p>Vous recevez ce courriel car vous étiez abonné.e au site @nom_site_spip@ avec l’offre « @offre@ ».</p>
     50        <p>Votre abonnement est arrivé à échéance il y a : <strong>@echeance@</strong>.<br/>
     51        Nous vous invitons donc à le renouveler.</p>',
     52        'notification_echeance_corps_pendant' => '<p>Vous recevez ce courriel car vous êtes abonné.e au site @nom_site_spip@ avec l’offre « @offre@ ».</p>
     53        <p>Votre abonnement arrive à échéance aujourd\'hui.<br/>
     54        Nous vous invitons donc à le renouveler avant son expiration.</p>',
     55        'notification_echeance_signature' => '<p>Merci de votre confiance, et n’hésitez pas à nous contacter pour toute information complémentaire.</p>',
     56        'notification_echeance_sujet_jours_avant' => 'Votre abonnement se termine dans @duree@ jour(s) !',
     57        'notification_echeance_sujet_jours_pendant' => 'Votre abonnement se termine aujourd\'hui !',
     58        'notification_echeance_sujet_jours_apres' => 'Votre abonnement est terminé depuis @duree@ jour(s) !',
     59        'notification_echeance_sujet_mois_avant' => 'Votre abonnement se termine dans @duree@ mois !',
     60        'notification_echeance_sujet_mois_pendant' => 'Votre abonnement se termine ce mois-ci !',
     61        'notification_echeance_sujet_mois_apres' => 'Votre abonnement est terminé depuis @duree@ mois !',
    5262
    5363        // R
  • _plugins_/abonnements/trunk/lang/abonnementsoffre_fr.php

    r99543 r101264  
    2828        'champ_quand_choix_apres' => 'Après',
    2929        'champ_quand_choix_avant' => 'Avant',
     30        'champ_quand_choix_pendant' => 'Le jour même',
    3031        'champ_quand_label' => 'Quand ?',
    3132        'champ_taxe_label' => 'Tva (%)',
     
    3334        'configurer_notifications' => 'Configurer les notifications',
    3435        'configurer_notifications_quand' => 'Quand ?',
     36
     37        // E
     38        'erreur_notification_doublon' => 'Cette notification est déjà enregistrée',
    3539
    3640        // I
     
    4145        'info_aucun_abonnementsoffre' => 'Aucune offre d’abonnement',
    4246        'info_nb_abonnementsoffres' => '@nb@ offres d’abonnement',
     47        'info_1_jours_apres' => '1 jour après',
     48        'info_nb_jours_apres' => '@nb@ jours après',
     49        'info_1_jours_avant' => '1 jour avant',
     50        'info_nb_jours_avant' => '@nb@ jours avant',
     51        'info_1_mois_apres' => '1 mois après',
     52        'info_nb_mois_apres' => '@nb@ mois après',
     53        'info_1_mois_avant' => '1 mois avant',
     54        'info_nb_mois_avant' => '@nb@ mois avant',
     55        'info_aucune_notification' => 'Aucune notification',
    4356
    4457        // N
  • _plugins_/abonnements/trunk/notifications/abonnement_echeance.html

    r71605 r101264  
    1 <BOUCLE_abonnement(ABONNEMENTS){id_abonnement}>
    2 #SET{nom,#ENV{nom}}
     1[(#REM)
     2
     3        Modèle pour la notification d'une échéance d'un abonnement
     4
     5        Paramètres :
     6        ** obligatoire
     7        * conseillé
     8       
     9        - id_abonnement**
     10        - nom*     : nom du destinataire
     11        - email*   : email du destinataire
     12        - duree*   : nombre indiquant la durée par rapport à l'échéance
     13        - periode* : unité de la durée
     14                     jours | mois
     15        - quand*   : indique quand on se situe par rapport à l'échéance
     16                     avant | apres | pendant
     17]
     18<BOUCLE_abonnement(ABONNEMENTS){id_abonnement}{tout}>
     19[(#REM)
     20        Pour la date, si on n'a pas les valeurs requises dans l'env, on prévoit un fallback
     21]
     22<BOUCLE_date(CONDITION){si #ENV{duree}|is_null|ou{#ENV{periode}|is_null}|ou{#ENV{quand}|is_null}}>
     23#SET{duree,#ENV{date}|strtotime|moins{#DATE_FIN|strtotime}|div{86400}|abs|round}
     24#SET{periode,jours}
     25#SET{quand,#GET{duree}|=={0}|?{pendant,#ENV{date}|strtotime|>{#DATE_FIN|strtotime}|?{apres,avant}}}
     26</BOUCLE_date>
     27#SET{duree,#ENV{duree}}
     28#SET{periode,#ENV{periode}}
     29#SET{quand,#ENV{quand}}
     30<//B_date>
     31#SET{nom,#ENV{nom}|sinon{#INFO_NOM{auteur,#ID_AUTEUR}}}
     32#SET{email,#ENV{email}|sinon{#INFO_EMAIL{auteur,#ID_AUTEUR}}}
    333#SET{offre,#INFO_TITRE{abonnements_offre,#ID_ABONNEMENTS_OFFRE}}
    4 #SET{echeance, #VAL{abonnementsoffre:champ_periode_nb_}|concat{#ENV{periode}}|_T{#ARRAY{nb,#ENV{duree}}}}
     34#SET{echeance, #VAL{abonnementsoffre:champ_periode_nb_}|concat{#GET{periode}}|_T{#ARRAY{nb,#GET{duree}}}}
    535
    636<body>
    7 <:abonnement:notification_echeance_corps{nom=#GET{nom}, nom_site_spip=#NOM_SITE_SPIP, offre=#GET{offre}, echeance=#GET{echeance}}:>
     37<:abonnement:notification_echeance_chapo{nom=#GET{nom}}:>
     38[(#VAL{abonnement:notification_echeance_corps_}|concat{#GET{quand}}|_T{#ARRAY{echeance,#GET{echeance},nom_site_spip,#NOM_SITE_SPIP,offre,#GET{offre}}})]
     39<:abonnement:notification_echeance_signature:>
    840</body>
    941</BOUCLE_abonnement>
  • _plugins_/abonnements/trunk/notifications/abonnement_echeance.php

    r99115 r101264  
    1616 */
    1717function notifications_abonnement_echeance_dist($quoi, $id, $options) {
    18         $sujet = _T('abonnement:notification_echeance_sujet_'.$options['periode'], array('duree'=>$options['duree']));
     18        $sujet = _T(
     19                "abonnement:notification_echeance_sujet_{$options['periode']}_{$options['quand']}",
     20                array(
     21                        'duree' => $options['duree'],
     22                )
     23        );
    1924        // Destinataires
    2025        $destinataires = pipeline('notifications_destinataires',
     
    3742                        'duree'         => $options['duree'],
    3843                        'periode'       => $options['periode'],
     44                        'quand'         => $options['quand'],
    3945                )
    4046        );
  • _plugins_/abonnements/trunk/paquet.xml

    r101146 r101264  
    22        prefix="abonnements"
    33        categorie="auteur"
    4         version="3.1.13"
    5         schema="2.2.5"
     4        version="3.1.14"
     5        schema="2.2.6"
    66        etat="test"
    77        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.