示例#1
0
/**
 * Envoi du Mail des nouveautés
 *
 * Ce mail est basé sur le squelette nouveautes.html
 *
 * La meta `dernier_envoi_neuf` permet de marquer la date du dernier envoi
 * et de determiner les nouveautes publiees depuis cette date
 *
 * @param int $t
 * @return int
 */
function genie_mail_dist($t)
{
    $adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
    $jours_neuf = $GLOBALS['meta']['jours_neuf'];
    $now = time();
    if (!isset($GLOBALS['meta']['dernier_envoi_neuf'])) {
        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now - 3600 * 24 * $jours_neuf));
    }
    $page = recuperer_fond('nouveautes', array('date' => $GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf), array('raw' => true));
    if (strlen(trim($page['texte']))) {
        // recuperer les entetes envoyes par #HTTP_HEADER
        $headers = "";
        if (isset($page['entetes']) and count($page['entetes'])) {
            foreach ($page['entetes'] as $k => $v) {
                $headers .= (strlen($v) ? "{$k}: {$v}" : $k) . "\n";
            }
        }
        include_spip("inc/notifications");
        notifications_envoyer_mails($adresse_neuf, $page['texte'], "", "", $headers);
        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now));
    } else {
        spip_log("mail nouveautes : rien de neuf depuis {$jours_neuf} jours");
    }
    return 1;
}
function notifications_instituerarticle_dist($quoi, $id_article, $options)
{
    // ne devrait jamais se produire
    if ($options['statut'] == $options['statut_ancien']) {
        spip_log("statut inchange", 'notifications');
        return;
    }
    include_spip('inc/texte');
    $modele = "";
    if ($options['statut'] == 'publie') {
        if ($GLOBALS['meta']["post_dates"] == 'non' and strtotime($options['date']) > time()) {
            $modele = "notifications/article_valide";
        } else {
            $modele = "notifications/article_publie";
        }
    }
    if ($options['statut'] == 'prop' and $options['statut_ancien'] != 'publie') {
        $modele = "notifications/article_propose";
    }
    if ($modele) {
        $destinataires = array();
        if ($GLOBALS['meta']["suivi_edito"] == "oui") {
            $destinataires = explode(',', $GLOBALS['meta']["adresse_suivi"]);
        }
        $destinataires = pipeline('notifications_destinataires', array('args' => array('quoi' => $quoi, 'id' => $id_article, 'options' => $options), 'data' => $destinataires));
        $texte = email_notification_article($id_article, $modele);
        notifications_envoyer_mails($destinataires, $texte);
    }
}
/**
 * Envoyer les notifications consecutives a l'envoi d'un message
 * (ie passage en statut=publie)
 *
 * @param string $quoi
 * @param int $id_message
 * @param array $options
 */
function notifications_instituermessage_dist($quoi, $id_message, $options = array())
{
    // ne devrait jamais se produire
    if ($options['statut'] == $options['statut_ancien']) {
        spip_log("statut inchange", 'notifications');
        return;
    }
    if ($options['statut'] == 'publie') {
        include_spip('inc/messages');
        $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message));
        $vue = "notifications/message_{$type}_publie";
        if (trouver_fond($vue)) {
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            // pour nettoyer_titre_email
            $texte = recuperer_fond($vue, array('id_message' => $id_message));
            // recuperer tous les emails des auteurs qui ont recu le message dans leur boite
            // si c'est une annonce generale, on envoie a tout le monde
            include_spip('inc/messages');
            $where = array("email!=''", "statut!='5poubelle'", sql_in('statut', messagerie_statuts_destinataires_possibles()));
            // pour une annonce : tous ceux qui recoivent des messages
            if ($type !== 'affich') {
                $ids = sql_allfetsel('id_auteur', 'spip_auteurs_liens', "objet='message' AND id_objet=" . intval($id_message));
                $ids = array_map('reset', $ids);
                $where[] = sql_in('id_auteur', $ids);
            }
            $emails = sql_allfetsel('email', "spip_auteurs", $where);
            $emails = array_map('reset', $emails);
            include_spip('inc/notifications');
            notifications_envoyer_mails($emails, $texte);
        }
    }
}
示例#4
0
/**
 * cette notification s'execute quand on valide un message 'prop'ose,
 * dans ecrire/inc/forum_insert.php ; ici on va notifier ceux qui ne l'ont
 * pas ete a la notification forumposte (sachant que les deux peuvent se
 * suivre si le forum est valide directement ('pos' ou 'abo')
 * http://doc.spip.org/@notifications_forumvalide_dist
 *
 * @param string $quoi
 * @param int $id_forum
 */
