source: spip-zone/_plugins_/abonnements/trunk/genie/abonnements_verifier_notifications.php @ 101264

Last change on this file since 101264 was 101264, checked in by tcharlss@…, 4 years ago

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.

File size: 2.4 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6/*
7 * Vérifie si aujourd'hui on a des notifications à envoyer à certains abonnés
8 */
9function genie_abonnements_verifier_notifications_dist($time){
10        include_spip('base/abstract_sql');
11        $jourdhui = date('Y-m-d H:I:s');
12       
13        // On va chercher toutes les notifications
14        if (
15                $notifications = sql_allfetsel('*', 'spip_abonnements_offres_notifications')
16                and is_array($notifications)
17        ){
18                // Pour chaque notification on va chercher les abonnés dont c'est le moment
19                foreach ($notifications as $notification){
20                       
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                        }
29                       
30                        // De combien doit-on modifier la date ?
31                        switch ($notification['periode']){
32                                case 'jours':
33                                        $ajout = " $operateur ${notification['duree']} days";
34                                        break;
35                                case 'mois':
36                                        $ajout = " $operateur ${notification['duree']} months";
37                                        break;
38                                default:
39                                        $ajout ='';
40                                        break;
41                        }
42                       
43                        // S'il y a de quoi ajouter, alors on va calculer l'échéance à chercher
44                        if ($ajout){
45                                $echeance = date('Y-m-d', strtotime($jourdhui.$ajout));
46                        }
47                       
48                        // Pour cette notification on cherche donc tous les abonnés ayant cette échéance avec la même offre
49                        if ($a_notifier = sql_allfetsel(
50                                'id_abonnement, nom, email',
51                                'spip_abonnements as a left join spip_auteurs as u on a.id_auteur=u.id_auteur',
52                                array(
53                                        'DATE_FORMAT(date_fin, "%Y-%m-%d") = '.sql_quote($echeance),
54                                        'id_abonnements_offre = '.intval($notification['id_abonnements_offre']),
55                                        'email is not null'
56                                )
57                        )){
58                                // Pour chacun on programme un envoi de mail
59                                foreach ($a_notifier as $abonne){
60                                        $id_job = job_queue_add(       
61                                                'abonnements_notifier_echeance',
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                                                ),
71                                                'inc/abonnements',
72                                                true
73                                        );
74                                        job_queue_link($id_job, array('objet'=>'abonnement', 'id_objet'=>$abonne['id_abonnement']));
75                                }
76                        }
77                }
78        }
79       
80        return 1;
81}
82
83?>
Note: See TracBrowser for help on using the repository browser.