source: spip-zone/_plugins_/alertes/trunk/alertes_pipelines.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: 9.5 KB
Line 
1<?php
2/*
3 * Plugin Alertes
4 * Distribué sous licence GPL
5 *
6 * Pipelines utilisés par le plugins d'Alertes.
7 * (NB : celui de notification ralentit de facto le mécanisme de publication d'article)
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12/*** Appel des CSS ***/
13function alertes_insert_head_css($flux){
14        $css = find_in_path("css/alertes.css");
15        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".direction_css($css)."' />\n";
16        return $flux;
17}
18/*** Tache CRON pour l'envoie différé des alertes ***/
19function alertes_taches_generales_cron($taches_generales){
20        //Récuperation de la configuration
21        $a = @unserialize($GLOBALS['meta']['config_alertes']);
22        if(is_array($a) AND intval($a['intervalle_cron']) > 1){
23                $taches_generales['alertes'] = 60 * intval($a['intervalle_cron']); // toutes les X minutes
24        }
25        return $taches_generales;
26}
27/*** Alertes : envoie d'email lors de la publication d'un article ***/
28function alertes_notifications_destinataires($flux) {
29        $quoi = $flux['args']['quoi'];
30        $options = $flux['args']['options'];
31        $date_pour_envoi = $options['date'];
32        //Récuperation de la configuration
33        $a = @unserialize($GLOBALS['meta']['config_alertes']);
34        //Publication d'article : à ajouter aux alertes des abonnés
35        if ($quoi=='instituerarticle' AND $options['statut'] == 'publie' AND is_array($a)){;
36                //Seulement si alertes actives
37                if($a['activer_alertes'] == 'oui'){
38                        $emails = array();
39                        $id_article = $flux['args']['id'];               
40                        include_spip('base/abstract_sql');
41                        //Mots clefs abonnables
42                        if($a['groupes']){
43                                $mots = sql_select('mot.id_mot, mot.id_groupe','spip_mots AS mot, spip_mots_liens AS ma','ma.id_objet = '.$id_article.' AND ma.objet ="article" AND ma.id_mot = mot.id_mot AND mot.id_groupe IN('.$a['groupes'].')');
44                                while ($mot = sql_fetch($mots)){               
45                                        //Qui est abonné à ce mot ?
46                                        $abonnes = sql_select('id_auteur', 'spip_alertes', 'id_objet = '.$mot['id_mot'].' AND objet = "mot"');
47                                        while($abonne = sql_fetch($abonnes)){
48                                                //L'auteur existe-t-il et a-t-il un email ?
49                                                if($verif = sql_select('id_auteur, email', 'spip_auteurs', 'id_auteur= '.$abonne['id_auteur'])){
50                                                        while($v = sql_fetch($verif)){
51                                                                if( ($v['email'])&&($v['id_auteur']) ){
52                                                                        //Email, on stocke pour envoi
53                                                                        $emails[$v['id_auteur']] = $v['email']; //A voir si ça évite les doublons
54                                                                }
55                                                                if( (!$v['email'])||($v['email'] == '') ){
56                                                                        //Pas d'email, on enlève des listes
57                                                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$v['id_auteur'])){
58                                                                                                spip_log('Effacement des auteurs sans emails le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
59                                                                                        }                                       
60                                                                }
61                                                        }
62                                                }else{
63                                                        //Retrait de l'auteur introuvable
64                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$abonne['id_auteur'])){
65                                                                spip_log('Effacer des auteurs sans ID le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
66                                                        }
67                                                }
68                                        }
69                                }
70                        }
71                        //Fin Mots-clefs abonnables
72                       
73                        //Secteurs abonnables
74                        if($a['secteurs']){
75                                $secteurs = sql_select('id_secteur','spip_articles','id_article = '.$id_article.'  AND id_secteur IN('.$a['secteurs'].')');
76                                while ($secteur = sql_fetch($secteurs)){               
77                                        //Qui est abonné à ce secteur ?
78                                        $abonnes = sql_select('id_auteur', 'spip_alertes', 'id_objet = '.$secteur['id_secteur'].' AND objet = "secteur"');
79                                        while($abonne = sql_fetch($abonnes)){
80                                                //L'auteur existe-t-il et a-t-il un email ?
81                                                if($verif = sql_select('id_auteur, email', 'spip_auteurs', 'id_auteur= '.$abonne['id_auteur'])){
82                                                        while($v = sql_fetch($verif)){
83                                                                if( ($v['email'])&&($v['id_auteur']) ){
84                                                                        //Email, on stocke pour envoi
85                                                                        $emails[$v['id_auteur']] = $v['email']; //A voir si ça évite les doublons
86                                                                }
87                                                                if( (!$v['email'])||($v['email'] == '') ){
88                                                                        //Pas d'email, on enlève des listes
89                                                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$v['id_auteur'])){
90                                                                                                spip_log('Effacer des auteurs sans email le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
91                                                                                        }                                       
92                                                                }
93                                                        }
94                                                }else{
95                                                        //Retrait de l'auteur introuvable
96                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$abonne['id_auteur'])){
97                                                                spip_log('Effacer des auteurs sans ID le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
98                                                        }
99                                                }
100                                        }
101                                }
102                        }
103                        //Fin secteurs abonnables
104                       
105                        //Rubriques abonnables
106                        if($a['rubriques']){
107                                $rubriques = sql_select('id_rubrique','spip_articles','id_article = '.$id_article.'  AND id_rubrique IN('.$a['rubriques'].')');
108                                while ($rubrique = sql_fetch($rubriques)){             
109                                        //Qui est abonné à cette rubrique ?
110                                        $abonnes = sql_select('id_auteur', 'spip_alertes', 'id_objet = '.$rubrique['id_rubrique'].' AND objet = "rubrique"');
111                                        while($abonne = sql_fetch($abonnes)){
112                                                //L'auteur existe-t-il et a-t-il un email ?
113                                                if($verif = sql_select('id_auteur, email', 'spip_auteurs', 'id_auteur= '.$abonne['id_auteur'])){
114                                                        while($v = sql_fetch($verif)){
115                                                                if( ($v['email'])&&($v['id_auteur']) ){
116                                                                        //Email, on stocke pour envoi
117                                                                        $emails[$v['id_auteur']] = $v['email']; //A voir si ça évite les doublons
118                                                                }
119                                                                if( (!$v['email'])||($v['email'] == '') ){
120                                                                        //Pas d'email, on enlève des listes
121                                                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$v['id_auteur'])){
122                                                                                                spip_log('Effacer des auteurs sans email le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
123                                                                                        }                                       
124                                                                }
125                                                        }
126                                                }else{
127                                                        //Retrait de l'auteur introuvable
128                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$abonne['id_auteur'])){
129                                                                spip_log('Effacer des auteurs sans ID le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
130                                                        }
131                                                }
132                                        }
133                                }
134                        }
135                        //Fin rubriques abonnables
136
137                        //Auteurs abonnables
138                        if($a['auteurs']){
139                                $auteurs = sql_select("id_auteur","spip_auteurs_liens","id_objet = ".$id_article."  AND objet='article'");
140                                while ($auteur = sql_fetch($auteurs)){         
141                                        //Qui est abonné à cet auteur ?
142                                        $abonnes = sql_select('id_auteur', 'spip_alertes', 'id_objet = '.$auteur['id_auteur'].' AND objet = "auteur"');
143                                        while($abonne = sql_fetch($abonnes)){
144                                                //L'auteur existe-t-il et a-t-il un email ?
145                                                if($verif = sql_select('id_auteur, email', 'spip_auteurs', 'id_auteur= '.$abonne['id_auteur'])){
146                                                        while($v = sql_fetch($verif)){
147                                                                if( ($v['email'])&&($v['id_auteur']) ){
148                                                                        //Email, on stocke pour envoi
149                                                                        $emails[$v['id_auteur']] = $v['email']; //A voir si ça évite les doublons
150                                                                }
151                                                                if( (!$v['email'])||($v['email'] == '') ){
152                                                                        //Pas d'email, on enlève des listes
153                                                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$v['id_auteur'])){
154                                                                                                spip_log('Effacer des auteurs sans email le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
155                                                                                        }                                       
156                                                                }
157                                                        }
158                                                }else{
159                                                        //Retrait de l'auteur introuvable
160                                                        if($del = sql_delete('spip_alertes', 'id_auteur='.$abonne['id_auteur'])){
161                                                                spip_log('Effacer des auteurs sans ID le '.date('Y-m-d H:i:s'), 'alertes'._LOG_INFO); 
162                                                        }
163                                                }
164                                        }
165                                }
166                        }
167                        //Fin auteurs abonnables
168                       
169                        //Maintenant, on gére l'envoi
170                        if( is_array($emails) AND sizeof($emails) > 0 ){
171                                //Mode CRON ou direct ? Mode CRON d'office si la configuration autorise les articles publié post-daté.
172                                if( ($a['mode_envoi'] == 'cron')||($GLOBALS['meta']['post_dates'] == 'oui') ){
173                                        //Mode CRON : on enregistre tout ça dans la table d'envois CRON dediée
174                                        foreach($emails as $id_auteur => $email){
175                                                $ins_cron =  sql_insertq('spip_alertes_cron', array('id_auteur'=> $id_auteur, 'id_objet' => $id_article, 'objet' => 'article', 'date_pour_envoi' => $date_pour_envoi));
176                                        }
177                               
178                                }else{
179                                //Mode direct (attention à la charge)
180                                        //Fonctions facteurs
181                                        include_spip('classes/facteur'); //dépendance Facteur
182                                        $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
183                                               
184                                        foreach($emails as $id_auteur => $email){               
185                                                //On construit le mail à partir de templates
186                                                $header_email = recuperer_fond("alertes/header-email-alerte",  array('id_article' => $id_article,'id_auteur' => $id_auteur));
187                                                $footer_email = recuperer_fond("alertes/footer-email-alerte",  array('id_article' => $id_article,'id_auteur' => $id_auteur));
188                                                $corps_email = recuperer_fond("alertes/corps-email-alerte", array('id_article' => $id_article,'id_auteur' => $id_auteur));
189                                                $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                               
190                                                //On n'envoie que si on a un contenu (présumé dans le corps du mail
191                                                if($corps_email){
192                                                        //Envoi email via Facteur
193                                                        $html = $header_email.$corps_email.$footer_email;
194                                                        $texte = Facteur::html2text($html); //Version  texte
195                                                        $corps = array(
196                                                                'html' => $html,
197                                                                'texte' => $texte
198                                                        );     
199                                                        if($ok = $envoyer_mail($email, $sujet, $corps)){
200                                                                //Email envoyé. On log.
201                                                                spip_log('Email correctement envoyer a '.$email, 'alertes'._LOG_INFO); 
202                                                        }else{
203                                                                //Email non envoyé. On log.
204                                                                spip_log('Echec de l\'envoie d\'email a '.$email, 'alertes'._LOG_ERREUR); 
205                                                        }
206                                                }                                       
207                                        }
208                                }
209                        }
210                }
211        }
212        return $flux;
213}
214
215
216?>
Note: See TracBrowser for help on using the repository browser.