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

Last change on this file since 85043 was 71605, checked in by rastapopoulos@…, 8 years ago

Un système pour configurer des notifications de rappel d'échéance des abonnements.

Pour chaque offre d'abonnement, on a donc un formulaire permettant d'ajouter autant de rappels que l'on veut, en donnant des durées. Par exemple :

  • 1 mois
  • 7 jours

Dans ce cas, un courriel sera envoyé à l'abonné un mois avant la fin, et 7 jours avant la fin.

Ce courriel est dans un squelette HTML, que l'on peut donc personnaliser. Comme pour l'instant il n'y a pas de page publique officielle de prévu pour s'abonner, ou même de config du plugin pour ça, le message reste assez simple, on verra plus tard.

Un génie est lancé une fois par jour pour vérifier s'il doit programmer des notifications. Comme c'est par jour, on ne peut donc configurer les rappels qu'en jours et en mois (pas en heures quoi).

File size: 2.0 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                        // De combien doit-on modifier la date
21                        switch ($notification['periode']){
22                                case 'jours':
23                                        $ajout = " + ${notification['duree']} days";
24                                        break;
25                                case 'mois':
26                                        $ajout = " + ${notification['duree']} months";
27                                        break;
28                                default:
29                                        $ajout ='';
30                                        break;
31                        }
32                       
33                        // S'il y a de quoi ajouter, alors on va calculer l'échéance à chercher
34                        if ($ajout){
35                                $echeance = date('Y-m-d', strtotime($jourdhui.$ajout));
36                        }
37                       
38                        // Pour cette notification on cherche donc tous les abonnés ayant cet échéance avec la même offre
39                        if ($a_notifier = sql_allfetsel(
40                                'id_abonnement, nom, email',
41                                'spip_abonnements as a left join spip_auteurs as u on a.id_auteur=u.id_auteur',
42                                array(
43                                        'DATE_FORMAT(date_fin, "%Y-%m-%d") = '.sql_quote($echeance),
44                                        'id_abonnements_offre = '.intval($notification['id_abonnements_offre']),
45                                        'email is not null'
46                                )
47                        )){
48                                // Pour chacun on programme un envoi de mail
49                                foreach ($a_notifier as $abonne){
50                                        $id_job = job_queue_add(       
51                                                'abonnements_notifier_echeance',
52                                                "Notifier ${abonne['nom']} ${notification['duree']} ${notification['periode']} avant la fin de son abonnement ${abonne['id_abonnement']}",
53                                                array($abonne['id_abonnement'], $abonne['nom'], $abonne['email'], $notification['duree'], $notification['periode']),
54                                                'inc/abonnements',
55                                                true
56                                        );
57                                        job_queue_link($id_job, array('objet'=>'abonnement', 'id_objet'=>$abonne['id_abonnement']));
58                                }
59                        }
60                }
61        }
62       
63        return 1;
64}
65
66?>
Note: See TracBrowser for help on using the repository browser.