function notifications_forumvalide_dist($quoi, $id_forum, $options)
{
    $t = sql_fetsel("*", "spip_forum", "id_forum=" . intval($id_forum));
    if (!$t or @$t['statut'] == 'perso') {
        return;
    }
    // plugin notification si present
    $prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) and $GLOBALS['notifications']['prevenir_auteurs'];
    // sinon voie normale
    if ($t['objet'] == 'article' and !$prevenir_auteurs) {
        $s = sql_getfetsel('accepter_forum', 'spip_articles', "id_article=" . $t['id_objet']);
        if (!$s) {
            $s = substr($GLOBALS['meta']["forums_publics"], 0, 3);
        }
        $prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'], ",{$s},") !== false or @$GLOBALS['meta']['prevenir_auteurs'] === 'oui');
        // compat
    }
    include_spip('inc/texte');
    include_spip('inc/filtres');
    include_spip('inc/autoriser');
    // Qui va-t-on prevenir ?
    $tous = array();
    // Ne pas ecrire au posteur du message, ni au moderateur qui valide le forum,
    $pasmoi = array($t['email_auteur'], $GLOBALS['visiteur_session']['email']);
    // 1. Les auteurs de l'objet lie au forum
    // seulement ceux qui n'ont
    // pas le droit de le moderer (les autres l'ont recu plus tot)
    if ($prevenir_auteurs) {
        $result = sql_select("auteurs.*", "spip_auteurs AS auteurs, 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");
        while ($qui = sql_fetch($result)) {
            if ($qui['email']) {
                if (!autoriser('modererforum', $t['objet'], $t['id_objet'], $qui['id_auteur'])) {
                    $tous[] = $qui['email'];
                } else {
                    // Ne pas ecrire aux auteurs deja notifies precedemment
                    $pasmoi[] = $qui['email'];
                }
            }
        }
    }
    $options['forum'] = $t;
    $destinataires = pipeline('notifications_destinataires', array('args' => array('quoi' => $quoi, 'id' => $id_forum, 'options' => $options), 'data' => $tous));
    // Nettoyer le tableau
    // en enlevant les exclus
    notifications_nettoyer_emails($destinataires, $pasmoi);
    //
    // Envoyer les emails
    //
    $email_notification_forum = charger_fonction('email_notification_forum', 'inc');
    foreach ($destinataires as $email) {
        $texte = $email_notification_forum($t, $email);
        notifications_envoyer_mails($email, $texte);
    }
}
示例#5
0
/**
 * Inscrire un nouvel auteur sur la base de son nom et son email
 * L'email est utilise pour reperer si il existe deja ou non
 * => identifiant par defaut
 *
 * @param string $statut
 * @param string $mail_complet
 * @param string $nom
 * @param array $options
 *   login : login precalcule
 *   id : id_rubrique fournit en second arg de #FORMULAIRE_INSCRIPTION
 *   from : email de l'envoyeur pour l'envoi du mail d'inscription
 *   force_nouveau : forcer le statut nouveau sur l'auteur inscrit, meme si il existait deja en base
 * @return array|string
 */
function action_inscrire_auteur_dist($statut, $mail_complet, $nom, $options = array())
{
    if (!is_array($options)) {
        $options = array('id' => $options);
    }
    if (function_exists('test_inscription')) {
        $f = 'test_inscription';
    } else {
        $f = 'test_inscription_dist';
    }
    $desc = $f($statut, $mail_complet, $nom, $options);
    // erreur ?
    if (!is_array($desc)) {
        return _T($desc);
    }
    include_spip('base/abstract_sql');
    $res = sql_select("statut, id_auteur, login, email", "spip_auteurs", "email=" . sql_quote($desc['email']));
    // erreur ?
    if (!$res) {
        return _T('titre_probleme_technique');
    }
    $row = sql_fetch($res);
    sql_free($res);
    if ($row) {
        if (isset($options['force_nouveau']) and $options['force_nouveau'] == true) {
            $desc['id_auteur'] = $row['id_auteur'];
            $desc = inscription_nouveau($desc);
        } else {
            $desc = $row;
        }
    } else {
        // s'il n'existe pas deja, creer les identifiants
        $desc = inscription_nouveau($desc);
    }
    // erreur ?
    if (!is_array($desc)) {
        return $desc;
    }
    // generer le mot de passe (ou le refaire si compte inutilise)
    $desc['pass'] = creer_pass_pour_auteur($desc['id_auteur']);
    // attribuer un jeton pour confirmation par clic sur un lien
    $desc['jeton'] = auteur_attribuer_jeton($desc['id_auteur']);
    // charger de suite cette fonction, pour ses utilitaires
    $envoyer_inscription = charger_fonction("envoyer_inscription", "");
    list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut, $options);
    $notifications = charger_fonction('notifications', 'inc');
    notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head);
    // Notifications
    $notifications('inscription', $desc['id_auteur'], array('nom' => $desc['nom'], 'email' => $desc['email']));
    return $desc;
}
/**
 * @param string $quoi
 * @param int $id_souscription
 * @param array $options
 */
