[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / notifications2 / genie / notifications.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 // 20 minutes de repit avant notification (+0 a 10 minutes de cron)
12 define('_DELAI_NOTIFICATION_MESSAGERIE', 60 * 20);
13
14 // Les notifications de la messagerie privee et de son forum se font par cron
15 // base sur le champ 'vu' de spip_auteurs_liens
16 // L'idee est
17 // 1) de ne pas spammer les gens qui sont en ligne
18 // 2) de ne pas notifier un auteur qu'on vient d'ajouter a une discussion,
19 // alors qu'on va peut-etre le supprimer (erreur de choix de destinataire)
20 function genie_notifications_dist($time) {
21 if (!is_array($GLOBALS['notifications'] = @unserialize($GLOBALS['meta']['notifications'])))
22 $GLOBALS['notifications'] = array();
23
24 if (empty($GLOBALS['notifications']['messagerie'])) {
25 return;
26 }
27 include_spip('base/abstract_sql');
28 $envoyer_mail = charger_fonction('envoyer_mail','inc');
29
30 $s = sql_select("lien.id_auteur,lien.id_objet,lien.objet,message.titre,message.texte, message.date_heure as date, auteur.nom,auteur.email,auteur.en_ligne",
31 "spip_auteurs_liens AS lien, spip_messages AS message,spip_auteurs AS auteur",
32 "lien.objet='message' AND lien.id_objet = message.id_message AND lien.id_auteur = auteur.id_auteur AND lien.vu='non'");
33 while ($t = sql_fetch($s)) {
34 // si le message est tout nouveau (ou n'a pas de date), on l'ignore
35 if (!$d = strtotime($t['date'])
36 OR $d > time() - _DELAI_NOTIFICATION_MESSAGERIE)
37 continue;
38
39 // Si l'auteur est en ligne (ou ne l'a jamais ete), on l'ignore aussi
40 if (!$d = strtotime($t['en_ligne'])
41 OR $d > time() - _DELAI_NOTIFICATION_MESSAGERIE)
42 continue;
43
44 // Si l'auteur n'a pas de mail ou est a la poubelle, on l'ignore
45 if (!$t['email'] OR $t['statut'] == '5poubelle')
46 continue;
47
48 // OK on peut lui envoyer le mail
49 include_spip('inc/notifications');
50 include_spip('inc/texte');
51
52 // Chercher les forums les plus recents de ce message, pour afficher
53 // des extraits
54 $body = _T('form_forum_message_auto')."\n\n";
55 $body .= "* " . textebrut(propre(couper(
56 $t['titre']."<p>".$t['texte'], 700)))."\n\n";
57
58 $f = sql_select("titre,texte","spip_forum","id_message = " .intval($t['id_objet'])
59 ." AND UNIX_TIMESTAMP(date_heure) > "._q($time));
60 while ($ff = sql_fetch($f)) {
61 $body .= "----\n"
62 .textebrut(propre(couper(
63 "** ".$ff['titre']."<p>".$ff['texte'], 700)))."\n\n";
64 }
65
66 $u = generer_url_ecrire('message', 'id_message='.$t['id_objet'],'&');
67 $body .= "$u\n";
68
69 $subject = "[" .
70 entites_html(textebrut(typo($GLOBALS['meta']["nom_site"]))) .
71 "] ["._T('onglet_messagerie')."] ".typo($t['titre']);
72
73 // Ne pas recommencer la prochaine, meme en cas de plantage du mail :)
74 sql_updateq("spip_auteurs_liens",array('vu'=>'oui'),"id_auteur=".intval($t['id_auteur'])." AND objet=".sql_quote($t['objet'])." AND id_objet=".intval($t['id_objet']));
75 $envoyer_mail($t['email'], $subject, $body);
76 }
77
78 if ($t)
79 return 1;
80 }
81
82 ?>