[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / forum / notifications / forumposte.php
1 <?php
2 /*
3 * Plugin Notifications
4 * (c) 2009 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9 /**
10 * Notification de message de forum posté
11 *
12 * @package SPIP\Forum\Notifications
13 **/
14
15 if (!defined("_ECRIRE_INC_VERSION")) {
16 return;
17 }
18
19 /**
20 * Cette notification s'exécute quand un message est posté
21 *
22 * @param string $quoi
23 * @param int $id_forum
24 * @param array $options
25 */
26 function notifications_forumposte_dist($quoi, $id_forum, $options) {
27 $t = sql_fetsel("*", "spip_forum", "id_forum=" . intval($id_forum));
28 if (!$t) {
29 return;
30 }
31
32 // plugin notification si present
33 $prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) and $GLOBALS['notifications']['prevenir_auteurs'];
34 // sinon voie normale
35 if ($t['objet'] == 'article' and !$prevenir_auteurs) {
36 $s = sql_getfetsel('accepter_forum', 'spip_articles', "id_article=" . $t['id_objet']);
37 if (!$s) {
38 $s = substr($GLOBALS['meta']["forums_publics"], 0, 3);
39 }
40
41 $prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'], ",$s,") !== false
42 or @$GLOBALS['meta']['prevenir_auteurs'] === 'oui'); // compat
43 }
44
45 include_spip('inc/texte');
46 include_spip('inc/filtres');
47 include_spip('inc/autoriser');
48
49 // Qui va-t-on prevenir ?
50 $tous = array();
51
52 // 1. Les auteurs de l'objet lie au forum
53 // seulement s'ils ont le droit de le moderer (les autres seront
54 // avertis par la notifications_forumvalide).
55 if ($prevenir_auteurs) {
56 $result = sql_select("auteurs.*", "spip_auteurs AS auteurs, spip_auteurs_liens AS lien",
57 "lien.objet=" . sql_quote($t['objet']) . " AND lien.id_objet=" . intval($t['id_objet']) . " AND auteurs.id_auteur=lien.id_auteur");
58
59 while ($qui = sql_fetch($result)) {
60 if ($qui['email'] and autoriser('modererforum', $t['objet'], $t['id_objet'], $qui['id_auteur'])) {
61 $tous[] = $qui['email'];
62 }
63 }
64 }
65
66 $options['forum'] = $t;
67 $destinataires = pipeline('notifications_destinataires',
68 array(
69 'args' => array('quoi' => $quoi, 'id' => $id_forum, 'options' => $options),
70 'data' => $tous
71 )
72 );
73
74 // Nettoyer le tableau
75 // Ne pas ecrire au posteur du message !
76 notifications_nettoyer_emails($destinataires, array($t['email_auteur']));
77
78 //
79 // Envoyer les emails
80 //
81 $email_notification_forum = charger_fonction('email_notification_forum', 'inc');
82 foreach ($destinataires as $email) {
83 $texte = $email_notification_forum($t, $email);
84 notifications_envoyer_mails($email, $texte);
85 }
86
87 // Notifier les autres si le forum est valide
88 // est-ce que cet appel devrait bien etre la ?
89 if ($t['statut'] == 'publie') {
90 $notifications = charger_fonction('notifications', 'inc');
91 $notifications('forumvalide', $id_forum);
92 }
93 }