function notifications_alerterecheancesouscription_dist($quoi, $id_souscription, $options)
{
    include_spip('inc/config');
    $email = lire_config('souscription/email_alerte_echeances');
    if (!$email) {
        $email = lire_config('bank_paiement/email_ticket_admin');
    }
    if (!$email) {
        $email = $GLOBALS['meta']['email_webmaster'];
    }
    $texte = recuperer_fond("notifications/alerter_echeance_souscription", array('id_souscription' => $id_souscription));
    include_spip('inc/notifications');
    notifications_envoyer_mails($email, $texte);
}
示例#7
0
function message_oubli($email, $param)
{
    $r = formulaires_oubli_mail($email);
    if (is_array($r) and $r[1]) {
        include_spip('inc/texte');
        # pour corriger_typo
        include_spip('action/inscrire_auteur');
        $cookie = auteur_attribuer_jeton($r[1]['id_auteur']);
        $msg = recuperer_fond("modeles/mail_oubli", array('url_reset' => generer_url_public('spip_pass', "{$param}={$cookie}", true, false)));
        include_spip("inc/notifications");
        notifications_envoyer_mails($email, $msg);
        return _T('pass_recevoir_mail');
    }
    return _T('pass_erreur_probleme_technique');
}
/**
 * @param string $quoi
 * @param int $id_souscription
 * @param array $options
 */
function notifications_informersouscriptionterminee_dist($quoi, $id_souscription, $options)
{
    $souscription = sql_fetsel("*", "spip_souscriptions", "id_souscription=" . intval($id_souscription));
    // on prend l'email de l'id_auteur en priorite, car a priori plus a jour
    if ($souscription['id_auteur']) {
        $email = sql_getfetsel("email", "spip_auteurs", "id_auteur=" . intval($souscription['id_auteur']));
    }
    if (!$email) {
        $email = $souscription['courriel'];
    }
    if ($email) {
        $texte = recuperer_fond("notifications/informer_souscription_terminee", array('id_souscription' => $id_souscription));
        include_spip('inc/notifications');
        notifications_envoyer_mails($email, $texte);
    }
}
示例#9
0
function message_oubli($email, $param)
{
    $r = formulaires_oubli_mail($email);
    if (is_array($r) and $r[1]) {
        include_spip('inc/texte');
        # pour corriger_typo
        include_spip('action/inscrire_auteur');
        $cookie = auteur_attribuer_jeton($r[1]['id_auteur']);
        // l'url_reset doit etre une URL de confiance, on force donc un url_absolue sur adresse_site
        include_spip('inc/filtres');
        $msg = recuperer_fond("modeles/mail_oubli", array('url_reset' => url_absolue(generer_url_public('spip_pass', "{$param}={$cookie}"), $GLOBALS['meta']['adresse_site'])));
        include_spip("inc/notifications");
        notifications_envoyer_mails($email, $msg);
        return _T('pass_recevoir_mail');
    }
    return _T('pass_erreur_probleme_technique');
}
/**
 * Envoi d'une notification après reglement
 *
 * @pipeline trig_bank_notifier_reglement
 * @param  array $flux Données du pipeline
 * @return array       Données du pipeline
 */
