/** * 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); } } }
/** * 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); } }
/** * 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); }
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); } }
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); }
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; }
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; }
/** * 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); } }
/** * 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); } }