source: spip-zone/_plugins_/notifications_groupees/trunk/notifications/forumposte.php @ 80175

Last change on this file since 80175 was 80175, checked in by homere1974@…, 7 years ago

Ébauche rudimentaire de remise groupée des notifications d'événements, à base de colle et de bouts de ficelle, limitée en l'état aux notifications de forums publics. Activation par événement et par visiteur. Nécessite Notifications.

  • Rien de vraiment générique pour regrouper les notifications. Compléter le tableau d'envois quiquoi. (Il serait peut-être souhaitable de pouvoir programmer par événement les notifications groupées et adapter ainsi les divers délais de notifications à l'activité du site.)
  • Option d'activation / désactivation par visiteur via l'url de suivi des Notifications (ajout d'un champ notifications_groupees dans les tables auteurs et forum).
  • Regroupement des messages de forums publics publiés, proposés et spam, selon le statut des destinataires. Par précaution antispam les modérateurs de forums modérés a posteriori reçoivent néanmoins sans délai les notifications de messages publiés.
  • Squelette de mail notifications/groupees.html - forums publics : titre, statut et lien par message ; pour les modos, lien vers controler_forum, pas de liens de modération par message.
File size: 3.6 KB
Line 
1<?php
2/*
3 * Plugin Notifications
4 * (c) 2009-2012 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!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 */
17function 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        $notif_groupees = isset($GLOBALS['meta']['notifications_groupees_qui']) AND $GLOBALS['meta']['notifications_groupees_qui'];
84        $table = table_objet_sql($t['objet']);
85        $id = id_table_objet($table);
86        if (!$notif_groupees OR ($notif_groupees 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?>
Note: See TracBrowser for help on using the repository browser.