[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / notifications2 / notifications / forumposte.php
1 <?php
2 /*
3 * Plugin Notifications
4 * (c) 2009-2012 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) return;
10
11 /**
12 * cette notification s'execute quand un message est poste,
13 *
14 * @param string $quoi
15 * @param int $id_forum
16 */
17 function notifications_forumposte_dist($quoi, $id_forum, $options) {
18 $t = sql_fetsel("*", "spip_forum", "id_forum=".intval($id_forum));
19 if (!$t)
20 return;
21
22 // plugin notification si present
23 $prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) AND $GLOBALS['notifications']['prevenir_auteurs'];
24 // sinon voie normale
25 if ($t['objet']=='article' AND $t['id_objet'] AND !$prevenir_auteurs){
26 $s = sql_getfetsel('accepter_forum','spip_articles',"id_article=" . $t['id_objet']);
27 if (!$s) $s = substr($GLOBALS['meta']["forums_publics"],0,3);
28
29 $prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'],",$s,")!==false
30 OR @$GLOBALS['meta']['prevenir_auteurs'] === 'oui'); // compat
31 }
32
33 include_spip('inc/texte');
34 include_spip('inc/filtres');
35 include_spip('inc/autoriser');
36
37 // Qui va-t-on prevenir ?
38 $tous = array();
39
40 // 1. Les auteurs de l'objet lie au forum
41 // seulement s'ils ont le droit de le moderer (les autres seront
42 // avertis par la notifications_forumvalide).
43 if ($prevenir_auteurs) {
44 $result = sql_select("auteurs.*","spip_auteurs AS auteurs JOIN 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");
45
46 while ($qui = sql_fetch($result)) {
47 if ($qui['email'] AND autoriser('modererforum', $t['objet'], $t['id_objet'], $qui['id_auteur']))
48 $tous[] = $qui['email'];
49 }
50 }
51
52 $options['forum'] = $t;
53 $destinataires = pipeline('notifications_destinataires',
54 array(
55 'args'=>array('quoi'=>$quoi,'id'=>$id_forum,'options'=>$options)
56 ,
57 'data'=>$tous)
58 );
59
60 // Nettoyer le tableau
61 // Ne pas ecrire au posteur du message !
62 notifications_nettoyer_emails($destinataires,array($t['email_auteur']));
63
64 //
65 // Envoyer les emails
66 //
67
68 // preparer le calcul des liens de moderation
69 $moderations = array();
70 foreach(array('publie','spam','off') as $statut){
71 if ($statut!==$t['statut']){
72 $moderations["url_moderer_$statut"] = "$id_forum-$statut-".$t['statut'];
73 }
74 }
75 include_spip("inc/securiser_action");
76 $action = 'instituer_forum_paremail';
77 $pass = secret_du_site();
78
79
80 $email_notification_forum = charger_fonction('email_notification_forum','inc');
81 foreach ($destinataires as $email) {
82 // ajouter les liens de moderation par statut
83 $contexte = array('notification_email'=>$email);
84 foreach($moderations as $k=>$arg){
85 $arg = "$arg-$email";
86 $hash = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere');
87 $contexte[$k] = generer_url_action($action, "arg=$arg&hash=$hash", true, true);
88 }
89
90 $texte = $email_notification_forum($t, $email, $contexte);
91 notifications_envoyer_mails_texte_ou_html($email, $texte);
92 }
93
94 // Notifier les autres si le forum est valide
95 // est-ce que cet appel devrait bien etre la ?
96 if ($t['statut'] == 'publie') {
97 $notifications = charger_fonction('notifications', 'inc');
98 $notifications('forumvalide', $id_forum);
99 }
100 }
101 ?>