source: spip-zone/_plugins_/alertes/trunk/genie/alertes.php @ 81197

Last change on this file since 81197 was 81197, checked in by magegahell@…, 5 years ago

Et fallait que je me rate : oublie de la branche. On déplace dans trunk

File size: 3.7 KB
Line 
1<?php
2/*
3 * Plugin Alertes
4 * Distribué sous licence GPL
5 *
6 * Système d'envoi des emails d'alertes par pseudo-CRON SPIP.
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11function genie_alertes_dist($time) {
12        include_spip('base/abstract_sql');
13        $now = date('Y-m-d H:i:s');
14        //Récupération de la configuration
15        $a = @unserialize($GLOBALS['meta']['config_alertes']);
16        $limit = "0, ".intval($a['nb_mails']);
17        $nb_max = sql_countsel("id_alerte_cron", "spip_alertes_cron","date_pour_envoi <= '".$now."'"); //Nombres total d'alerte à traité, donc de mail à envoyer.
18        //Si on a plus d'alertes prevues que d'email autorisé à envoyer, il faudra poursuivre la tâche.
19        if($nb_max > intval($a['nb_mails'])){
20                $time = - intval($a['nb_mails']); //Si j'ai bien compris, temps en seconde avant de relancer la tâche non-terminée.
21        }
22        //Parcours des alertes demandées, qui ne doivent pas être dans le futur
23        if ($resultats = sql_select("*", "spip_alertes_cron","date_pour_envoi <= '".$now."'",$groupby, $orderby, $limit)) {
24                include_spip('classes/facteur'); //dépendance Facteur
25                $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
26                //Envoi des emails d'alertes
27                while ($res = sql_fetch($resultats)) {
28                        $id_article = $res['id_objet']; //Pour l'instant ça ne gère que les articles
29                        $id_auteur = $res['id_auteur'];
30                        //On récupere l'email de l'auteur concerné
31                        if($auteur = sql_select('id_auteur,email','spip_auteurs','id_auteur = '.intval($id_auteur)) ){
32                                while ($aut = sql_fetch($auteur)) {
33                                        //Evidemment, il faut l'email du membre.
34                                        $email = $aut['email'];
35                                        //On va quand même vérifier que l'article existe encore/est en etat publié
36                                        $verif = sql_select('statut','spip_articles','id_article = '.intval($id_article));
37                                        while($art = sql_fetch($verif)){
38                                                $statut = $art['statut'];
39                                        }
40                                        if( ($email)&&($statut == 'publie') ){
41                                                //On build le mail à partir de templates
42                                                $header_email = recuperer_fond("alertes/header-email-alerte",  array('id_article' => $id_article,'id_auteur' => $id_auteur));
43                                                $footer_email = recuperer_fond("alertes/footer-email-alerte",  array('id_article' => $id_article,'id_auteur' => $id_auteur));
44                                                $corps_email = recuperer_fond("alertes/corps-email-alerte", array('id_article' => $id_article,'id_auteur' => $id_auteur));
45                                                $sujet =  recuperer_fond("alertes/sujet-email-alerte", array('id_article' => $id_article,'id_auteur' => $id_auteur));  // Sujet du mail aussi en template (dangereux mais pratique si on veut le customiser). Doit renvoyer du texte brut                               
46                                                //On n'envoie que si on a un contenu (présumé dans le corps du mail)
47                                                if($corps_email){
48                                                        //Envoi email via Facteur
49                                                        $html = $header_email.$corps_email.$footer_email;
50                                                        $texte = Facteur::html2text($html); //Version  texte
51                                                        $corps = array(
52                                                                'html' => $html,
53                                                                'texte' => $texte
54                                                        );     
55                                                        if($ok = $envoyer_mail($email, $sujet, $corps)){
56                                                                //Email envoyé, on retire l'alerte-cron et on log.
57                                                                $del = sql_delete('spip_alertes_cron', 'id_alerte_cron = ' . intval($res['id_alerte_cron']));
58                                                                spip_log('Email correctement envoyer a '.$email, 'alertes'._LOG_INFO); 
59                                                        }else{
60                                                                //Email non envoyé. On log.
61                                                                spip_log('Echec de l\'envoie d\'email a '.$email, 'alertes'._LOG_ERREUR); 
62                                                        }
63                                                }
64                                        }else{
65                                                //Auteur sans email ou article non-publié/inexistant
66                                                if($statut != 'publie'){
67                                                        //Article non publie, l'alerte n'a pas lieu d'être nulle part
68                                                        $del = sql_delete("spip_alertes_cron", "objet = 'article' AND id_objet = " . intval($id_article));
69                                                }
70                                        }
71                                }
72                        }
73                }
74        }
75       
76        return $time;
77}
78
79?>
Note: See TracBrowser for help on using the repository browser.