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 | |
---|
19 | $t = sql_fetsel("*", "spip_forum", "id_forum=".intval($id_forum)); |
---|
20 | if (!$t) |
---|
21 | return; |
---|
22 | |
---|
23 | // plugin notification si present |
---|
24 | $prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) AND $GLOBALS['notifications']['prevenir_auteurs']; |
---|
25 | // sinon voie normale |
---|
26 | if ($t['objet']=='article' AND $t['id_objet'] AND !$prevenir_auteurs){ |
---|
27 | $s = sql_getfetsel('accepter_forum','spip_articles',"id_article=" . $t['id_objet']); |
---|
28 | if (!$s) $s = substr($GLOBALS['meta']["forums_publics"],0,3); |
---|
29 | |
---|
30 | $prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'],",$s,")!==false |
---|
31 | OR @$GLOBALS['meta']['prevenir_auteurs'] === 'oui'); // compat |
---|
32 | } |
---|
33 | |
---|
34 | include_spip('inc/texte'); |
---|
35 | include_spip('inc/filtres'); |
---|
36 | include_spip('inc/autoriser'); |
---|
37 | |
---|
38 | // Qui va-t-on prevenir ? |
---|
39 | $tous = array(); |
---|
40 | |
---|
41 | // 1. Les auteurs de l'objet lie au forum |
---|
42 | // seulement s'ils ont le droit de le moderer (les autres seront |
---|
43 | // avertis par la notifications_forumvalide). |
---|
44 | if ($prevenir_auteurs) { |
---|
45 | $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"); |
---|
46 | |
---|
47 | while ($qui = sql_fetch($result)) { |
---|
48 | if ($qui['email'] AND autoriser('modererforum', $t['objet'], $t['id_objet'], $qui['id_auteur'])) |
---|
49 | $tous[] = $qui['email']; |
---|
50 | } |
---|
51 | } |
---|
52 | |
---|
53 | $options['forum'] = $t; |
---|
54 | $destinataires = pipeline('notifications_destinataires', |
---|
55 | array( |
---|
56 | 'args'=>array('quoi'=>$quoi,'id'=>$id_forum,'options'=>$options) |
---|
57 | , |
---|
58 | 'data'=>$tous) |
---|
59 | ); |
---|
60 | |
---|
61 | // Nettoyer le tableau |
---|
62 | // Ne pas ecrire au posteur du message ! |
---|
63 | notifications_nettoyer_emails($destinataires,array($t['email_auteur'])); |
---|
64 | |
---|
65 | // |
---|
66 | // Envoyer les emails |
---|
67 | // |
---|
68 | |
---|
69 | // preparer le calcul des liens de moderation |
---|
70 | $moderations = array(); |
---|
71 | foreach(array('publie','spam','off') as $statut){ |
---|
72 | if ($statut!==$t['statut']){ |
---|
73 | $moderations["url_moderer_$statut"] = "$id_forum-$statut-".$t['statut']; |
---|
74 | } |
---|
75 | } |
---|
76 | include_spip("inc/securiser_action"); |
---|
77 | $action = 'instituer_forum_paremail'; |
---|
78 | $pass = secret_du_site(); |
---|
79 | |
---|
80 | // notifications groupees pour les forums moderes a posteriori : |
---|
81 | // les notifications des messages de statut 'publie' |
---|
82 | // sont envoyees sans delai aux moderateurs |
---|
83 | $ng_forum = in_array('forum',lire_config('notifications_groupees_evenements')); |
---|
84 | $table = table_objet_sql($t['objet']); |
---|
85 | $id = id_table_objet($table); |
---|
86 | if (!$ng_forum OR ($ng_forum AND (sql_getfetsel("accepter_forum",$table,$id."=".intval($t['id_objet'])) == 'pos') AND $t['statut'] == 'publie')) { |
---|
87 | $email_notification_forum = charger_fonction('email_notification_forum','inc'); |
---|
88 | foreach ($destinataires as $email) { |
---|
89 | // ajouter les liens de moderation par statut |
---|
90 | $contexte = array('notification_email'=>$email); |
---|
91 | foreach($moderations as $k=>$arg){ |
---|
92 | $arg = "$arg-$email"; |
---|
93 | $hash = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere'); |
---|
94 | $contexte[$k] = generer_url_action($action, "arg=$arg&hash=$hash", true, true); |
---|
95 | } |
---|
96 | |
---|
97 | $texte = $email_notification_forum($t, $email, $contexte); |
---|
98 | notifications_envoyer_mails_texte_ou_html($email, $texte); |
---|
99 | } |
---|
100 | } |
---|
101 | |
---|
102 | // Notifier les autres si le forum est valide |
---|
103 | // est-ce que cet appel devrait bien etre la ? |
---|
104 | if ($t['statut'] == 'publie') { |
---|
105 | $notifications = charger_fonction('notifications', 'inc'); |
---|
106 | $notifications('forumvalide', $id_forum); |
---|
107 | } |
---|
108 | } |
---|
109 | ?> |
---|