source: spip-zone/_core_/plugins/forum/notifications/forumvalide.php @ 41556

Last change on this file since 41556 was 41556, checked in by cedric@…, 11 years ago

notification des auteurs des objets lie au forum : generalisation a n'importe quel objet.
cependant, par defaut dans le core, seuls les articles restent concernes (gestion de la configuration).
Il suffira d'etendre ce cas en positionnant $prevenir_auteurs dans le plugin notifications

File size: 2.6 KB
Line 
1<?php
2/*
3 * Plugin Notifications
4 * (c) 2009 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9
10/**
11 * cette notification s'execute quand on valide un message 'prop'ose,
12 * dans ecrire/inc/forum_insert.php ; ici on va notifier ceux qui ne l'ont
13 * pas ete a la notification forumposte (sachant que les deux peuvent se
14 * suivre si le forum est valide directement ('pos' ou 'abo')
15 * http://doc.spip.org/@notifications_forumvalide_dist
16 *
17 * @param string $quoi
18 * @param int $id_forum
19 */
20function notifications_forumvalide_dist($quoi, $id_forum, $options) {
21
22        $t = sql_fetsel("*", "spip_forum", "id_forum=".intval($id_forum));
23        if (!$t
24                // forum sur un message prive : pas de notification ici (cron)
25                OR @$t['statut'] == 'perso')
26                return;
27
28        // plugin notification si present
29        $prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) AND $GLOBALS['notifications']['prevenir_auteurs'];
30        // sinon voie normale
31        if ($t['objet']=='article' AND !$prevenir_auteurs){
32                $s = sql_getfetsel('accepter_forum','spip_articles',"id_article=" . $t['id_objet']);
33                if (!$s)  $s = substr($GLOBALS['meta']["forums_publics"],0,3);
34
35                $prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'],",$s,")!==false
36                        OR @$GLOBALS['meta']['prevenir_auteurs'] === 'oui'); // compat
37        }
38
39        include_spip('inc/texte');
40        include_spip('inc/filtres');
41        include_spip('inc/autoriser');
42
43        // Qui va-t-on prevenir ?
44        $tous = array();
45        // Ne pas ecrire au posteur du message, ni au moderateur qui valide le forum,
46        $pasmoi = array($t['email_auteur'],$GLOBALS['visiteur_session']['email']);
47
48        // 1. Les auteurs de l'objet lie au forum
49        // seulement ceux qui n'ont
50        // pas le droit de le moderer (les autres l'ont recu plus tot)
51        if ($prevenir_auteurs) {
52                $result = sql_select("auteurs.*","spip_auteurs AS auteurs, spip_auteurs_liens AS lien","lien.objet=".sql_quote($t['objet'])." AND lien.id_objet=".intval($t['id_objet'])." AND auteurs.id_auteur=lien.id_auteur");
53
54                while ($qui = sql_fetch($result)) {
55                        if ($qui['email']) {
56                                if (!autoriser('modererforum', $t['objet'], $t['id_objet'], $qui['id_auteur']))
57                                        $tous[] = $qui['email'];
58                                else
59                                        // Ne pas ecrire aux auteurs deja notifies precedemment
60                                        $pasmoi[] = $qui['email'];
61                        }
62                }
63        }
64
65        $options['forum'] = $t;
66        $destinataires = pipeline('notifications_destinataires',
67                array(
68                        'args'=>array('quoi'=>$quoi,'id'=>$id_forum,'options'=>$options)
69                ,
70                        'data'=>$tous)
71        );
72
73        // Nettoyer le tableau
74        // en enlevant les exclus
75        notifications_nettoyer_emails($destinataires,$pasmoi);
76
77        //
78        // Envoyer les emails
79        //
80        foreach ($destinataires as $email) {
81                $texte = email_notification_forum($t, $email);
82                notifications_envoyer_mails($email, $texte);
83        }
84
85}
86
87?>
Note: See TracBrowser for help on using the repository browser.