function souscription_trig_bank_notifier_reglement($flux)
{
    $souscription = sql_fetsel(array('courriel', 'id_souscription_campagne', 'abo_statut', 'id_souscription'), 'spip_souscriptions', 'id_transaction_echeance=' . intval($flux['args']['id_transaction']));
    // on ne notifie pas les N echeances d'un don mensuel mais seulement la premiere
    $n_echeance = 1;
    if ($souscription['abo_statut'] == 'ok') {
        $n_echeance = sql_countsel("spip_souscriptions_liens", "id_souscription=" . intval($souscription['id_souscription']) . " AND objet=" . sql_quote('transaction'));
    }
    if ($n_echeance <= 1) {
        $email = $souscription['courriel'];
        $campagne = $souscription['id_souscription_campagne'];
        if ($flux['args']['succes']) {
            $message = recuperer_fond(_trouver_modele_courriel_reglement("succes", $campagne), array('id_transaction' => $flux['args']['id_transaction']));
        } else {
            $message = recuperer_fond(_trouver_modele_courriel_reglement("echec", $campagne), array('id_transaction' => $flux['args']['id_transaction']));
        }
        spip_log("Envoi de notification de confirmation de paiement a [{$email}] pour la souscription #" . $flux['args']['id_transaction'], "souscription");
        include_spip("inc/notifications");
        notifications_envoyer_mails($email, $message, "", $GLOBALS['meta']['email_webmaster']);
    }
    return $flux;
}
/**
 * Action sécurisée pour valider manuellement les membres du site
 *
 * On change le statut de l'auteur et on lui envoie un mail avec de quoi se loguer
 *
 * @return rien
 */
function action_valider_auteur_dist()
{
    $securiser_action = charger_fonction('securiser_action', 'inc');
    $id_auteur = $securiser_action();
    if (!$id_auteur or !autoriser('valider', 'auteur', $id_auteur)) {
        include_spip('inc/minipres');
        $msg = _T('valider_inscription:permissions_insuffisantes');
        die(minipres($msg));
    }
    include_spip('base/abstract_sql');
    // le statut à donné a été enregistré dans le champs « prefs »
    $statut = sql_getfetsel('prefs', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    include_spip('action/editer_objet');
    if ($err = objet_modifier('auteur', $id_auteur, array('statut' => $statut))) {
        include_spip('inc/minipres');
        die(minipres(_T('valider_inscription:erreur_validation'), $err));
    }
    $desc = sql_fetsel('statut, id_auteur, login, email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    include_spip('action/inscrire_auteur');
    // generer le mot de passe (ou le refaire si compte inutilise)
    $desc['pass'] = creer_pass_pour_auteur($id_auteur);
    // attribuer un jeton pour confirmation par clic sur un lien
    $desc['jeton'] = auteur_attribuer_jeton($id_auteur);
    // Si on doit lier l'auteur à une zone, il faut le faire ici,
    // parce que les visiteurs n'ont pas les autorisations nécessaires
    // lors de l'inscription
    if (test_plugin_actif('auteur2zone')) {
        include_spip('inc/config');
        $config = lire_config('auteur2zone');
        // Lier à la zone
        include_spip('action/editer_zone');
        zone_lier($config['auteur_zone_auto'], 'auteur', $id_auteur);
    }
    $envoyer_inscription = charger_fonction('envoyer_inscription', '');
    list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut);
    include_spip('inc/notifications');
    notifications_envoyer_mails($desc['email'], $msg, $sujet, $from, $head);
}
示例#12
0
function profils_creer_depuis_mailsubscriber($champs, $notifier = true)
{
    $set = array('email' => $champs['email'], 'login' => $champs['email'], 'name' => $champs['nom'], 'prenom' => '');
    if (!$set['prenom'] and !$set['name']) {
        $nom = explode('@', $set['email']);
        $set['prenom'] = reset($nom);
    }
    $set['nom'] = trim($set['prenom'] . ' ' . $set['name']);
    if (!($row = profils_creer_auteur($set))) {
        return 0;
    }
    $id_auteur = $row['id_auteur'];
    if ($notifier) {
        // envoyer l'email avec login/pass
        $contexte = array('nom' => $row['prenom'] ? $row['prenom'] : $row['nom'], 'email' => $row['email'], 'pass' => $row['pass']);
        $message = recuperer_fond('modeles/mail_creation_profil_mailsubscriber', $contexte);
        include_spip("inc/notifications");
        notifications_envoyer_mails($row['email'], $message);
    }
    return $id_auteur;
}
示例#13
0
function notifier_proposition_article($id_article) {
	if ($GLOBALS['meta']["suivi_edito"] == "oui") {
		$adresse_suivi = $GLOBALS['meta']["adresse_suivi"];
		$texte = email_notification_article($id_article, "notifications/article_propose");
		notifications_envoyer_mails($adresse_suivi, $texte);
	}
}
function inscrire_visiteur_candidatures_fraap($statut, $mail_complet, $nom, $prenom, $activite, $pass, $options = array())
{
    if (!is_array($options)) {
        $options = array('id' => $options);
    }
    include_spip('action/inscrire_auteur');
    if (function_exists('test_inscription')) {
        $f = 'test_inscription';
    } else {
        $f = 'test_inscription_dist';
    }
    $desc = $f($statut, $mail_complet, $nom, $options);
    if (!is_array($desc)) {
        return _T($desc);
    }
    // ajouter les arguments restants
    $desc['prenom'] = $prenom;
    $desc['activite'] = $activite;
    $desc['pass'] = $pass;
    include_spip('base/abstract_sql');
    $res = sql_select("statut, id_auteur, login, email", "spip_auteurs", "email=" . sql_quote($desc['email']));
    // erreur ?
    if (!$res) {
        return _T('titre_probleme_technique');
    }
    $row = sql_fetch($res);
    sql_free($res);
    if ($row) {
        if (isset($options['force_nouveau']) and $options['force_nouveau'] == true) {
            $desc['id_auteur'] = $row['id_auteur'];
            $desc = inscription_nouveau($desc);
        } else {
            $desc = $row;
        }
    } else {
        // s'il n'existe pas deja, creer les identifiants
        $desc = inscription_nouveau($desc);
    }
    if (!is_array($desc)) {
        return $desc;
    }
    // le mot de passe a été saisi par le visiteur,
    // donc on ne fait rien ici
    // generer le mot de passe (ou le refaire si compte inutilise)
    // $desc['pass'] = creer_pass_pour_auteur($desc['id_auteur']);
    // attribuer un jeton pour confirmation par clic sur un lien
    $desc['jeton'] = auteur_attribuer_jeton($desc['id_auteur']);
    // ajouter la zone restreinte stages
    sql_insertq("spip_zones_liens", array('id_zone' => '1', "id_objet" => $desc['id_auteur'], "objet" => "auteur"));
    // charger de suite cette fonction, pour ses utilitaires
    $envoyer_inscription = charger_fonction("envoyer_inscription_fraap_candidatures", "action");
    list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $prenom, $statut, $options);
    $notifications = charger_fonction('notifications', 'inc');
    notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head);
    // Notifications
    $notifications('inscription', $desc['id_auteur'], array('nom' => $desc['nom'], 'email' => $desc['email']));
    return $desc;
}
示例#15
0
/**
 * Notifier lors du changement de statut d'un auteur
 *
 * Basée sur :
 * http://doc.spip.org/@notifications_instituerarticle_dist
 *
 * @param string $quoi
 * @param int $id_auteur
 * @param array $options
 */
