[PLUGINS] +set de base
[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 (!$GLOBALS['notifications']['messagerie'])
25 return;
26 include_spip('base/abstract_sql');
27 $envoyer_mail = charger_fonction('envoyer_mail','inc');
28
29 $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",
30 "spip_auteurs_liens AS lien, spip_messages AS message,spip_auteurs AS auteur",
31 "lien.objet='message' AND lien.id_objet = message.id_message AND lien.id_auteur = auteur.id_auteur AND lien.vu='non'");
32 while ($t = sql_fetch($s)) {
33 // si le message est tout nouveau (ou n'a pas de date), on l'ignore
34 if (!$d = strtotime($t['date'])
35 OR $d > time() - _DELAI_NOTIFICATION_MESSAGERIE)
36 continue;
37
38 // Si l'auteur est en ligne (ou ne l'a jamais ete), on l'ignore aussi
39 if (!$d = strtotime($t['en_ligne'])
40 OR $d > time() - _DELAI_NOTIFICATION_MESSAGERIE)
41 continue;
42
43 // Si l'auteur n'a pas de mail ou est a la poubelle, on l'ignore
44 if (!$t['email'] OR $t['statut'] == '5poubelle')
45 continue;
46
47 // OK on peut lui envoyer le mail
48 include_spip('inc/notifications');
49 include_spip('inc/texte');
50
51 // Chercher les forums les plus recents de ce message, pour afficher
52 // des extraits
53 $body = _T('form_forum_message_auto')."\n\n";
54 $body .= "* " . textebrut(propre(couper(
55 $t['titre']."<p>".$t['texte'], 700)))."\n\n";
56
57 $f = sql_select("titre,texte","spip_forum","id_message = " .intval($t['id_objet'])
58 ." AND UNIX_TIMESTAMP(date_heure) > "._q($time));
59 while ($ff = sql_fetch($f)) {
60 $body .= "----\n"
61 .textebrut(propre(couper(
62 "** ".$ff['titre']."<p>".$ff['texte'], 700)))."\n\n";
63 }
64
65 $u = generer_url_ecrire('message', 'id_message='.$t['id_objet'],'&');
66 $body .= "$u\n";
67
68 $subject = "[" .
69 entites_html(textebrut(typo($GLOBALS['meta']["nom_site"]))) .
70 "] ["._T('onglet_messagerie')."] ".typo($t['titre']);
71
72 // Ne pas recommencer la prochaine, meme en cas de plantage du mail :)
73 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']));
74 $envoyer_mail($t['email'], $subject, $body);
75 }
76
77 if ($t)
78 return 1;
79 }
80
81 ?>