function notifications_instituerauteur($quoi, $id_auteur, $options)
{
    // ne devrait jamais se produire
    if ($options['statut'] == $options['statut_ancien']) {
        spip_log("statut auteur inchange", 'notifications');
        return;
    }
    include_spip('inc/texte');
    include_spip('inscription3_mes_fonctions');
    $modele = "";
    /**
     * Si l'ancien statut est 8aconfirmer
     * - on notifie la validation s'il n'est pas mis à la poubelle
     * - on notifie l'invalidation s'il est mis à la poubelle
     *
     * S'il est validé, on lui recrée un pass que l'on met dans le mail avec son login
     */
    if ($options['statut_ancien'] == '8aconfirmer') {
        //spip_log("instituerauteur_caap niv 1",'notifications',_LOG_ERREUR);
        if ($options['statut'] == '5poubelle') {
            $modele = "notifications/auteur_invalide";
            $modele_admin = "notifications/auteur_invalide_admin";
        } else {
            /**
             * Dans le cas d'une validation, on envoit le pass
             * On fait tout en php pour ne pas avoir de traces du pass dans les logs
             * On regénère le mot de passe également
             */
            /*   surcharges caap :
             *    - adresse_site est celle de la rubrique espace Adhérents
             *    - le texte du mail est modifié
             */
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            //$adresse_site = $GLOBALS['meta']["adresse_site"];
            include_spip('inc/filtres');
            $adresse_site = url_absolue(generer_url_public('rubrique', 'id_rubrique=12'));
            $nom_site_spip = nettoyer_titre_email($GLOBALS['meta']["nom_site"]);
            $user = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
            include_spip('inc/acces');
            $pass = creer_pass_aleatoire(8, $id_auteur);
            include_spip('action/editer_auteur');
            instituer_auteur($id_auteur, array('pass' => $pass));
            $texte = "[{$nom_site_spip}] " . _T('form_forum_identifiants') . "\n\n" . _T('form_forum_message_auto') . "\n\n" . _T('form_forum_bonjour', array('nom' => $user['nom'])) . "\n\n" . _T('caap:form_forum_voici1', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site . '/', 'adresse_login' => generer_url_public('login'))) . "\n\n- " . _T('form_forum_login') . " " . $user['login'] . "\n- " . _T('form_forum_pass') . " " . $pass . "\n\n";
            $modele_admin = "notifications/auteur_valide_admin";
        }
    }
    if ($modele or $texte) {
        $options['type'] = 'user';
        $destinataires = array();
        $destinataires = pipeline('notifications_destinataires', array('args' => array('quoi' => $quoi, 'id' => $id_auteur, 'options' => $options), 'data' => $destinataires));
        if ($modele) {
            $texte = email_notification_objet($id_auteur, "auteur", $modele);
        }
        notifications_envoyer_mails($destinataires, $texte);
    }
    if ($modele_admin) {
        $options['type'] = 'admin';
        $destinataires = array();
        $destinataires = pipeline('notifications_destinataires', array('args' => array('quoi' => $quoi, 'id' => $id_auteur, 'options' => $options), 'data' => $destinataires));
        $texte = email_notification_objet($id_auteur, "auteur", $modele_admin);
        notifications_envoyer_mails($destinataires, $texte);
    }
}
示例#16
0
/**
 * cette notification s'execute quand un message est poste,
 *
 * @param string $quoi
 * @param int $id_forum
 */
function notifications_forumposte_dist($quoi, $id_forum, $options) {
	$t = sql_fetsel("*", "spip_forum", "id_forum=".intval($id_forum));
	if (!$t)
		return;

	// plugin notification si present
	$prevenir_auteurs = isset($GLOBALS['notifications']['prevenir_auteurs']) AND $GLOBALS['notifications']['prevenir_auteurs'];
	// sinon voie normale
	if ($t['id_article'] AND !$prevenir_auteurs){
		$s = sql_getfetsel('accepter_forum','spip_articles',"id_article=" . $t['id_article']);
		if (!$s)  $s = substr($GLOBALS['meta']["forums_publics"],0,3);

		$prevenir_auteurs = (strpos(@$GLOBALS['meta']['prevenir_auteurs'],",$s,")!==false
			OR @$GLOBALS['meta']['prevenir_auteurs'] === 'oui'); // compat
	}

	include_spip('inc/texte');
	include_spip('inc/filtres');
	include_spip('inc/autoriser');

	// Qui va-t-on prevenir ?
	$tous = array();

	// 1. Les auteurs de l'article (si c'est un article), mais
	// seulement s'ils ont le droit de le moderer (les autres seront
	// avertis par la notifications_forumvalide).
	if ($t['id_article']
	AND $prevenir_auteurs) {
		$result = sql_select("auteurs.*","spip_auteurs AS auteurs, spip_auteurs_articles AS lien","lien.id_article=".intval($t['id_article'])." AND auteurs.id_auteur=lien.id_auteur");

		while ($qui = sql_fetch($result)) {
			if ($qui['email'] AND autoriser('modererforum', 'article', $t['id_article'], $qui['id_auteur']))
				$tous[] = $qui['email'];
		}
	}

	$options['forum'] = $t;
	$destinataires = pipeline('notifications_destinataires',
		array(
			'args'=>array('quoi'=>$quoi,'id'=>$id_forum,'options'=>$options)
		,
			'data'=>$tous)
	);

	// Nettoyer le tableau
	// Ne pas ecrire au posteur du message !
	notifications_nettoyer_emails($destinataires,array($t['email_auteur']));

	//
	// Envoyer les emails
	//
	foreach ($destinataires as $email) {
		$texte = email_notification_forum($t, $email);
		notifications_envoyer_mails($email, $texte);
	}

	// Notifier les autres si le forum est valide
	// est-ce que cet appel devrait bien etre la ?
	if ($t['statut'] == 'publie') {
		$notifications = charger_fonction('notifications', 'inc');
		$notifications('forumvalide', $id_forum);
	}
}